@dismissible/nestjs-dismissible 0.1.0-canary.4b708a5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/package.json +64 -0
  2. package/src/api/dismissible-item-response.dto.d.ts +10 -0
  3. package/src/api/dismissible-item-response.dto.js +49 -0
  4. package/src/api/dismissible-item-response.dto.js.map +1 -0
  5. package/src/api/dismissible-item.mapper.d.ts +12 -0
  6. package/src/api/dismissible-item.mapper.js +33 -0
  7. package/src/api/dismissible-item.mapper.js.map +1 -0
  8. package/src/api/dismissible-item.mapper.spec.d.ts +1 -0
  9. package/src/api/dismissible-item.mapper.spec.js +52 -0
  10. package/src/api/dismissible-item.mapper.spec.js.map +1 -0
  11. package/src/api/index.d.ts +4 -0
  12. package/src/api/index.js +10 -0
  13. package/src/api/index.js.map +1 -0
  14. package/src/api/use-cases/api-tags.constants.d.ts +4 -0
  15. package/src/api/use-cases/api-tags.constants.js +8 -0
  16. package/src/api/use-cases/api-tags.constants.js.map +1 -0
  17. package/src/api/use-cases/dismiss/dismiss.controller.d.ts +16 -0
  18. package/src/api/use-cases/dismiss/dismiss.controller.js +73 -0
  19. package/src/api/use-cases/dismiss/dismiss.controller.js.map +1 -0
  20. package/src/api/use-cases/dismiss/dismiss.controller.spec.d.ts +1 -0
  21. package/src/api/use-cases/dismiss/dismiss.controller.spec.js +37 -0
  22. package/src/api/use-cases/dismiss/dismiss.controller.spec.js.map +1 -0
  23. package/src/api/use-cases/dismiss/dismiss.response.dto.d.ts +12 -0
  24. package/src/api/use-cases/dismiss/dismiss.response.dto.js +12 -0
  25. package/src/api/use-cases/dismiss/dismiss.response.dto.js.map +1 -0
  26. package/src/api/use-cases/dismiss/index.d.ts +2 -0
  27. package/src/api/use-cases/dismiss/index.js +6 -0
  28. package/src/api/use-cases/dismiss/index.js.map +1 -0
  29. package/src/api/use-cases/get-or-create/get-or-create.controller.d.ts +21 -0
  30. package/src/api/use-cases/get-or-create/get-or-create.controller.js +104 -0
  31. package/src/api/use-cases/get-or-create/get-or-create.controller.js.map +1 -0
  32. package/src/api/use-cases/get-or-create/get-or-create.controller.spec.d.ts +1 -0
  33. package/src/api/use-cases/get-or-create/get-or-create.controller.spec.js +53 -0
  34. package/src/api/use-cases/get-or-create/get-or-create.controller.spec.js.map +1 -0
  35. package/src/api/use-cases/get-or-create/get-or-create.request.dto.d.ts +6 -0
  36. package/src/api/use-cases/get-or-create/get-or-create.request.dto.js +24 -0
  37. package/src/api/use-cases/get-or-create/get-or-create.request.dto.js.map +1 -0
  38. package/src/api/use-cases/get-or-create/get-or-create.response.dto.d.ts +12 -0
  39. package/src/api/use-cases/get-or-create/get-or-create.response.dto.js +12 -0
  40. package/src/api/use-cases/get-or-create/get-or-create.response.dto.js.map +1 -0
  41. package/src/api/use-cases/get-or-create/index.d.ts +3 -0
  42. package/src/api/use-cases/get-or-create/index.js +7 -0
  43. package/src/api/use-cases/get-or-create/index.js.map +1 -0
  44. package/src/api/use-cases/index.d.ts +3 -0
  45. package/src/api/use-cases/index.js +7 -0
  46. package/src/api/use-cases/index.js.map +1 -0
  47. package/src/api/use-cases/restore/index.d.ts +2 -0
  48. package/src/api/use-cases/restore/index.js +6 -0
  49. package/src/api/use-cases/restore/index.js.map +1 -0
  50. package/src/api/use-cases/restore/restore.controller.d.ts +16 -0
  51. package/src/api/use-cases/restore/restore.controller.js +73 -0
  52. package/src/api/use-cases/restore/restore.controller.js.map +1 -0
  53. package/src/api/use-cases/restore/restore.controller.spec.d.ts +1 -0
  54. package/src/api/use-cases/restore/restore.controller.spec.js +37 -0
  55. package/src/api/use-cases/restore/restore.controller.spec.js.map +1 -0
  56. package/src/api/use-cases/restore/restore.response.dto.d.ts +12 -0
  57. package/src/api/use-cases/restore/restore.response.dto.js +12 -0
  58. package/src/api/use-cases/restore/restore.response.dto.js.map +1 -0
  59. package/src/core/create-options.d.ts +8 -0
  60. package/src/core/create-options.js +3 -0
  61. package/src/core/create-options.js.map +1 -0
  62. package/src/core/dismissible-core.service.d.ts +44 -0
  63. package/src/core/dismissible-core.service.js +132 -0
  64. package/src/core/dismissible-core.service.js.map +1 -0
  65. package/src/core/dismissible-core.service.spec.d.ts +1 -0
  66. package/src/core/dismissible-core.service.spec.js +277 -0
  67. package/src/core/dismissible-core.service.spec.js.map +1 -0
  68. package/src/core/dismissible.service.d.ts +41 -0
  69. package/src/core/dismissible.service.js +114 -0
  70. package/src/core/dismissible.service.js.map +1 -0
  71. package/src/core/dismissible.service.spec.d.ts +1 -0
  72. package/src/core/dismissible.service.spec.js +98 -0
  73. package/src/core/dismissible.service.spec.js.map +1 -0
  74. package/src/core/hook-runner.service.d.ts +72 -0
  75. package/src/core/hook-runner.service.js +160 -0
  76. package/src/core/hook-runner.service.js.map +1 -0
  77. package/src/core/hook-runner.service.spec.d.ts +1 -0
  78. package/src/core/hook-runner.service.spec.js +214 -0
  79. package/src/core/hook-runner.service.spec.js.map +1 -0
  80. package/src/core/index.d.ts +6 -0
  81. package/src/core/index.js +10 -0
  82. package/src/core/index.js.map +1 -0
  83. package/src/core/lifecycle-hook.interface.d.ts +70 -0
  84. package/src/core/lifecycle-hook.interface.js +8 -0
  85. package/src/core/lifecycle-hook.interface.js.map +1 -0
  86. package/src/core/service-responses.interface.d.ts +28 -0
  87. package/src/core/service-responses.interface.js +3 -0
  88. package/src/core/service-responses.interface.js.map +1 -0
  89. package/src/dismissible.module.d.ts +14 -0
  90. package/src/dismissible.module.js +77 -0
  91. package/src/dismissible.module.js.map +1 -0
  92. package/src/events/dismissible.events.d.ts +45 -0
  93. package/src/events/dismissible.events.js +53 -0
  94. package/src/events/dismissible.events.js.map +1 -0
  95. package/src/events/events.constants.d.ts +17 -0
  96. package/src/events/events.constants.js +17 -0
  97. package/src/events/events.constants.js.map +1 -0
  98. package/src/events/index.d.ts +2 -0
  99. package/src/events/index.js +6 -0
  100. package/src/events/index.js.map +1 -0
  101. package/src/exceptions/dismissible.exceptions.d.ts +26 -0
  102. package/src/exceptions/dismissible.exceptions.js +49 -0
  103. package/src/exceptions/dismissible.exceptions.js.map +1 -0
  104. package/src/exceptions/dismissible.exceptions.spec.d.ts +1 -0
  105. package/src/exceptions/dismissible.exceptions.spec.js +40 -0
  106. package/src/exceptions/dismissible.exceptions.spec.js.map +1 -0
  107. package/src/exceptions/index.d.ts +1 -0
  108. package/src/exceptions/index.js +5 -0
  109. package/src/exceptions/index.js.map +1 -0
  110. package/src/index.d.ts +8 -0
  111. package/src/index.js +12 -0
  112. package/src/index.js.map +1 -0
  113. package/src/request/index.d.ts +2 -0
  114. package/src/request/index.js +6 -0
  115. package/src/request/index.js.map +1 -0
  116. package/src/request/request-context.decorator.d.ts +1 -0
  117. package/src/request/request-context.decorator.js +13 -0
  118. package/src/request/request-context.decorator.js.map +1 -0
  119. package/src/request/request-context.interface.d.ts +6 -0
  120. package/src/request/request-context.interface.js +3 -0
  121. package/src/request/request-context.interface.js.map +1 -0
  122. package/src/response/dtos/base-response.dto.d.ts +6 -0
  123. package/src/response/dtos/base-response.dto.js +18 -0
  124. package/src/response/dtos/base-response.dto.js.map +1 -0
  125. package/src/response/dtos/error-response.dto.d.ts +19 -0
  126. package/src/response/dtos/error-response.dto.js +39 -0
  127. package/src/response/dtos/error-response.dto.js.map +1 -0
  128. package/src/response/dtos/index.d.ts +3 -0
  129. package/src/response/dtos/index.js +7 -0
  130. package/src/response/dtos/index.js.map +1 -0
  131. package/src/response/dtos/success-response.dto.d.ts +28 -0
  132. package/src/response/dtos/success-response.dto.js +34 -0
  133. package/src/response/dtos/success-response.dto.js.map +1 -0
  134. package/src/response/http-exception-filter.d.ts +4 -0
  135. package/src/response/http-exception-filter.js +24 -0
  136. package/src/response/http-exception-filter.js.map +1 -0
  137. package/src/response/index.d.ts +4 -0
  138. package/src/response/index.js +8 -0
  139. package/src/response/index.js.map +1 -0
  140. package/src/response/response.module.d.ts +2 -0
  141. package/src/response/response.module.js +17 -0
  142. package/src/response/response.module.js.map +1 -0
  143. package/src/response/response.service.d.ts +6 -0
  144. package/src/response/response.service.js +25 -0
  145. package/src/response/response.service.js.map +1 -0
  146. package/src/response/response.service.spec.d.ts +1 -0
  147. package/src/response/response.service.spec.js +72 -0
  148. package/src/response/response.service.spec.js.map +1 -0
  149. package/src/testing/factories.d.ts +14 -0
  150. package/src/testing/factories.js +41 -0
  151. package/src/testing/factories.js.map +1 -0
  152. package/src/testing/index.d.ts +1 -0
  153. package/src/testing/index.js +5 -0
  154. package/src/testing/index.js.map +1 -0
  155. package/src/utils/date/date.service.d.ts +8 -0
  156. package/src/utils/date/date.service.js +24 -0
  157. package/src/utils/date/date.service.js.map +1 -0
  158. package/src/utils/date/date.service.spec.d.ts +1 -0
  159. package/src/utils/date/date.service.spec.js +83 -0
  160. package/src/utils/date/date.service.spec.js.map +1 -0
  161. package/src/utils/date/index.d.ts +1 -0
  162. package/src/utils/date/index.js +5 -0
  163. package/src/utils/date/index.js.map +1 -0
  164. package/src/utils/dismissible.helper.d.ts +4 -0
  165. package/src/utils/dismissible.helper.js +15 -0
  166. package/src/utils/dismissible.helper.js.map +1 -0
  167. package/src/utils/index.d.ts +3 -0
  168. package/src/utils/index.js +7 -0
  169. package/src/utils/index.js.map +1 -0
@@ -0,0 +1,277 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const ts_jest_mocker_1 = require("ts-jest-mocker");
4
+ const dismissible_core_service_1 = require("./dismissible-core.service");
5
+ const factories_1 = require("../testing/factories");
6
+ const exceptions_1 = require("../exceptions");
7
+ const nestjs_dismissible_item_1 = require("@dismissible/nestjs-dismissible-item");
8
+ const nestjs_validation_1 = require("@dismissible/nestjs-validation");
9
+ const common_1 = require("@nestjs/common");
10
+ const dismissible_helper_1 = require("../utils/dismissible.helper");
11
+ const date_service_1 = require("../utils/date/date.service");
12
+ describe('DismissibleCoreService', () => {
13
+ let service;
14
+ let storage;
15
+ let mockDateService;
16
+ let mockLogger;
17
+ let itemFactory;
18
+ let validationService;
19
+ let dismissibleHelper;
20
+ beforeEach(() => {
21
+ mockDateService = (0, ts_jest_mocker_1.mock)(date_service_1.DateService);
22
+ mockDateService.getNow.mockReturnValue(new Date('2024-01-15T10:00:00.000Z'));
23
+ mockLogger = (0, ts_jest_mocker_1.mock)({
24
+ failIfMockNotProvided: false,
25
+ });
26
+ storage = (0, ts_jest_mocker_1.mock)({
27
+ failIfMockNotProvided: false,
28
+ });
29
+ dismissibleHelper = (0, ts_jest_mocker_1.mock)(dismissible_helper_1.DismissibleHelper, { failIfMockNotProvided: false });
30
+ itemFactory = (0, ts_jest_mocker_1.mock)(nestjs_dismissible_item_1.DismissibleItemFactory);
31
+ validationService = (0, ts_jest_mocker_1.mock)(nestjs_validation_1.ValidationService, { failIfMockNotProvided: false });
32
+ validationService.validateInstance.mockResolvedValue(undefined);
33
+ service = new dismissible_core_service_1.DismissibleCoreService(storage, mockDateService, mockLogger, itemFactory, validationService, dismissibleHelper);
34
+ });
35
+ afterEach(() => {
36
+ jest.clearAllMocks();
37
+ });
38
+ describe('getOrCreate', () => {
39
+ it('should create a new item when it does not exist', async () => {
40
+ const testDate = new Date('2024-01-15T10:00:00.000Z');
41
+ const userId = 'user-123';
42
+ const newItem = (0, factories_1.createTestItem)({ id: 'new-item', userId, createdAt: testDate });
43
+ storage.get.mockResolvedValue(null);
44
+ storage.create.mockResolvedValue(newItem);
45
+ mockDateService.getNow.mockReturnValue(testDate);
46
+ itemFactory.create.mockReturnValue(newItem);
47
+ const result = await service.getOrCreate('new-item', userId);
48
+ expect(result.created).toBe(true);
49
+ expect(result.item.id).toBe('new-item');
50
+ expect(result.item.userId).toBe(userId);
51
+ expect(result.item.createdAt).toBeInstanceOf(Date);
52
+ expect(result.item.dismissedAt).toBeUndefined();
53
+ expect(storage.create).toHaveBeenCalledWith(newItem);
54
+ });
55
+ it('should return existing item when it exists', async () => {
56
+ const userId = 'user-123';
57
+ const existingItem = (0, factories_1.createTestItem)({ id: 'existing-item', userId });
58
+ storage.get.mockResolvedValue(existingItem);
59
+ const result = await service.getOrCreate('existing-item', userId);
60
+ expect(result.created).toBe(false);
61
+ expect(result.item).toEqual(existingItem);
62
+ expect(storage.get).toHaveBeenCalledWith(userId, 'existing-item');
63
+ });
64
+ it('should create item with metadata when provided', async () => {
65
+ const userId = 'user-123';
66
+ const metadata = { version: 2, category: 'test' };
67
+ const testDate = new Date('2024-01-15T10:00:00.000Z');
68
+ const newItem = (0, factories_1.createTestItem)({ id: 'new-item', userId, metadata, createdAt: testDate });
69
+ storage.get.mockResolvedValue(null);
70
+ storage.create.mockResolvedValue(newItem);
71
+ mockDateService.getNow.mockReturnValue(testDate);
72
+ itemFactory.create.mockReturnValue(newItem);
73
+ const result = await service.getOrCreate('new-item', userId, { metadata });
74
+ expect(result.item.metadata).toEqual(metadata);
75
+ expect(storage.create).toHaveBeenCalledWith(newItem);
76
+ });
77
+ });
78
+ describe('dismiss', () => {
79
+ it('should dismiss an existing item', async () => {
80
+ const userId = 'user-123';
81
+ const item = (0, factories_1.createTestItem)({ id: 'test-item', userId });
82
+ const previousItem = (0, factories_1.createTestItem)({ id: 'test-item', userId });
83
+ const dismissedItem = (0, factories_1.createDismissedTestItem)({ id: 'test-item', userId });
84
+ const testDate = new Date('2024-01-15T12:00:00.000Z');
85
+ storage.get.mockResolvedValue(item);
86
+ storage.update.mockResolvedValue(dismissedItem);
87
+ itemFactory.clone.mockReturnValue(previousItem);
88
+ mockDateService.getNow.mockReturnValue(testDate);
89
+ itemFactory.createDismissed.mockReturnValue(dismissedItem);
90
+ dismissibleHelper.isDismissed.mockReturnValue(false);
91
+ const result = await service.dismiss('test-item', userId);
92
+ expect(result.item.dismissedAt).toBeDefined();
93
+ expect(result.previousItem.dismissedAt).toBeUndefined();
94
+ expect(storage.update).toHaveBeenCalledWith(dismissedItem);
95
+ expect(storage.get).toHaveBeenCalledWith(userId, 'test-item');
96
+ });
97
+ it('should throw ItemNotFoundException for non-existent item', async () => {
98
+ const userId = 'user-123';
99
+ storage.get.mockResolvedValue(null);
100
+ await expect(service.dismiss('non-existent', userId)).rejects.toThrow(exceptions_1.ItemNotFoundException);
101
+ });
102
+ it('should throw ItemAlreadyDismissedException for already dismissed item', async () => {
103
+ const userId = 'user-123';
104
+ const dismissedItem = (0, factories_1.createDismissedTestItem)({ id: 'dismissed-item', userId });
105
+ storage.get.mockResolvedValue(dismissedItem);
106
+ dismissibleHelper.isDismissed.mockReturnValue(true);
107
+ await expect(service.dismiss('dismissed-item', userId)).rejects.toThrow(exceptions_1.ItemAlreadyDismissedException);
108
+ });
109
+ it('should return the previous item state', async () => {
110
+ const userId = 'user-123';
111
+ const item = (0, factories_1.createTestItem)({
112
+ id: 'test-item',
113
+ userId,
114
+ metadata: { key: 'value' },
115
+ });
116
+ const previousItem = (0, factories_1.createTestItem)({
117
+ id: 'test-item',
118
+ userId,
119
+ metadata: { key: 'value' },
120
+ });
121
+ const dismissedItem = (0, factories_1.createDismissedTestItem)({
122
+ id: 'test-item',
123
+ userId,
124
+ metadata: { key: 'value' },
125
+ });
126
+ const testDate = new Date('2024-01-15T12:00:00.000Z');
127
+ storage.get.mockResolvedValue(item);
128
+ storage.update.mockResolvedValue(dismissedItem);
129
+ itemFactory.clone.mockReturnValue(previousItem);
130
+ mockDateService.getNow.mockReturnValue(testDate);
131
+ itemFactory.createDismissed.mockReturnValue(dismissedItem);
132
+ dismissibleHelper.isDismissed.mockReturnValue(false);
133
+ const result = await service.dismiss('test-item', userId);
134
+ expect(result.previousItem.id).toBe(item.id);
135
+ expect(result.previousItem.dismissedAt).toBeUndefined();
136
+ expect(result.previousItem.metadata).toEqual({ key: 'value' });
137
+ });
138
+ });
139
+ describe('restore', () => {
140
+ it('should restore a dismissed item', async () => {
141
+ const userId = 'user-123';
142
+ const dismissedItem = (0, factories_1.createDismissedTestItem)({ id: 'dismissed-item', userId });
143
+ const previousItem = (0, factories_1.createDismissedTestItem)({ id: 'dismissed-item', userId });
144
+ const restoredItem = (0, factories_1.createTestItem)({ id: 'dismissed-item', userId });
145
+ storage.get.mockResolvedValue(dismissedItem);
146
+ storage.update.mockResolvedValue(restoredItem);
147
+ itemFactory.clone.mockReturnValue(previousItem);
148
+ itemFactory.createRestored.mockReturnValue(restoredItem);
149
+ dismissibleHelper.isDismissed.mockReturnValue(true);
150
+ const result = await service.restore('dismissed-item', userId);
151
+ expect(result.item.dismissedAt).toBeUndefined();
152
+ expect(result.previousItem.dismissedAt).toBeDefined();
153
+ expect(storage.update).toHaveBeenCalledWith(restoredItem);
154
+ expect(storage.get).toHaveBeenCalledWith(userId, 'dismissed-item');
155
+ });
156
+ it('should throw ItemNotFoundException for non-existent item', async () => {
157
+ const userId = 'user-123';
158
+ storage.get.mockResolvedValue(null);
159
+ await expect(service.restore('non-existent', userId)).rejects.toThrow(exceptions_1.ItemNotFoundException);
160
+ });
161
+ it('should throw ItemNotDismissedException for non-dismissed item', async () => {
162
+ const userId = 'user-123';
163
+ const item = (0, factories_1.createTestItem)({ id: 'active-item', userId });
164
+ storage.get.mockResolvedValue(item);
165
+ dismissibleHelper.isDismissed.mockReturnValue(false);
166
+ await expect(service.restore('active-item', userId)).rejects.toThrow(exceptions_1.ItemNotDismissedException);
167
+ });
168
+ it('should return the previous item state', async () => {
169
+ const userId = 'user-123';
170
+ const dismissedItem = (0, factories_1.createDismissedTestItem)({
171
+ id: 'dismissed-item',
172
+ userId,
173
+ metadata: { key: 'value' },
174
+ });
175
+ const previousItem = (0, factories_1.createDismissedTestItem)({
176
+ id: 'dismissed-item',
177
+ userId,
178
+ metadata: { key: 'value' },
179
+ });
180
+ const restoredItem = (0, factories_1.createTestItem)({
181
+ id: 'dismissed-item',
182
+ userId,
183
+ metadata: { key: 'value' },
184
+ });
185
+ storage.get.mockResolvedValue(dismissedItem);
186
+ storage.update.mockResolvedValue(restoredItem);
187
+ itemFactory.clone.mockReturnValue(previousItem);
188
+ itemFactory.createRestored.mockReturnValue(restoredItem);
189
+ dismissibleHelper.isDismissed.mockReturnValue(true);
190
+ const result = await service.restore('dismissed-item', userId);
191
+ expect(result.previousItem.id).toBe(dismissedItem.id);
192
+ expect(result.previousItem.dismissedAt).toBeDefined();
193
+ expect(result.previousItem.metadata).toEqual({ key: 'value' });
194
+ });
195
+ });
196
+ describe('validation', () => {
197
+ it('should throw BadRequestException when validation fails on create', async () => {
198
+ const userId = 'user-123';
199
+ const testDate = new Date('2024-01-15T10:00:00.000Z');
200
+ const newItem = (0, factories_1.createTestItem)({ id: 'new-item', userId, createdAt: testDate });
201
+ storage.get.mockResolvedValue(null);
202
+ mockDateService.getNow.mockReturnValue(testDate);
203
+ itemFactory.create.mockReturnValue(newItem);
204
+ validationService.validateInstance.mockRejectedValue(new common_1.BadRequestException('id must be a string'));
205
+ await expect(service.getOrCreate('new-item', userId)).rejects.toThrow(common_1.BadRequestException);
206
+ expect(storage.create).not.toHaveBeenCalled();
207
+ });
208
+ it('should throw BadRequestException when validation fails on dismiss', async () => {
209
+ const userId = 'user-123';
210
+ const item = (0, factories_1.createTestItem)({ id: 'test-item', userId });
211
+ const previousItem = (0, factories_1.createTestItem)({ id: 'test-item', userId });
212
+ const dismissedItem = (0, factories_1.createDismissedTestItem)({ id: 'test-item', userId });
213
+ const testDate = new Date('2024-01-15T12:00:00.000Z');
214
+ storage.get.mockResolvedValue(item);
215
+ itemFactory.clone.mockReturnValue(previousItem);
216
+ mockDateService.getNow.mockReturnValue(testDate);
217
+ itemFactory.createDismissed.mockReturnValue(dismissedItem);
218
+ dismissibleHelper.isDismissed.mockReturnValue(false);
219
+ validationService.validateInstance.mockRejectedValue(new common_1.BadRequestException('dismissedAt must be a date'));
220
+ await expect(service.dismiss('test-item', userId)).rejects.toThrow(common_1.BadRequestException);
221
+ expect(storage.update).not.toHaveBeenCalled();
222
+ });
223
+ it('should throw BadRequestException when validation fails on restore', async () => {
224
+ const userId = 'user-123';
225
+ const dismissedItem = (0, factories_1.createDismissedTestItem)({ id: 'dismissed-item', userId });
226
+ const previousItem = (0, factories_1.createDismissedTestItem)({ id: 'dismissed-item', userId });
227
+ const restoredItem = (0, factories_1.createTestItem)({ id: 'dismissed-item', userId });
228
+ storage.get.mockResolvedValue(dismissedItem);
229
+ itemFactory.clone.mockReturnValue(previousItem);
230
+ itemFactory.createRestored.mockReturnValue(restoredItem);
231
+ dismissibleHelper.isDismissed.mockReturnValue(true);
232
+ validationService.validateInstance.mockRejectedValue(new common_1.BadRequestException('id must be a string'));
233
+ await expect(service.restore('dismissed-item', userId)).rejects.toThrow(common_1.BadRequestException);
234
+ expect(storage.update).not.toHaveBeenCalled();
235
+ });
236
+ it('should validate item when creating', async () => {
237
+ const userId = 'user-123';
238
+ const testDate = new Date('2024-01-15T10:00:00.000Z');
239
+ const newItem = (0, factories_1.createTestItem)({ id: 'new-item', userId, createdAt: testDate });
240
+ storage.get.mockResolvedValue(null);
241
+ storage.create.mockResolvedValue(newItem);
242
+ mockDateService.getNow.mockReturnValue(testDate);
243
+ itemFactory.create.mockReturnValue(newItem);
244
+ await service.getOrCreate('new-item', userId);
245
+ expect(validationService.validateInstance).toHaveBeenCalledWith(newItem);
246
+ });
247
+ it('should validate item when dismissing', async () => {
248
+ const userId = 'user-123';
249
+ const item = (0, factories_1.createTestItem)({ id: 'test-item', userId });
250
+ const previousItem = (0, factories_1.createTestItem)({ id: 'test-item', userId });
251
+ const dismissedItem = (0, factories_1.createDismissedTestItem)({ id: 'test-item', userId });
252
+ const testDate = new Date('2024-01-15T12:00:00.000Z');
253
+ storage.get.mockResolvedValue(item);
254
+ storage.update.mockResolvedValue(dismissedItem);
255
+ itemFactory.clone.mockReturnValue(previousItem);
256
+ mockDateService.getNow.mockReturnValue(testDate);
257
+ itemFactory.createDismissed.mockReturnValue(dismissedItem);
258
+ dismissibleHelper.isDismissed.mockReturnValue(false);
259
+ await service.dismiss('test-item', userId);
260
+ expect(validationService.validateInstance).toHaveBeenCalledWith(dismissedItem);
261
+ });
262
+ it('should validate item when restoring', async () => {
263
+ const userId = 'user-123';
264
+ const dismissedItem = (0, factories_1.createDismissedTestItem)({ id: 'dismissed-item', userId });
265
+ const previousItem = (0, factories_1.createDismissedTestItem)({ id: 'dismissed-item', userId });
266
+ const restoredItem = (0, factories_1.createTestItem)({ id: 'dismissed-item', userId });
267
+ storage.get.mockResolvedValue(dismissedItem);
268
+ storage.update.mockResolvedValue(restoredItem);
269
+ itemFactory.clone.mockReturnValue(previousItem);
270
+ itemFactory.createRestored.mockReturnValue(restoredItem);
271
+ dismissibleHelper.isDismissed.mockReturnValue(true);
272
+ await service.restore('dismissed-item', userId);
273
+ expect(validationService.validateInstance).toHaveBeenCalledWith(restoredItem);
274
+ });
275
+ });
276
+ });
277
+ //# sourceMappingURL=dismissible-core.service.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dismissible-core.service.spec.js","sourceRoot":"","sources":["../../../../../libs/dismissible/src/core/dismissible-core.service.spec.ts"],"names":[],"mappings":";;AAAA,mDAA4C;AAC5C,yEAAoE;AAEpE,oDAA+E;AAC/E,8CAIuB;AAEvB,kFAA8E;AAE9E,sEAAmE;AACnE,2CAAqD;AACrD,oEAAgE;AAChE,6DAAyD;AAEzD,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,IAAI,OAA6C,CAAC;IAClD,IAAI,OAAgD,CAAC;IACrD,IAAI,eAAkC,CAAC;IACvC,IAAI,UAAoC,CAAC;IACzC,IAAI,WAAyC,CAAC;IAC9C,IAAI,iBAA0C,CAAC;IAC/C,IAAI,iBAA0C,CAAC;IAE/C,UAAU,CAAC,GAAG,EAAE;QACd,eAAe,GAAG,IAAA,qBAAI,EAAC,0BAAW,CAAC,CAAC;QACpC,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;QAC7E,UAAU,GAAG,IAAA,qBAAI,EAAqB;YACpC,qBAAqB,EAAE,KAAK;SAC7B,CAAC,CAAC;QACH,OAAO,GAAG,IAAA,qBAAI,EAAoC;YAChD,qBAAqB,EAAE,KAAK;SAC7B,CAAC,CAAC;QACH,iBAAiB,GAAG,IAAA,qBAAI,EAAC,sCAAiB,EAAE,EAAE,qBAAqB,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9E,WAAW,GAAG,IAAA,qBAAI,EAAC,gDAAsB,CAAC,CAAC;QAC3C,iBAAiB,GAAG,IAAA,qBAAI,EAAC,qCAAiB,EAAE,EAAE,qBAAqB,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9E,iBAAiB,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAChE,OAAO,GAAG,IAAI,iDAAsB,CAClC,OAAO,EACP,eAAe,EACf,UAAU,EACV,WAAW,EACX,iBAAiB,EACjB,iBAAiB,CAClB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACtD,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,MAAM,OAAO,GAAG,IAAA,0BAAc,EAAC,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;YAEhF,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACpC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC1C,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACjD,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAE5C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAE7D,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACxC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,aAAa,EAAE,CAAC;YAChD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,MAAM,YAAY,GAAG,IAAA,0BAAc,EAAC,EAAE,EAAE,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,CAAC;YACrE,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAE5C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;YAElE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAC1C,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,oBAAoB,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,MAAM,QAAQ,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;YAClD,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACtD,MAAM,OAAO,GAAG,IAAA,0BAAc,EAAC,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;YAE1F,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACpC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC1C,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACjD,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAE5C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;YAE3E,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC/C,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACvB,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;YAC/C,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,MAAM,IAAI,GAAG,IAAA,0BAAc,EAAC,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;YACzD,MAAM,YAAY,GAAG,IAAA,0BAAc,EAAC,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;YACjE,MAAM,aAAa,GAAG,IAAA,mCAAuB,EAAC,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;YAC3E,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC;YAEtD,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACpC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;YAChD,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YAChD,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACjD,WAAW,CAAC,eAAe,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;YAC3D,iBAAiB,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAErD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YAE1D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,aAAa,EAAE,CAAC;YACxD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;YAC3D,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,oBAAoB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;YACxE,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAEpC,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,kCAAqB,CAAC,CAAC;QAC/F,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;YACrF,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,MAAM,aAAa,GAAG,IAAA,mCAAuB,EAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC;YAChF,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;YAC7C,iBAAiB,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAEpD,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CACrE,0CAA6B,CAC9B,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACrD,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,MAAM,IAAI,GAAG,IAAA,0BAAc,EAAC;gBAC1B,EAAE,EAAE,WAAW;gBACf,MAAM;gBACN,QAAQ,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE;aAC3B,CAAC,CAAC;YACH,MAAM,YAAY,GAAG,IAAA,0BAAc,EAAC;gBAClC,EAAE,EAAE,WAAW;gBACf,MAAM;gBACN,QAAQ,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE;aAC3B,CAAC,CAAC;YACH,MAAM,aAAa,GAAG,IAAA,mCAAuB,EAAC;gBAC5C,EAAE,EAAE,WAAW;gBACf,MAAM;gBACN,QAAQ,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE;aAC3B,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC;YAEtD,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACpC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;YAChD,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YAChD,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACjD,WAAW,CAAC,eAAe,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;YAC3D,iBAAiB,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAErD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YAE1D,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7C,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,aAAa,EAAE,CAAC;YACxD,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACvB,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;YAC/C,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,MAAM,aAAa,GAAG,IAAA,mCAAuB,EAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC;YAChF,MAAM,YAAY,GAAG,IAAA,mCAAuB,EAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC;YAC/E,MAAM,YAAY,GAAG,IAAA,0BAAc,EAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC;YAEtE,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;YAC7C,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAC/C,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YAChD,WAAW,CAAC,cAAc,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YACzD,iBAAiB,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAEpD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;YAE/D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,aAAa,EAAE,CAAC;YAChD,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;YACtD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;YAC1D,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;YACxE,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAEpC,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,kCAAqB,CAAC,CAAC;QAC/F,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;YAC7E,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,MAAM,IAAI,GAAG,IAAA,0BAAc,EAAC,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACpC,iBAAiB,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAErD,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAClE,sCAAyB,CAC1B,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACrD,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,MAAM,aAAa,GAAG,IAAA,mCAAuB,EAAC;gBAC5C,EAAE,EAAE,gBAAgB;gBACpB,MAAM;gBACN,QAAQ,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE;aAC3B,CAAC,CAAC;YACH,MAAM,YAAY,GAAG,IAAA,mCAAuB,EAAC;gBAC3C,EAAE,EAAE,gBAAgB;gBACpB,MAAM;gBACN,QAAQ,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE;aAC3B,CAAC,CAAC;YACH,MAAM,YAAY,GAAG,IAAA,0BAAc,EAAC;gBAClC,EAAE,EAAE,gBAAgB;gBACpB,MAAM;gBACN,QAAQ,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE;aAC3B,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;YAC7C,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAC/C,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YAChD,WAAW,CAAC,cAAc,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YACzD,iBAAiB,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAEpD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;YAE/D,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YACtD,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;YACtD,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;YAChF,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACtD,MAAM,OAAO,GAAG,IAAA,0BAAc,EAAC,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;YAEhF,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACpC,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACjD,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAC5C,iBAAiB,CAAC,gBAAgB,CAAC,iBAAiB,CAClD,IAAI,4BAAmB,CAAC,qBAAqB,CAAC,CAC/C,CAAC;YAEF,MAAM,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,4BAAmB,CAAC,CAAC;YAC3F,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;YACjF,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,MAAM,IAAI,GAAG,IAAA,0BAAc,EAAC,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;YACzD,MAAM,YAAY,GAAG,IAAA,0BAAc,EAAC,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;YACjE,MAAM,aAAa,GAAG,IAAA,mCAAuB,EAAC,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;YAC3E,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC;YAEtD,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACpC,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YAChD,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACjD,WAAW,CAAC,eAAe,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;YAC3D,iBAAiB,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YACrD,iBAAiB,CAAC,gBAAgB,CAAC,iBAAiB,CAClD,IAAI,4BAAmB,CAAC,4BAA4B,CAAC,CACtD,CAAC;YAEF,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,4BAAmB,CAAC,CAAC;YACxF,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;YACjF,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,MAAM,aAAa,GAAG,IAAA,mCAAuB,EAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC;YAChF,MAAM,YAAY,GAAG,IAAA,mCAAuB,EAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC;YAC/E,MAAM,YAAY,GAAG,IAAA,0BAAc,EAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC;YAEtE,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;YAC7C,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YAChD,WAAW,CAAC,cAAc,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YACzD,iBAAiB,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YACpD,iBAAiB,CAAC,gBAAgB,CAAC,iBAAiB,CAClD,IAAI,4BAAmB,CAAC,qBAAqB,CAAC,CAC/C,CAAC;YAEF,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,4BAAmB,CAAC,CAAC;YAC7F,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;YAClD,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACtD,MAAM,OAAO,GAAG,IAAA,0BAAc,EAAC,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;YAEhF,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACpC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC1C,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACjD,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAE5C,MAAM,OAAO,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAE9C,MAAM,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;YACpD,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,MAAM,IAAI,GAAG,IAAA,0BAAc,EAAC,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;YACzD,MAAM,YAAY,GAAG,IAAA,0BAAc,EAAC,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;YACjE,MAAM,aAAa,GAAG,IAAA,mCAAuB,EAAC,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;YAC3E,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC;YAEtD,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACpC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;YAChD,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YAChD,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACjD,WAAW,CAAC,eAAe,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;YAC3D,iBAAiB,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAErD,MAAM,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YAE3C,MAAM,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;QACjF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACnD,MAAM,MAAM,GAAG,UAAU,CAAC;YAC1B,MAAM,aAAa,GAAG,IAAA,mCAAuB,EAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC;YAChF,MAAM,YAAY,GAAG,IAAA,mCAAuB,EAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC;YAC/E,MAAM,YAAY,GAAG,IAAA,0BAAc,EAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC;YAEtE,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;YAC7C,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAC/C,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YAChD,WAAW,CAAC,cAAc,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YACzD,iBAAiB,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAEpD,MAAM,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;YAEhD,MAAM,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;QAChF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { EventEmitter2 } from '@nestjs/event-emitter';
2
+ import { DismissibleCoreService } from './dismissible-core.service';
3
+ import { HookRunner } from './hook-runner.service';
4
+ import { IDismissibleLogger } from '@dismissible/nestjs-logger';
5
+ import { IGetOrCreateServiceResponse, IDismissServiceResponse, IRestoreServiceResponse } from './service-responses.interface';
6
+ import { BaseMetadata } from '@dismissible/nestjs-dismissible-item';
7
+ import { ICreateItemOptions } from './create-options';
8
+ import { IRequestContext } from '../request/request-context.interface';
9
+ /**
10
+ * Main orchestration service for dismissible operations.
11
+ * Coordinates core logic, hooks, and events.
12
+ */
13
+ export declare class DismissibleService<TMetadata extends BaseMetadata = BaseMetadata> {
14
+ private readonly coreService;
15
+ private readonly hookRunner;
16
+ private readonly eventEmitter;
17
+ private readonly logger;
18
+ constructor(coreService: DismissibleCoreService<TMetadata>, hookRunner: HookRunner<TMetadata>, eventEmitter: EventEmitter2, logger: IDismissibleLogger);
19
+ /**
20
+ * Get an existing item or create a new one.
21
+ * @param itemId The item identifier
22
+ * @param userId The user identifier (required)
23
+ * @param options Optional creation options (metadata)
24
+ * @param context Optional request context for tracing
25
+ */
26
+ getOrCreate(itemId: string, userId: string, options?: ICreateItemOptions<TMetadata>, context?: IRequestContext): Promise<IGetOrCreateServiceResponse<TMetadata>>;
27
+ /**
28
+ * Dismiss an item.
29
+ * @param itemId The item identifier
30
+ * @param userId The user identifier (required)
31
+ * @param context Optional request context for tracing
32
+ */
33
+ dismiss(itemId: string, userId: string, context?: IRequestContext): Promise<IDismissServiceResponse<TMetadata>>;
34
+ /**
35
+ * Restore a dismissed item.
36
+ * @param itemId The item identifier
37
+ * @param userId The user identifier (required)
38
+ * @param context Optional request context for tracing
39
+ */
40
+ restore(itemId: string, userId: string, context?: IRequestContext): Promise<IRestoreServiceResponse<TMetadata>>;
41
+ }
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DismissibleService = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const common_1 = require("@nestjs/common");
6
+ const event_emitter_1 = require("@nestjs/event-emitter");
7
+ const dismissible_core_service_1 = require("./dismissible-core.service");
8
+ const hook_runner_service_1 = require("./hook-runner.service");
9
+ const nestjs_logger_1 = require("@dismissible/nestjs-logger");
10
+ const events_1 = require("../events");
11
+ const events_2 = require("../events");
12
+ /**
13
+ * Main orchestration service for dismissible operations.
14
+ * Coordinates core logic, hooks, and events.
15
+ */
16
+ let DismissibleService = class DismissibleService {
17
+ constructor(coreService, hookRunner, eventEmitter, logger) {
18
+ this.coreService = coreService;
19
+ this.hookRunner = hookRunner;
20
+ this.eventEmitter = eventEmitter;
21
+ this.logger = logger;
22
+ }
23
+ /**
24
+ * Get an existing item or create a new one.
25
+ * @param itemId The item identifier
26
+ * @param userId The user identifier (required)
27
+ * @param options Optional creation options (metadata)
28
+ * @param context Optional request context for tracing
29
+ */
30
+ async getOrCreate(itemId, userId, options, context) {
31
+ this.logger.debug(`getOrCreate called`, { itemId, userId });
32
+ // Run pre-getOrCreate hooks
33
+ const preResult = await this.hookRunner.runPreGetOrCreate(itemId, userId, context);
34
+ hook_runner_service_1.HookRunner.throwIfBlocked(preResult);
35
+ const resolvedId = preResult.id;
36
+ const resolvedUserId = preResult.userId;
37
+ const resolvedContext = preResult.context;
38
+ // Check if we need to run create hooks (for potential new item)
39
+ const result = await this.coreService.getOrCreate(resolvedId, resolvedUserId, options);
40
+ // If item was created, run create-specific hooks
41
+ if (result.created) {
42
+ // Run pre-create hooks
43
+ const preCreateResult = await this.hookRunner.runPreCreate(resolvedId, resolvedUserId, resolvedContext);
44
+ hook_runner_service_1.HookRunner.throwIfBlocked(preCreateResult);
45
+ // Run post-create hooks
46
+ await this.hookRunner.runPostCreate(resolvedId, result.item, resolvedUserId, resolvedContext);
47
+ // Emit created event (async)
48
+ this.eventEmitter.emit(events_1.DismissibleEvents.ITEM_CREATED, new events_2.ItemCreatedEvent(resolvedId, result.item, resolvedUserId, resolvedContext));
49
+ }
50
+ else {
51
+ // Emit retrieved event (async)
52
+ this.eventEmitter.emit(events_1.DismissibleEvents.ITEM_RETRIEVED, new events_2.ItemRetrievedEvent(resolvedId, result.item, resolvedUserId, resolvedContext));
53
+ }
54
+ // Run post-getOrCreate hooks
55
+ await this.hookRunner.runPostGetOrCreate(resolvedId, result.item, resolvedUserId, resolvedContext);
56
+ this.logger.debug(`getOrCreate completed`, { itemId, created: result.created });
57
+ return result;
58
+ }
59
+ /**
60
+ * Dismiss an item.
61
+ * @param itemId The item identifier
62
+ * @param userId The user identifier (required)
63
+ * @param context Optional request context for tracing
64
+ */
65
+ async dismiss(itemId, userId, context) {
66
+ this.logger.debug(`dismiss called`, { itemId, userId });
67
+ // Run pre-dismiss hooks
68
+ const preResult = await this.hookRunner.runPreDismiss(itemId, userId, context);
69
+ hook_runner_service_1.HookRunner.throwIfBlocked(preResult);
70
+ const resolvedId = preResult.id;
71
+ const resolvedUserId = preResult.userId;
72
+ const resolvedContext = preResult.context;
73
+ // Execute core dismiss operation
74
+ const result = await this.coreService.dismiss(resolvedId, resolvedUserId);
75
+ // Run post-dismiss hooks
76
+ await this.hookRunner.runPostDismiss(resolvedId, result.item, resolvedUserId, resolvedContext);
77
+ // Emit dismissed event (async)
78
+ this.eventEmitter.emit(events_1.DismissibleEvents.ITEM_DISMISSED, new events_2.ItemDismissedEvent(resolvedId, result.item, result.previousItem, resolvedUserId, resolvedContext));
79
+ this.logger.debug(`dismiss completed`, { itemId });
80
+ return result;
81
+ }
82
+ /**
83
+ * Restore a dismissed item.
84
+ * @param itemId The item identifier
85
+ * @param userId The user identifier (required)
86
+ * @param context Optional request context for tracing
87
+ */
88
+ async restore(itemId, userId, context) {
89
+ this.logger.debug(`restore called`, { itemId, userId });
90
+ // Run pre-restore hooks
91
+ const preResult = await this.hookRunner.runPreRestore(itemId, userId, context);
92
+ hook_runner_service_1.HookRunner.throwIfBlocked(preResult);
93
+ const resolvedId = preResult.id;
94
+ const resolvedUserId = preResult.userId;
95
+ const resolvedContext = preResult.context;
96
+ // Execute core restore operation
97
+ const result = await this.coreService.restore(resolvedId, resolvedUserId);
98
+ // Run post-restore hooks
99
+ await this.hookRunner.runPostRestore(resolvedId, result.item, resolvedUserId, resolvedContext);
100
+ // Emit restored event (async)
101
+ this.eventEmitter.emit(events_1.DismissibleEvents.ITEM_RESTORED, new events_2.ItemRestoredEvent(resolvedId, result.item, result.previousItem, resolvedUserId, resolvedContext));
102
+ this.logger.debug(`restore completed`, { itemId });
103
+ return result;
104
+ }
105
+ };
106
+ exports.DismissibleService = DismissibleService;
107
+ exports.DismissibleService = DismissibleService = tslib_1.__decorate([
108
+ (0, common_1.Injectable)(),
109
+ tslib_1.__param(3, (0, common_1.Inject)(nestjs_logger_1.DISMISSIBLE_LOGGER)),
110
+ tslib_1.__metadata("design:paramtypes", [dismissible_core_service_1.DismissibleCoreService,
111
+ hook_runner_service_1.HookRunner,
112
+ event_emitter_1.EventEmitter2, Object])
113
+ ], DismissibleService);
114
+ //# sourceMappingURL=dismissible.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dismissible.service.js","sourceRoot":"","sources":["../../../../../libs/dismissible/src/core/dismissible.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const ts_jest_mocker_1 = require("ts-jest-mocker");
4
+ const event_emitter_1 = require("@nestjs/event-emitter");
5
+ const dismissible_service_1 = require("./dismissible.service");
6
+ const dismissible_core_service_1 = require("./dismissible-core.service");
7
+ const hook_runner_service_1 = require("./hook-runner.service");
8
+ const events_1 = require("../events");
9
+ const factories_1 = require("../testing/factories");
10
+ describe('DismissibleService', () => {
11
+ let service;
12
+ let mockCoreService;
13
+ let mockHookRunner;
14
+ let mockEventEmitter;
15
+ let mockLogger;
16
+ const testUserId = 'test-user-id';
17
+ const createHookResult = (id, userId = testUserId) => ({
18
+ proceed: true,
19
+ id,
20
+ userId,
21
+ context: (0, factories_1.createTestContext)(),
22
+ });
23
+ beforeEach(() => {
24
+ mockCoreService = (0, ts_jest_mocker_1.mock)(dismissible_core_service_1.DismissibleCoreService, { failIfMockNotProvided: false });
25
+ mockHookRunner = (0, ts_jest_mocker_1.mock)(hook_runner_service_1.HookRunner, { failIfMockNotProvided: false });
26
+ mockEventEmitter = (0, ts_jest_mocker_1.mock)(event_emitter_1.EventEmitter2, { failIfMockNotProvided: false });
27
+ mockLogger = (0, ts_jest_mocker_1.mock)({ failIfMockNotProvided: false });
28
+ service = new dismissible_service_1.DismissibleService(mockCoreService, mockHookRunner, mockEventEmitter, mockLogger);
29
+ });
30
+ describe('getOrCreate', () => {
31
+ it('should run hooks, call core service, and emit ITEM_RETRIEVED event for existing item', async () => {
32
+ const item = (0, factories_1.createTestItem)({ id: 'existing-item' });
33
+ const context = (0, factories_1.createTestContext)();
34
+ mockHookRunner.runPreGetOrCreate.mockResolvedValue(createHookResult('existing-item'));
35
+ mockCoreService.getOrCreate.mockResolvedValue({ item, created: false });
36
+ const result = await service.getOrCreate('existing-item', testUserId, undefined, context);
37
+ expect(mockHookRunner.runPreGetOrCreate).toHaveBeenCalled();
38
+ expect(mockCoreService.getOrCreate).toHaveBeenCalledWith('existing-item', testUserId, undefined);
39
+ expect(mockHookRunner.runPostGetOrCreate).toHaveBeenCalled();
40
+ expect(mockEventEmitter.emit).toHaveBeenCalledWith(events_1.DismissibleEvents.ITEM_RETRIEVED, expect.anything());
41
+ expect(result.created).toBe(false);
42
+ });
43
+ it('should run create hooks and emit ITEM_CREATED event for new item', async () => {
44
+ const item = (0, factories_1.createTestItem)({ id: 'new-item' });
45
+ const context = (0, factories_1.createTestContext)();
46
+ mockHookRunner.runPreGetOrCreate.mockResolvedValue(createHookResult('new-item'));
47
+ mockHookRunner.runPreCreate.mockResolvedValue(createHookResult('new-item'));
48
+ mockCoreService.getOrCreate.mockResolvedValue({ item, created: true });
49
+ const result = await service.getOrCreate('new-item', testUserId, undefined, context);
50
+ expect(mockHookRunner.runPreCreate).toHaveBeenCalled();
51
+ expect(mockHookRunner.runPostCreate).toHaveBeenCalled();
52
+ expect(mockEventEmitter.emit).toHaveBeenCalledWith(events_1.DismissibleEvents.ITEM_CREATED, expect.anything());
53
+ expect(result.created).toBe(true);
54
+ });
55
+ });
56
+ describe('dismiss', () => {
57
+ it('should run hooks, call core service, and emit ITEM_DISMISSED event', async () => {
58
+ const item = (0, factories_1.createTestItem)({ id: 'test-item' });
59
+ const previousItem = (0, factories_1.createTestItem)({ id: 'test-item' });
60
+ const context = (0, factories_1.createTestContext)();
61
+ mockHookRunner.runPreDismiss.mockResolvedValue(createHookResult('test-item'));
62
+ mockCoreService.dismiss.mockResolvedValue({ item, previousItem });
63
+ const result = await service.dismiss('test-item', testUserId, context);
64
+ expect(mockHookRunner.runPreDismiss).toHaveBeenCalled();
65
+ expect(mockCoreService.dismiss).toHaveBeenCalledWith('test-item', testUserId);
66
+ expect(mockHookRunner.runPostDismiss).toHaveBeenCalled();
67
+ expect(mockEventEmitter.emit).toHaveBeenCalledWith(events_1.DismissibleEvents.ITEM_DISMISSED, expect.anything());
68
+ expect(result.item).toEqual(item);
69
+ });
70
+ });
71
+ describe('restore', () => {
72
+ it('should run hooks, call core service, and emit ITEM_RESTORED event', async () => {
73
+ const item = (0, factories_1.createTestItem)({ id: 'test-item' });
74
+ const previousItem = (0, factories_1.createTestItem)({ id: 'test-item' });
75
+ const context = (0, factories_1.createTestContext)();
76
+ mockHookRunner.runPreRestore.mockResolvedValue(createHookResult('test-item'));
77
+ mockCoreService.restore.mockResolvedValue({ item, previousItem });
78
+ const result = await service.restore('test-item', testUserId, context);
79
+ expect(mockHookRunner.runPreRestore).toHaveBeenCalled();
80
+ expect(mockCoreService.restore).toHaveBeenCalledWith('test-item', testUserId);
81
+ expect(mockHookRunner.runPostRestore).toHaveBeenCalled();
82
+ expect(mockEventEmitter.emit).toHaveBeenCalledWith(events_1.DismissibleEvents.ITEM_RESTORED, expect.anything());
83
+ expect(result.item).toEqual(item);
84
+ });
85
+ });
86
+ describe('logging', () => {
87
+ it('should log debug messages for operations', async () => {
88
+ const item = (0, factories_1.createTestItem)({ id: 'test-item' });
89
+ const context = (0, factories_1.createTestContext)();
90
+ mockHookRunner.runPreGetOrCreate.mockResolvedValue(createHookResult('test-item'));
91
+ mockCoreService.getOrCreate.mockResolvedValue({ item, created: false });
92
+ await service.getOrCreate('test-item', testUserId, undefined, context);
93
+ expect(mockLogger.debug).toHaveBeenCalledWith(expect.stringContaining('getOrCreate called'), expect.any(Object));
94
+ expect(mockLogger.debug).toHaveBeenCalledWith(expect.stringContaining('getOrCreate completed'), expect.any(Object));
95
+ });
96
+ });
97
+ });
98
+ //# sourceMappingURL=dismissible.service.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dismissible.service.spec.js","sourceRoot":"","sources":["../../../../../libs/dismissible/src/core/dismissible.service.spec.ts"],"names":[],"mappings":"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"}