@futdevpro/nts-dynamo 1.15.2 → 1.15.5

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 (192) hide show
  1. package/.cursor/rules/__assistant_guide.mdc +30 -0
  2. package/.cursor/rules/__main.mdc +64 -0
  3. package/.cursor/rules/_ag_backend-structure.mdc +86 -0
  4. package/.cursor/rules/_ag_backend.mdc +16 -0
  5. package/.cursor/rules/_ag_debug.mdc +8 -0
  6. package/.cursor/rules/_ag_documentation_writing_rules.mdc +372 -0
  7. package/.cursor/rules/_ag_file-refactoring.mdc +113 -0
  8. package/.cursor/rules/_ag_fixes_rules.mdc +6 -0
  9. package/.cursor/rules/_ag_frontend-structure.mdc +87 -0
  10. package/.cursor/rules/_ag_frontend.mdc +40 -0
  11. package/.cursor/rules/_ag_import-rules.mdc +45 -0
  12. package/.cursor/rules/_ag_naming.mdc +116 -0
  13. package/.cursor/rules/_ag_running_commands.mdc +5 -0
  14. package/.cursor/rules/_ag_server-controller.mdc +6 -0
  15. package/.cursor/rules/_ag_should-be.mdc +7 -0
  16. package/.cursor/rules/_ag_swearing.mdc +47 -0
  17. package/.cursor/rules/ai_development_guide.md +61 -0
  18. package/.cursor/rules/ai_directives.md +114 -0
  19. package/.cursor/rules/cursor-rules.md +160 -0
  20. package/.cursor/rules/default-command.mdc +465 -0
  21. package/.cursor/rules/error_code_pattern.md +40 -0
  22. package/.cursor/rules/saved rule mcp server use.md +16 -0
  23. package/_specifications/BACKLOG.md +15 -0
  24. package/_specifications/TODO.md +15 -0
  25. package/build/_modules/ai/_models/ai-test-generation-result.interface.d.ts +17 -0
  26. package/build/_modules/ai/_models/ai-test-generation-result.interface.d.ts.map +1 -0
  27. package/build/_modules/ai/_models/ai-test-generation-result.interface.js +3 -0
  28. package/build/_modules/ai/_models/ai-test-generation-result.interface.js.map +1 -0
  29. package/build/_modules/ai/_modules/anthropic/_services/aai-user-key.control-service.d.ts +36 -0
  30. package/build/_modules/ai/_modules/anthropic/_services/aai-user-key.control-service.d.ts.map +1 -0
  31. package/build/_modules/ai/_modules/anthropic/_services/aai-user-key.control-service.js +118 -0
  32. package/build/_modules/ai/_modules/anthropic/_services/aai-user-key.control-service.js.map +1 -0
  33. package/build/_modules/ai/_modules/anthropic/index.d.ts +3 -0
  34. package/build/_modules/ai/_modules/anthropic/index.d.ts.map +1 -0
  35. package/build/_modules/ai/_modules/anthropic/index.js +8 -0
  36. package/build/_modules/ai/_modules/anthropic/index.js.map +1 -0
  37. package/build/_modules/ai/_modules/fdp-ai/_services/fdpai-user-key.control-service.d.ts +35 -0
  38. package/build/_modules/ai/_modules/fdp-ai/_services/fdpai-user-key.control-service.d.ts.map +1 -0
  39. package/build/_modules/ai/_modules/fdp-ai/_services/fdpai-user-key.control-service.js +129 -0
  40. package/build/_modules/ai/_modules/fdp-ai/_services/fdpai-user-key.control-service.js.map +1 -0
  41. package/build/_modules/ai/_modules/fdp-ai/index.d.ts +3 -0
  42. package/build/_modules/ai/_modules/fdp-ai/index.d.ts.map +1 -0
  43. package/build/_modules/ai/_modules/fdp-ai/index.js +8 -0
  44. package/build/_modules/ai/_modules/fdp-ai/index.js.map +1 -0
  45. package/build/_modules/ai/_modules/open-ai/_services/oai-user-key.control-service.d.ts +40 -0
  46. package/build/_modules/ai/_modules/open-ai/_services/oai-user-key.control-service.d.ts.map +1 -0
  47. package/build/_modules/ai/_modules/open-ai/_services/oai-user-key.control-service.js +111 -0
  48. package/build/_modules/ai/_modules/open-ai/_services/oai-user-key.control-service.js.map +1 -0
  49. package/build/_modules/ai/_modules/open-ai/index.d.ts +1 -0
  50. package/build/_modules/ai/_modules/open-ai/index.d.ts.map +1 -1
  51. package/build/_modules/ai/_modules/open-ai/index.js +1 -0
  52. package/build/_modules/ai/_modules/open-ai/index.js.map +1 -1
  53. package/build/_modules/ai/_services/ai-user-key.service-base.d.ts +45 -0
  54. package/build/_modules/ai/_services/ai-user-key.service-base.d.ts.map +1 -0
  55. package/build/_modules/ai/_services/ai-user-key.service-base.js +15 -0
  56. package/build/_modules/ai/_services/ai-user-key.service-base.js.map +1 -0
  57. package/build/_modules/ai/index.d.ts +2 -0
  58. package/build/_modules/ai/index.d.ts.map +1 -1
  59. package/build/_modules/ai/index.js +2 -0
  60. package/build/_modules/ai/index.js.map +1 -1
  61. package/build/_modules/custom-data/custom-data.controller.d.ts.map +1 -1
  62. package/build/_modules/custom-data/custom-data.controller.js +1 -2
  63. package/build/_modules/custom-data/custom-data.controller.js.map +1 -1
  64. package/build/_modules/socket/app-extended.server.js +1 -1
  65. package/build/_modules/socket/app-extended.server.js.map +1 -1
  66. package/build/_services/base/data.service.d.ts +1 -1
  67. package/build/_services/base/data.service.js +1 -1
  68. package/build/_services/base/db.service.d.ts +1 -1
  69. package/build/_services/base/db.service.js +1 -1
  70. package/build/_services/core/api.service.d.ts.map +1 -1
  71. package/build/_services/core/api.service.js +1 -0
  72. package/build/_services/core/api.service.js.map +1 -1
  73. package/build/_services/core/auth.service.d.ts +2 -2
  74. package/build/_services/core/auth.service.js +1 -1
  75. package/build/_services/core/email.service.js +1 -1
  76. package/build/_services/core/email.service.js.map +1 -1
  77. package/build/_services/core/global.service.d.ts +1 -1
  78. package/build/_services/core/global.service.js +2 -2
  79. package/build/_services/core/global.service.js.map +1 -1
  80. package/build/_services/server/app.server.d.ts.map +1 -1
  81. package/build/_services/server/app.server.js +11 -1
  82. package/build/_services/server/app.server.js.map +1 -1
  83. package/package.json +18 -4
  84. package/scripts/run-coverage-tests.js +5 -1
  85. package/spec/support/helpers/spec-reporter-loader.js +359 -0
  86. package/spec/support/helpers/ts-node-helper.js +84 -0
  87. package/spec/support/jasmine.coverage.json +2 -1
  88. package/spec/support/jasmine.json +3 -3
  89. package/src/_collections/archive.util.spec.ts +36 -0
  90. package/src/_collections/get-environment-settings.util.spec.ts +210 -0
  91. package/src/_collections/star.controller.spec.ts +224 -0
  92. package/src/_models/control-models/api-call-params.control-model.spec.ts +62 -3
  93. package/src/_models/control-models/app-ext-system-controls.control-model.spec.ts +52 -0
  94. package/src/_models/control-models/app-params.control-model.spec.ts +158 -2
  95. package/src/_models/control-models/endpoint-params.control-model.spec.ts +578 -0
  96. package/src/_modules/ai/_models/ai-test-generation-result.interface.ts +16 -0
  97. package/src/_modules/ai/_modules/anthropic/_services/aai-user-key.control-service.ts +138 -0
  98. package/src/_modules/ai/_modules/anthropic/index.ts +5 -0
  99. package/src/_modules/ai/_modules/document-ai/_collections/dai-chunking.util.spec.ts +242 -0
  100. package/src/_modules/ai/_modules/document-ai/_collections/dai-document.util.spec.ts +209 -0
  101. package/src/_modules/ai/_modules/fdp-ai/_services/fdpai-user-key.control-service.ts +189 -0
  102. package/src/_modules/ai/_modules/fdp-ai/index.ts +5 -0
  103. package/src/_modules/ai/_modules/open-ai/_services/data-services/oai-document.data-service.spec.ts +342 -0
  104. package/src/_modules/ai/_modules/open-ai/_services/data-services/oai-vector-data.service.spec.ts +550 -0
  105. package/src/_modules/ai/_modules/open-ai/_services/oai-embedding.control-service.spec.ts +240 -0
  106. package/src/_modules/ai/_modules/open-ai/_services/oai-llm-chat.service-base.spec.ts +462 -0
  107. package/src/_modules/ai/_modules/open-ai/_services/oai-llm.service-base.spec.ts +437 -0
  108. package/src/_modules/ai/_modules/open-ai/_services/oai-user-key.control-service.ts +157 -0
  109. package/src/_modules/ai/_modules/open-ai/index.ts +1 -0
  110. package/src/_modules/ai/_services/ai-embedding.service-base.spec.ts +98 -0
  111. package/src/_modules/ai/_services/ai-llm-chat.service-base.spec.ts +229 -0
  112. package/src/_modules/ai/_services/ai-llm.service-base.spec.ts +250 -0
  113. package/src/_modules/ai/_services/ai-provider.service-base.spec.ts +79 -0
  114. package/src/_modules/ai/_services/ai-user-key.service-base.ts +59 -0
  115. package/src/_modules/ai/index.ts +2 -0
  116. package/src/_modules/assistant/_collections/ass.util.spec.ts +176 -0
  117. package/src/_modules/assistant/_services/ass-io.control-service.spec.ts +140 -0
  118. package/src/_modules/assistant/_services/ass-main.control-service.spec.ts +192 -0
  119. package/src/_modules/bot/_modules/discord-bot/_services/dib-messaging-provider.control-service.spec.ts +431 -0
  120. package/src/_modules/bot/_modules/dynamo-bot/_collections/dyb-operations.util.spec.ts +160 -0
  121. package/src/_modules/bot/_modules/dynamo-bot/_services/dyb-messaging-provider.control-service.spec.ts +374 -0
  122. package/src/_modules/bot/_modules/slack-bot/_services/slb-messaging-provider.control-service.spec.ts +344 -0
  123. package/src/_modules/bot/_modules/teams-bot/_services/teb-messaging-provider.control-service.spec.ts +345 -0
  124. package/src/_modules/bot/_services/bot-commands.control-service.spec.ts +116 -0
  125. package/src/_modules/bot/_services/bot-io.control-service.spec.ts +285 -0
  126. package/src/_modules/bot/_services/bot-main.control-service.spec.ts +208 -0
  127. package/src/_modules/bot/_services/bot-messaging-provider.service-base.spec.ts +349 -0
  128. package/src/_modules/bot/_services/bot-routines.control-service.spec.ts +111 -0
  129. package/src/_modules/custom-data/custom-data.controller.spec.ts +49 -0
  130. package/src/_modules/custom-data/custom-data.controller.ts +1 -3
  131. package/src/_modules/custom-data/custom-data.data-service.spec.ts +54 -0
  132. package/src/_modules/custom-data/get-custom-data-routing-module.util.spec.ts +28 -0
  133. package/src/_modules/defaults/_services/default-auth.service.spec.ts +269 -0
  134. package/src/_modules/defaults/_services/default-socket-events.service.spec.ts +42 -0
  135. package/src/_modules/defaults/_services/default-user.data-service.spec.ts +187 -0
  136. package/src/_modules/discord-assistant/_collections/dias.util.spec.ts +366 -0
  137. package/src/_modules/discord-assistant/_services/dias-io.control-service.spec.ts +108 -0
  138. package/src/_modules/discord-assistant/_services/dias-main.control-service.spec.ts +22 -0
  139. package/src/_modules/discord-assistant/_services/dias.service-base.spec.ts +195 -0
  140. package/src/_modules/discord-assistant-voiced/_services/dias-discord-bot.control-service.spec.ts +34 -0
  141. package/src/_modules/discord-bot/_collections/dibo-operations.util.spec.ts +214 -0
  142. package/src/_modules/discord-bot/_services/dibo-commands.control-service.spec.ts +154 -0
  143. package/src/_modules/discord-bot/_services/dibo-io.control-service.spec.ts +264 -0
  144. package/src/_modules/discord-bot/_services/dibo-main.control-service.spec.ts +408 -0
  145. package/src/_modules/discord-bot/_services/dibo-routines.control-service.spec.ts +105 -0
  146. package/src/_modules/local-vector-search/_services/lvs-doc-chunk-data.service.spec.ts +418 -0
  147. package/src/_modules/local-vector-search/_services/lvs-local-vector-search.data-service.spec.ts +345 -0
  148. package/src/_modules/messaging/_collections/msg.util.spec.ts +226 -0
  149. package/src/_modules/messaging/_services/msg-events.service.spec.ts +219 -0
  150. package/src/_modules/messaging/_services/msg-main.control-service.spec.ts +147 -0
  151. package/src/_modules/messaging/_services/msg.controller.spec.ts +201 -0
  152. package/src/_modules/mock/data-model.mock.spec.ts +27 -24
  153. package/src/_modules/oauth2/_routes/oauth2.controller.spec.ts +107 -0
  154. package/src/_modules/oauth2/_services/oauth2.auth-service.spec.ts +254 -0
  155. package/src/_modules/oauth2/_services/oauth2.control-service.spec.ts +585 -0
  156. package/src/_modules/server/errors/errors.control-service.spec.ts +230 -0
  157. package/src/_modules/server/errors/errors.controller.spec.ts +165 -0
  158. package/src/_modules/server/errors/errors.data-service.spec.ts +355 -0
  159. package/src/_modules/server/server-status/server-status-snapshot.control-service.spec.ts +70 -0
  160. package/src/_modules/server/server-status/server-status-snapshot.data-service.spec.ts +77 -0
  161. package/src/_modules/server/server-status/server-status.control-service.spec.ts +516 -0
  162. package/src/_modules/server/server-status/server-status.controller.spec.ts +156 -0
  163. package/src/_modules/socket/_models/socket-client-service-params.control-model.spec.ts +6 -3
  164. package/src/_modules/socket/_models/socket-presence.control-model.spec.ts +164 -0
  165. package/src/_modules/socket/_services/socket-client.service.spec.ts +15 -0
  166. package/src/_modules/socket/app-extended.server.ts +1 -1
  167. package/src/_modules/test/get-test-routing-module.util.spec.ts +28 -0
  168. package/src/_modules/test/test.controller.spec.ts +72 -0
  169. package/src/_modules/usage/usage.controller.spec.ts +81 -0
  170. package/src/_modules/usage/usage.data-service.spec.ts +332 -0
  171. package/src/_services/base/api.service-base.spec.ts +125 -0
  172. package/src/_services/base/archive-data.service.spec.ts +196 -0
  173. package/src/_services/base/data.service.spec.ts +493 -0
  174. package/src/_services/base/data.service.ts +1 -1
  175. package/src/_services/base/db.service.spec.ts +59 -18
  176. package/src/_services/base/db.service.ts +1 -1
  177. package/src/_services/base/singleton.service-base.spec.ts +28 -0
  178. package/src/_services/base/singleton.service.spec.ts +114 -0
  179. package/src/_services/core/api.service.ts +1 -0
  180. package/src/_services/core/auth.service.spec.ts +159 -0
  181. package/src/_services/core/auth.service.ts +2 -2
  182. package/src/_services/core/email.service.spec.ts +14 -22
  183. package/src/_services/core/email.service.ts +1 -1
  184. package/src/_services/core/global.service.spec.ts +275 -0
  185. package/src/_services/core/global.service.ts +2 -2
  186. package/src/_services/core/service-collection.service.spec.ts +46 -0
  187. package/src/_services/route/controller.service.ts +1 -1
  188. package/src/_services/route/routing-module.service.spec.ts +8 -6
  189. package/src/_services/server/app.server.ts +17 -1
  190. package/src/_services/shared.static-service.spec.ts +89 -0
  191. package/src/_modules/socket/app-extended.server.spec.ts +0 -227
  192. package/src/_services/server/app.server.spec.ts +0 -138
@@ -0,0 +1,230 @@
1
+
2
+ import { DyNTS_Errors_ControlService } from './errors.control-service';
3
+ import { DyFM_Error, DyFM_Errors, DyFM_ErrorLevel, DyFM_RelativeDate, DyFM_Paged, DyFM_SearchQuery, DyFM_SearchResult } from '@futdevpro/fsm-dynamo';
4
+ import { DyNTS_global_settings } from '../../../_collections/global-settings.const';
5
+
6
+ class TestError extends DyFM_Error {
7
+ constructor(set?: Partial<TestError>) {
8
+ super(set);
9
+ Object.assign(this, set);
10
+ }
11
+ }
12
+
13
+ class TestErrors extends DyFM_Errors<TestError> {
14
+ constructor(set?: Partial<TestErrors>) {
15
+ super(set);
16
+ Object.assign(this, set);
17
+ }
18
+ }
19
+
20
+ class TestErrorsControlService extends DyNTS_Errors_ControlService<TestError, TestErrors> {
21
+ async recordError(data: TestErrors, issuer: string, alwaysRecord?: boolean): Promise<void> {
22
+ // Mock implementation
23
+ }
24
+
25
+ async handleInternalError(error: any, issuer: string, alwaysRecord?: boolean): Promise<void> {
26
+ // Mock implementation
27
+ }
28
+
29
+ checkErrorIsStringifyableOrResolvable(error: TestError, issuer: string): TestError | 'UNRESOLVABLE' {
30
+ return error;
31
+ }
32
+
33
+ getPriorityMultiplierByLevel(level: DyFM_ErrorLevel, issuer: string): number {
34
+ return 1;
35
+ }
36
+
37
+ async getErrorsFromDate(date: Date, issuer: string): Promise<DyFM_Paged<TestErrors>> {
38
+ return {
39
+ items: [],
40
+ total: 0,
41
+ pageIndex: 0,
42
+ pageSize: 0,
43
+ };
44
+ }
45
+
46
+ async deleteError(errorId: string, issuer: string, alwaysDelete?: boolean): Promise<void> {
47
+ // Mock implementation
48
+ }
49
+
50
+ async deleteAllErrors(issuer: string, alwaysDelete?: boolean): Promise<void> {
51
+ // Mock implementation
52
+ }
53
+
54
+ async getErrorsInRange(range: DyFM_RelativeDate, issuer: string): Promise<DyFM_Paged<TestErrors>> {
55
+ return {
56
+ items: [],
57
+ total: 0,
58
+ pageIndex: 0,
59
+ pageSize: 0,
60
+ };
61
+ }
62
+
63
+ async getErrorsPaged(range: DyFM_RelativeDate, pageSize: number, pageIndex: number, issuer: string): Promise<DyFM_Paged<TestErrors>> {
64
+ return {
65
+ items: [],
66
+ total: 0,
67
+ pageIndex,
68
+ pageSize,
69
+ };
70
+ }
71
+
72
+ async getLastErrors(range: DyFM_RelativeDate, pageSize: number, pageIndex: number, issuer: string): Promise<DyFM_Paged<TestErrors>> {
73
+ return {
74
+ items: [],
75
+ total: 0,
76
+ pageIndex,
77
+ pageSize,
78
+ };
79
+ }
80
+
81
+ async searchErrors(searchQuery: DyFM_SearchQuery<TestErrors>, issuer: string): Promise<DyFM_SearchResult<TestErrors>> {
82
+ return {
83
+ results: [],
84
+ totalItems: 0,
85
+ };
86
+ }
87
+
88
+ static getInstance(): TestErrorsControlService {
89
+ return (TestErrorsControlService as any).getSingletonInstance();
90
+ }
91
+ }
92
+
93
+ describe('| DyNTS_Errors_ControlService', () => {
94
+ let service: TestErrorsControlService;
95
+
96
+ beforeEach(() => {
97
+ service = new (TestErrorsControlService as any)();
98
+ });
99
+
100
+ describe('| constructor', () => {
101
+ it('| should initialize with default values', () => {
102
+ expect(service.debugLog).toBe(false);
103
+ expect(service.version).toBe(DyNTS_global_settings.systemVersion);
104
+ expect(service.duplicationCounter).toBeUndefined();
105
+ });
106
+ });
107
+
108
+ describe('| properties', () => {
109
+ it('| should have version property', () => {
110
+ expect(service.version).toBeDefined();
111
+ expect(typeof service.version).toBe('string');
112
+ });
113
+
114
+ it('| should have debugLog property', () => {
115
+ expect(service.debugLog).toBeDefined();
116
+ expect(typeof service.debugLog).toBe('boolean');
117
+ });
118
+ });
119
+
120
+ describe('| recordError', () => {
121
+ it('| should record error', async () => {
122
+ const errors = new TestErrors({
123
+ error: new TestError({ _message: 'Test error' }),
124
+ });
125
+
126
+ await service.recordError(errors, 'test-issuer');
127
+
128
+ expect(service.recordError).toBeDefined();
129
+ });
130
+ });
131
+
132
+ describe('| handleInternalError', () => {
133
+ it('| should handle internal error', async () => {
134
+ const error = new Error('Internal error');
135
+
136
+ await service.handleInternalError(error, 'test-issuer');
137
+
138
+ expect(service.handleInternalError).toBeDefined();
139
+ });
140
+ });
141
+
142
+ describe('| checkErrorIsStringifyableOrResolvable', () => {
143
+ it('| should check if error is stringifyable', () => {
144
+ const error = new TestError({ _message: 'Test error' });
145
+
146
+ const result = service.checkErrorIsStringifyableOrResolvable(error, 'test-issuer');
147
+
148
+ expect(result).toBe(error);
149
+ });
150
+ });
151
+
152
+ describe('| getPriorityMultiplierByLevel', () => {
153
+ it('| should return priority multiplier', () => {
154
+ const result = service.getPriorityMultiplierByLevel(DyFM_ErrorLevel.error, 'test-issuer');
155
+
156
+ expect(result).toBe(1);
157
+ });
158
+ });
159
+
160
+ describe('| getErrorsFromDate', () => {
161
+ it('| should get errors from date', async () => {
162
+ const date = new Date();
163
+ const result = await service.getErrorsFromDate(date, 'test-issuer');
164
+
165
+ expect(result).toBeDefined();
166
+ expect(result.items).toBeDefined();
167
+ expect(result.total).toBeDefined();
168
+ });
169
+ });
170
+
171
+ describe('| deleteError', () => {
172
+ it('| should delete error', async () => {
173
+ await service.deleteError('error-123', 'test-issuer');
174
+
175
+ expect(service.deleteError).toBeDefined();
176
+ });
177
+ });
178
+
179
+ describe('| deleteAllErrors', () => {
180
+ it('| should delete all errors', async () => {
181
+ await service.deleteAllErrors('test-issuer');
182
+
183
+ expect(service.deleteAllErrors).toBeDefined();
184
+ });
185
+ });
186
+
187
+ describe('| getErrorsInRange', () => {
188
+ it('| should get errors in range', async () => {
189
+ const result = await service.getErrorsInRange(DyFM_RelativeDate.lastWeek, 'test-issuer');
190
+
191
+ expect(result).toBeDefined();
192
+ expect(result.items).toBeDefined();
193
+ });
194
+ });
195
+
196
+ describe('| getErrorsPaged', () => {
197
+ it('| should get errors paged', async () => {
198
+ const result = await service.getErrorsPaged(DyFM_RelativeDate.lastWeek, 10, 0, 'test-issuer');
199
+
200
+ expect(result).toBeDefined();
201
+ expect(result.items).toBeDefined();
202
+ expect(result.pageIndex).toBe(0);
203
+ expect(result.pageSize).toBe(10);
204
+ });
205
+ });
206
+
207
+ describe('| getLastErrors', () => {
208
+ it('| should get last errors', async () => {
209
+ const result = await service.getLastErrors(DyFM_RelativeDate.lastWeek, 10, 0, 'test-issuer');
210
+
211
+ expect(result).toBeDefined();
212
+ expect(result.items).toBeDefined();
213
+ });
214
+ });
215
+
216
+ describe('| searchErrors', () => {
217
+ it('| should search errors', async () => {
218
+ const searchQuery: DyFM_SearchQuery<TestErrors> = {
219
+ filterBy: {},
220
+ };
221
+
222
+ const result = await service.searchErrors(searchQuery, 'test-issuer');
223
+
224
+ expect(result).toBeDefined();
225
+ expect(result.results).toBeDefined();
226
+ expect(result.totalItems).toBeDefined();
227
+ });
228
+ });
229
+ });
230
+
@@ -0,0 +1,165 @@
1
+
2
+ import { DyNTS_Errors_Controller } from './errors.controller';
3
+ import { DyFM_Error, DyFM_Errors, DyFM_HttpCallType, DyFM_RelativeDate } from '@futdevpro/fsm-dynamo';
4
+ import { DyNTS_Errors_ControlService } from './errors.control-service';
5
+ import { DyNTS_Endpoint_Params } from '../../../_models/control-models/endpoint-params.control-model';
6
+
7
+ class TestError extends DyFM_Error {
8
+ testProperty?: string;
9
+ }
10
+
11
+ class TestErrors extends DyFM_Errors<TestError> {
12
+ testProperty?: string;
13
+ }
14
+
15
+ class TestErrorsControlService extends DyNTS_Errors_ControlService<TestError, TestErrors> {
16
+ async recordError(data: TestErrors, issuer: string, alwaysRecord?: boolean): Promise<void> {}
17
+ async handleInternalError(error: any, issuer: string, alwaysRecord?: boolean): Promise<void> {}
18
+ checkErrorIsStringifyableOrResolvable(error: TestError, issuer: string): TestError | 'UNRESOLVABLE' { return error; }
19
+ getPriorityMultiplierByLevel(level: any, issuer: string): number { return 0; }
20
+ async getErrorsFromDate(date: Date, issuer: string): Promise<any> { return { results: [] }; }
21
+ async deleteError(errorId: string, issuer: string, alwaysDelete?: boolean): Promise<void> {}
22
+ async deleteAllErrors(issuer: string, alwaysDelete?: boolean): Promise<void> {}
23
+ async getErrorsInRange(range: DyFM_RelativeDate, issuer: string): Promise<any> { return { results: [] }; }
24
+ async getErrorsPaged(range: DyFM_RelativeDate, pageSize: number, pageIndex: number, issuer: string): Promise<any> { return { results: [] }; }
25
+ async getLastErrors(range: DyFM_RelativeDate, pageSize: number, pageIndex: number, issuer: string): Promise<any> { return { results: [] }; }
26
+ async searchErrors(searchQuery: any, issuer: string): Promise<any> { return { results: [] }; }
27
+ }
28
+
29
+ class TestErrorsController extends DyNTS_Errors_Controller<TestError, TestErrors, TestErrorsControlService> {
30
+ protected getError_ControlService(set: { data?: TestError, issuer: string }): TestErrorsControlService {
31
+ return new TestErrorsControlService();
32
+ }
33
+ protected override readonly additionalEndpoints: DyNTS_Endpoint_Params[] = [];
34
+ }
35
+
36
+ describe('| DyNTS_Errors_Controller', () => {
37
+ let controller: TestErrorsController;
38
+
39
+ beforeEach(() => {
40
+ controller = new (TestErrorsController as any)();
41
+ });
42
+
43
+ describe('| setupEndpoints', () => {
44
+ it('| should setup all error endpoints', () => {
45
+ controller.setupEndpoints();
46
+
47
+ expect(controller.endpoints).toBeDefined();
48
+ expect(controller.endpoints.length).toBeGreaterThanOrEqual(6);
49
+ });
50
+
51
+ it('| should setup logError endpoint', () => {
52
+ controller.setupEndpoints();
53
+
54
+ const logErrorEndpoint = controller.endpoints.find(ep => ep.name === 'logError');
55
+ expect(logErrorEndpoint).toBeDefined();
56
+ expect(logErrorEndpoint?.type).toBe(DyFM_HttpCallType.post);
57
+ expect(logErrorEndpoint?.endpoint).toBe('/error/log');
58
+ expect((logErrorEndpoint as any)?.tasks).toBeDefined();
59
+ expect((logErrorEndpoint as any)?.tasks?.length).toBe(1);
60
+ });
61
+
62
+ it('| should setup newError endpoint', () => {
63
+ controller.setupEndpoints();
64
+
65
+ const newErrorEndpoint = controller.endpoints.find(ep => ep.name === 'newError');
66
+ expect(newErrorEndpoint).toBeDefined();
67
+ expect(newErrorEndpoint?.type).toBe(DyFM_HttpCallType.post);
68
+ expect(newErrorEndpoint?.endpoint).toBe('/error/new');
69
+ expect((newErrorEndpoint as any)?.tasks).toBeDefined();
70
+ expect((newErrorEndpoint as any)?.tasks?.length).toBe(1);
71
+ });
72
+
73
+ it('| should setup markErrorDone endpoint', () => {
74
+ controller.setupEndpoints();
75
+
76
+ const markErrorDoneEndpoint = controller.endpoints.find(ep => ep.name === 'markErrorDone');
77
+ expect(markErrorDoneEndpoint).toBeDefined();
78
+ expect(markErrorDoneEndpoint?.type).toBe(DyFM_HttpCallType.get);
79
+ expect(markErrorDoneEndpoint?.endpoint).toBe('/error/mark-done/:errorId');
80
+ expect((markErrorDoneEndpoint as any)?.tasks).toBeDefined();
81
+ expect((markErrorDoneEndpoint as any)?.tasks?.length).toBe(1);
82
+ });
83
+
84
+ it('| should setup markAllErrorDone endpoint', () => {
85
+ controller.setupEndpoints();
86
+
87
+ const markAllErrorDoneEndpoint = controller.endpoints.find(ep => ep.name === 'markAllErrorDone');
88
+ expect(markAllErrorDoneEndpoint).toBeDefined();
89
+ expect(markAllErrorDoneEndpoint?.type).toBe(DyFM_HttpCallType.get);
90
+ expect(markAllErrorDoneEndpoint?.endpoint).toBe('/error/mark-all-done');
91
+ expect((markAllErrorDoneEndpoint as any)?.tasks).toBeDefined();
92
+ expect((markAllErrorDoneEndpoint as any)?.tasks?.length).toBe(1);
93
+ });
94
+
95
+ it('| should setup getErrors endpoint', () => {
96
+ controller.setupEndpoints();
97
+
98
+ const getErrorsEndpoint = controller.endpoints.find(ep => ep.name === 'getErrors');
99
+ expect(getErrorsEndpoint).toBeDefined();
100
+ expect(getErrorsEndpoint?.type).toBe(DyFM_HttpCallType.get);
101
+ expect(getErrorsEndpoint?.endpoint).toBe('/error/get-range/:range');
102
+ expect((getErrorsEndpoint as any)?.tasks).toBeDefined();
103
+ expect((getErrorsEndpoint as any)?.tasks?.length).toBe(1);
104
+ });
105
+
106
+ it('| should setup getErrorsPaged endpoint', () => {
107
+ controller.setupEndpoints();
108
+
109
+ const getErrorsPagedEndpoint = controller.endpoints.find(ep => ep.name === 'getErrorsPaged');
110
+ expect(getErrorsPagedEndpoint).toBeDefined();
111
+ expect(getErrorsPagedEndpoint?.type).toBe(DyFM_HttpCallType.get);
112
+ expect(getErrorsPagedEndpoint?.endpoint).toBe('/error/get-paged/:range/:pageSize/:pageIndex');
113
+ expect((getErrorsPagedEndpoint as any)?.tasks).toBeDefined();
114
+ expect((getErrorsPagedEndpoint as any)?.tasks?.length).toBe(1);
115
+ });
116
+
117
+ it('| should setup getLastErrors endpoint', () => {
118
+ controller.setupEndpoints();
119
+
120
+ const getLastErrorsEndpoint = controller.endpoints.find(ep => ep.name === 'getLastErrors');
121
+ expect(getLastErrorsEndpoint).toBeDefined();
122
+ expect(getLastErrorsEndpoint?.type).toBe(DyFM_HttpCallType.get);
123
+ expect(getLastErrorsEndpoint?.endpoint).toBe('/error/get-last-paged/:range/:pageSize/:pageIndex');
124
+ expect((getLastErrorsEndpoint as any)?.tasks).toBeDefined();
125
+ expect((getLastErrorsEndpoint as any)?.tasks?.length).toBe(1);
126
+ });
127
+
128
+ it('| should setup searchErrors endpoint', () => {
129
+ controller.setupEndpoints();
130
+
131
+ const searchErrorsEndpoint = controller.endpoints.find(ep => ep.name === 'searchErrors');
132
+ expect(searchErrorsEndpoint).toBeDefined();
133
+ expect(searchErrorsEndpoint?.type).toBe(DyFM_HttpCallType.get);
134
+ expect(searchErrorsEndpoint?.endpoint).toBe('/error/search');
135
+ expect((searchErrorsEndpoint as any)?.tasks).toBeDefined();
136
+ expect((searchErrorsEndpoint as any)?.tasks?.length).toBe(1);
137
+ });
138
+
139
+ it('| should include additionalEndpoints', () => {
140
+ const additionalEndpoint = new DyNTS_Endpoint_Params({
141
+ name: 'customEndpoint',
142
+ type: DyFM_HttpCallType.get,
143
+ endpoint: '/error/custom',
144
+ tasks: [],
145
+ });
146
+ (controller as any).additionalEndpoints.push(additionalEndpoint);
147
+
148
+ controller.setupEndpoints();
149
+
150
+ const customEndpoint = controller.endpoints.find(ep => ep.name === 'customEndpoint');
151
+ expect(customEndpoint).toBeDefined();
152
+ });
153
+
154
+ it('| should throw error when additionalEndpoints is not defined', () => {
155
+ const controllerWithoutEndpoints = new (class extends TestErrorsController {
156
+ protected override readonly additionalEndpoints: DyNTS_Endpoint_Params[] = undefined as any;
157
+ } as any)();
158
+
159
+ expect(() => {
160
+ controllerWithoutEndpoints.setupEndpoints();
161
+ }).toThrow();
162
+ });
163
+ });
164
+ });
165
+