@talkpilot/core-db 1.3.75 → 1.3.77

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 (286) hide show
  1. package/.cursor/rules/development.mdc +65 -65
  2. package/AGENTS.md +49 -49
  3. package/DEVELOPMENT.md +141 -141
  4. package/README.md +817 -818
  5. package/dist/index.d.ts +0 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +0 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/municipal/index.d.ts +0 -1
  10. package/dist/municipal/index.d.ts.map +1 -1
  11. package/dist/municipal/index.js +0 -1
  12. package/dist/municipal/index.js.map +1 -1
  13. package/dist/municipal/muniIssues/index.d.ts +2 -2
  14. package/dist/municipal/muniIssues/index.d.ts.map +1 -1
  15. package/dist/municipal/muniIssues/index.js +2 -1
  16. package/dist/municipal/muniIssues/index.js.map +1 -1
  17. package/dist/municipal/muniIssues/muniIssues.constants.d.ts +2 -0
  18. package/dist/municipal/muniIssues/muniIssues.constants.d.ts.map +1 -1
  19. package/dist/municipal/muniIssues/muniIssues.constants.js +8 -1
  20. package/dist/municipal/muniIssues/muniIssues.constants.js.map +1 -1
  21. package/dist/municipal/muniIssues/muniIssues.getters.d.ts +6 -1
  22. package/dist/municipal/muniIssues/muniIssues.getters.d.ts.map +1 -1
  23. package/dist/municipal/muniIssues/muniIssues.getters.js +31 -1
  24. package/dist/municipal/muniIssues/muniIssues.getters.js.map +1 -1
  25. package/dist/municipal/muniIssues/muniIssues.schema.d.ts.map +1 -1
  26. package/dist/municipal/muniIssues/muniIssues.schema.js +13 -0
  27. package/dist/municipal/muniIssues/muniIssues.schema.js.map +1 -1
  28. package/dist/municipal/muniIssues/muniIssues.setters.d.ts +5 -1
  29. package/dist/municipal/muniIssues/muniIssues.setters.d.ts.map +1 -1
  30. package/dist/municipal/muniIssues/muniIssues.setters.js +39 -2
  31. package/dist/municipal/muniIssues/muniIssues.setters.js.map +1 -1
  32. package/dist/municipal/muniIssues/muniIssues.types.d.ts +23 -2
  33. package/dist/municipal/muniIssues/muniIssues.types.d.ts.map +1 -1
  34. package/dist/talkpilot/flows/flows.schema.d.ts +0 -28
  35. package/dist/talkpilot/flows/flows.schema.d.ts.map +1 -1
  36. package/dist/talkpilot/flows/flows.schema.js +0 -16
  37. package/dist/talkpilot/flows/flows.schema.js.map +1 -1
  38. package/dist/talkpilot/flows/flows.types.d.ts +0 -8
  39. package/dist/talkpilot/flows/flows.types.d.ts.map +1 -1
  40. package/dist/test-utils/factories/index.d.ts +0 -1
  41. package/dist/test-utils/factories/index.d.ts.map +1 -1
  42. package/dist/test-utils/factories/index.js +0 -1
  43. package/dist/test-utils/factories/index.js.map +1 -1
  44. package/jest.config.js +20 -20
  45. package/package.json +46 -46
  46. package/src/__tests__/setup.ts +20 -20
  47. package/src/bulkWrite/__tests__/bulkWrite.spec.ts +65 -65
  48. package/src/bulkWrite/bulkWrite.ops.ts +45 -45
  49. package/src/bulkWrite/bulkWrite.types.ts +4 -4
  50. package/src/bulkWrite/index.ts +2 -2
  51. package/src/config.ts +9 -9
  52. package/src/configuration/index.ts +17 -17
  53. package/src/configuration/internalModels/index.ts +3 -3
  54. package/src/configuration/internalModels/internalModels.constants.ts +1 -1
  55. package/src/configuration/internalModels/internalModels.getters.ts +33 -33
  56. package/src/configuration/internalModels/internalModels.types.ts +12 -12
  57. package/src/configuration/models/__tests__/models.getters.spec.ts +67 -67
  58. package/src/configuration/models/index.ts +27 -27
  59. package/src/configuration/models/models.constants.ts +20 -20
  60. package/src/configuration/models/models.getters.ts +71 -71
  61. package/src/configuration/models/models.types.ts +80 -80
  62. package/src/configuration/mongodb-client.ts +62 -62
  63. package/src/configuration/prompts/index.ts +2 -2
  64. package/src/configuration/prompts/prompts.getters.ts +49 -49
  65. package/src/configuration/prompts/prompts.types.ts +11 -11
  66. package/src/connection.ts +81 -81
  67. package/src/index.ts +47 -48
  68. package/src/municipal/__tests__/validation.spec.ts +62 -62
  69. package/src/municipal/cities/cities.getters.ts +50 -50
  70. package/src/municipal/cities/cities.types.ts +11 -11
  71. package/src/municipal/cities/index.ts +2 -2
  72. package/src/municipal/departmentsSubjects/__tests__/departmentsSubjects.spec.ts +272 -272
  73. package/src/municipal/departmentsSubjects/departmentsSubjects.getters.ts +317 -317
  74. package/src/municipal/departmentsSubjects/departmentsSubjects.types.ts +73 -73
  75. package/src/municipal/departmentsSubjects/index.ts +9 -9
  76. package/src/municipal/index.ts +22 -23
  77. package/src/municipal/mongodb-client.ts +61 -61
  78. package/src/municipal/muniIssues/__tests__/muniIssues.getters.spec.ts +66 -0
  79. package/src/municipal/muniIssues/__tests__/muniIssues.setters.spec.ts +167 -94
  80. package/src/municipal/muniIssues/__tests__/muniIssues.setup.spec.ts +93 -92
  81. package/src/municipal/muniIssues/index.ts +22 -17
  82. package/src/municipal/muniIssues/muniIssues.constants.ts +26 -18
  83. package/src/municipal/muniIssues/muniIssues.getters.ts +68 -24
  84. package/src/municipal/muniIssues/muniIssues.schema.ts +80 -66
  85. package/src/municipal/muniIssues/muniIssues.setters.ts +80 -24
  86. package/src/municipal/muniIssues/muniIssues.setup.ts +65 -65
  87. package/src/municipal/muniIssues/muniIssues.types.ts +68 -37
  88. package/src/municipal/streets/__tests__/streets.spec.ts +253 -253
  89. package/src/municipal/streets/index.ts +2 -2
  90. package/src/municipal/streets/streets.getters.ts +140 -140
  91. package/src/municipal/streets/streets.types.ts +19 -19
  92. package/src/municipal/systemInstructions/__tests__/getters.spec.ts +113 -113
  93. package/src/municipal/systemInstructions/__tests__/setters.spec.ts +274 -274
  94. package/src/municipal/systemInstructions/index.ts +7 -7
  95. package/src/municipal/systemInstructions/instructions.getters.ts +57 -57
  96. package/src/municipal/systemInstructions/instructions.setters.ts +119 -119
  97. package/src/municipal/systemInstructions/instructions.types.ts +30 -30
  98. package/src/municipal/tickets/__tests__/tickets.getters.spec.ts +30 -30
  99. package/src/municipal/tickets/__tests__/tickets.statistics.spec.ts +99 -99
  100. package/src/municipal/tickets/index.ts +9 -9
  101. package/src/municipal/tickets/tickets.constants.ts +8 -8
  102. package/src/municipal/tickets/tickets.getters.ts +121 -121
  103. package/src/municipal/tickets/tickets.statistics.aggregation.ts +110 -110
  104. package/src/municipal/tickets/tickets.statistics.getters.ts +145 -145
  105. package/src/municipal/tickets/tickets.types.ts +54 -54
  106. package/src/municipal/utils/types.ts +11 -11
  107. package/src/talkpilot/__tests__/db.spec.ts +38 -38
  108. package/src/talkpilot/__tests__/mongodb-client.spec.ts +18 -18
  109. package/src/talkpilot/__tests__/validation.spec.ts +68 -68
  110. package/src/talkpilot/agents/__tests__/agents.getters.spec.ts +29 -29
  111. package/src/talkpilot/agents/agents.getters.ts +34 -34
  112. package/src/talkpilot/agents/agents.types.ts +14 -14
  113. package/src/talkpilot/agents/index.ts +2 -2
  114. package/src/talkpilot/backgroundToolResults/__tests__/backgroundToolResults.getters.spec.ts +147 -147
  115. package/src/talkpilot/backgroundToolResults/backgroundToolResults.getters.ts +65 -65
  116. package/src/talkpilot/backgroundToolResults/backgroundToolResults.types.ts +23 -23
  117. package/src/talkpilot/backgroundToolResults/index.ts +2 -2
  118. package/src/talkpilot/callTokenUsage/__tests__/callTokenUsage.getters.spec.ts +57 -57
  119. package/src/talkpilot/callTokenUsage/callTokenUsage.getters.ts +42 -42
  120. package/src/talkpilot/callTokenUsage/callTokenUsage.types.ts +28 -28
  121. package/src/talkpilot/callTokenUsage/index.ts +2 -2
  122. package/src/talkpilot/calls/__tests__/callStats.utils.spec.ts +128 -128
  123. package/src/talkpilot/calls/__tests__/calls.dashboard.spec.ts +229 -229
  124. package/src/talkpilot/calls/__tests__/calls.spec.ts +471 -471
  125. package/src/talkpilot/calls/__tests__/calls.statistics.spec.ts +483 -483
  126. package/src/talkpilot/calls/calls.constants.ts +49 -49
  127. package/src/talkpilot/calls/calls.getters.ts +277 -277
  128. package/src/talkpilot/calls/calls.statistics.getters.ts +668 -668
  129. package/src/talkpilot/calls/calls.statistics.types.ts +48 -48
  130. package/src/talkpilot/calls/calls.types.ts +151 -151
  131. package/src/talkpilot/calls/dashboard/calls.dashboard.ts +295 -295
  132. package/src/talkpilot/calls/dashboard/calls.dashboard.types.ts +57 -57
  133. package/src/talkpilot/calls/index.ts +6 -6
  134. package/src/talkpilot/clientAudioBuffers/__tests__/clientAudioBuffer.getters.spec.ts +160 -160
  135. package/src/talkpilot/clientAudioBuffers/clientAudioBuffer.getters.ts +117 -117
  136. package/src/talkpilot/clientAudioBuffers/clientsAudioBuffers.types.ts +25 -25
  137. package/src/talkpilot/clientAudioBuffers/index.ts +2 -2
  138. package/src/talkpilot/clients/__tests__/clients.quota.spec.ts +123 -123
  139. package/src/talkpilot/clients/clients.getters.ts +19 -19
  140. package/src/talkpilot/clients/clients.quota.getters.ts +119 -119
  141. package/src/talkpilot/clients/clients.quota.types.ts +27 -27
  142. package/src/talkpilot/clients/clients.types.ts +18 -18
  143. package/src/talkpilot/clients/index.ts +4 -4
  144. package/src/talkpilot/clientsConfig/__tests__/clientsConfig.getters.spec.ts +423 -423
  145. package/src/talkpilot/clientsConfig/__tests__/clientsConfig.spec.ts +212 -212
  146. package/src/talkpilot/clientsConfig/clientsConfig.constants.ts +2 -2
  147. package/src/talkpilot/clientsConfig/clientsConfig.getters.ts +247 -247
  148. package/src/talkpilot/clientsConfig/clientsConfig.types.ts +137 -137
  149. package/src/talkpilot/clientsConfig/index.ts +3 -3
  150. package/src/talkpilot/contextNotes/__tests__/contextNotes.getters.spec.ts +217 -217
  151. package/src/talkpilot/contextNotes/contextNotes.getters.ts +85 -85
  152. package/src/talkpilot/contextNotes/contextNotes.types.ts +20 -20
  153. package/src/talkpilot/contextNotes/index.ts +2 -2
  154. package/src/talkpilot/flows/__tests__/flows.schema.spec.ts +124 -152
  155. package/src/talkpilot/flows/flows.getter.ts +34 -34
  156. package/src/talkpilot/flows/flows.schema.ts +180 -196
  157. package/src/talkpilot/flows/flows.types.ts +211 -220
  158. package/src/talkpilot/flows/index.ts +7 -7
  159. package/src/talkpilot/groups/__tests__/groups.spec.ts +90 -90
  160. package/src/talkpilot/groups/__tests__/phone.utils.spec.ts +32 -32
  161. package/src/talkpilot/groups/groups.getters.ts +30 -30
  162. package/src/talkpilot/groups/groups.types.ts +29 -29
  163. package/src/talkpilot/groups/index.ts +3 -3
  164. package/src/talkpilot/groups/phone.utils.ts +46 -46
  165. package/src/talkpilot/index.ts +32 -32
  166. package/src/talkpilot/leads/index.ts +2 -2
  167. package/src/talkpilot/leads/leads.getter.ts +6 -6
  168. package/src/talkpilot/leads/leads.schema.ts +33 -33
  169. package/src/talkpilot/leads/leads.types.ts +20 -20
  170. package/src/talkpilot/mongodb-client.ts +78 -78
  171. package/src/talkpilot/phone_numbers/__tests__/phone_numbers.spec.ts +530 -530
  172. package/src/talkpilot/phone_numbers/index.ts +2 -2
  173. package/src/talkpilot/phone_numbers/phone_numbers.getter.ts +240 -240
  174. package/src/talkpilot/phone_numbers/phone_numbers.schema.ts +17 -17
  175. package/src/talkpilot/phone_numbers/phone_numbers.types.ts +30 -30
  176. package/src/talkpilot/phone_numbers/phone_numbers.utils.ts +9 -9
  177. package/src/talkpilot/plans/__tests__/plans.spec.ts +70 -70
  178. package/src/talkpilot/plans/index.ts +2 -2
  179. package/src/talkpilot/plans/plans.getters.ts +132 -132
  180. package/src/talkpilot/plans/plans.types.ts +89 -89
  181. package/src/talkpilot/products/__tests__/products.getters.spec.ts +44 -44
  182. package/src/talkpilot/products/index.ts +2 -2
  183. package/src/talkpilot/products/products.getters.ts +12 -12
  184. package/src/talkpilot/products/products.types.ts +9 -9
  185. package/src/talkpilot/results/index.ts +7 -7
  186. package/src/talkpilot/results/results.getter.ts +39 -39
  187. package/src/talkpilot/results/results.schema.ts +25 -25
  188. package/src/talkpilot/results/results.types.ts +34 -34
  189. package/src/talkpilot/retry_analyze/__tests__/retryAnalyze.getters.spec.ts +156 -156
  190. package/src/talkpilot/retry_analyze/index.ts +2 -2
  191. package/src/talkpilot/retry_analyze/retryAnalyze.getters.ts +84 -84
  192. package/src/talkpilot/retry_analyze/retryAnalyze.types.ts +13 -13
  193. package/src/talkpilot/sessions/__tests__/sessions.spec.ts +147 -147
  194. package/src/talkpilot/sessions/index.ts +2 -2
  195. package/src/talkpilot/sessions/sessions.getter.ts +92 -92
  196. package/src/talkpilot/sessions/sessions.schema.ts +34 -34
  197. package/src/talkpilot/sessions/sessions.types.ts +30 -30
  198. package/src/talkpilot/subscriptions/__tests__/subscriptions.getters.utils.spec.ts +45 -45
  199. package/src/talkpilot/subscriptions/index.ts +3 -3
  200. package/src/talkpilot/subscriptions/subscriptions.getters.ts +146 -146
  201. package/src/talkpilot/subscriptions/subscriptions.getters.utils.ts +33 -33
  202. package/src/talkpilot/subscriptions/subscriptions.types.ts +66 -66
  203. package/src/talkpilot/utils/__tests__/query.utils.spec.ts +49 -49
  204. package/src/talkpilot/utils/query.utils.ts +21 -21
  205. package/src/test-utils/db-utils.ts +33 -33
  206. package/src/test-utils/factories/index.ts +18 -19
  207. package/src/test-utils/factories/municipal/cities.ts +16 -16
  208. package/src/test-utils/factories/municipal/departmentsSubjects.ts +37 -37
  209. package/src/test-utils/factories/municipal/muniIssues.ts +32 -32
  210. package/src/test-utils/factories/municipal/streets.ts +22 -22
  211. package/src/test-utils/factories/municipal/tickets.ts +39 -39
  212. package/src/test-utils/factories/talkpilot/agents.ts +19 -19
  213. package/src/test-utils/factories/talkpilot/calls.ts +37 -37
  214. package/src/test-utils/factories/talkpilot/clientAudioBuffers.ts +20 -20
  215. package/src/test-utils/factories/talkpilot/clientsConfig.ts +18 -18
  216. package/src/test-utils/factories/talkpilot/contextNotes.ts +40 -40
  217. package/src/test-utils/factories/talkpilot/flows.ts +33 -33
  218. package/src/test-utils/factories/talkpilot/groups.ts +33 -33
  219. package/src/test-utils/factories/talkpilot/phone_numbers.ts +22 -22
  220. package/src/test-utils/factories/talkpilot/sessions.ts +35 -35
  221. package/src/test-utils/factories/websitalk/knowledgeDocuments.ts +29 -29
  222. package/src/test-utils/factories/websitalk/scanResources.ts +26 -26
  223. package/src/test-utils/factories/websitalk/scans.ts +30 -30
  224. package/src/test-utils/factories/websitalk/websiteUrls.ts +17 -17
  225. package/src/utils/date.utils.ts +126 -126
  226. package/src/utils/shared.types.ts +4 -4
  227. package/src/utils/validation.ts +23 -23
  228. package/src/websitalk/index.ts +18 -18
  229. package/src/websitalk/knowledgeDocuments/__tests__/knowledgeDocuments.spec.ts +238 -238
  230. package/src/websitalk/knowledgeDocuments/index.ts +3 -3
  231. package/src/websitalk/knowledgeDocuments/knowledgeDocuments.constants.ts +26 -26
  232. package/src/websitalk/knowledgeDocuments/knowledgeDocuments.getters.ts +95 -95
  233. package/src/websitalk/knowledgeDocuments/knowledgeDocuments.types.ts +75 -75
  234. package/src/websitalk/mongodb-client.ts +61 -61
  235. package/src/websitalk/scanResources/__tests__/scanResources.spec.ts +267 -267
  236. package/src/websitalk/scanResources/index.ts +4 -4
  237. package/src/websitalk/scanResources/scanResources.constants.ts +60 -60
  238. package/src/websitalk/scanResources/scanResources.getters.ts +128 -128
  239. package/src/websitalk/scanResources/scanResources.types.ts +105 -105
  240. package/src/websitalk/scanResources/scanResources.utils.ts +31 -31
  241. package/src/websitalk/scans/__tests__/scans.spec.ts +362 -362
  242. package/src/websitalk/scans/index.ts +4 -4
  243. package/src/websitalk/scans/scans.constants.ts +18 -18
  244. package/src/websitalk/scans/scans.getters.ts +172 -172
  245. package/src/websitalk/scans/scans.types.ts +58 -58
  246. package/src/websitalk/scans/scans.utils.ts +5 -5
  247. package/src/websitalk/websiteUrls/__tests__/websiteUrls.spec.ts +77 -77
  248. package/src/websitalk/websiteUrls/index.ts +2 -2
  249. package/src/websitalk/websiteUrls/websiteUrls.getters.ts +65 -65
  250. package/src/websitalk/websiteUrls/websiteUrls.types.ts +13 -13
  251. package/tsconfig.json +23 -23
  252. package/dist/municipal/residents/index.d.ts +0 -5
  253. package/dist/municipal/residents/index.d.ts.map +0 -1
  254. package/dist/municipal/residents/index.js +0 -24
  255. package/dist/municipal/residents/index.js.map +0 -1
  256. package/dist/municipal/residents/residents.constants.d.ts +0 -3
  257. package/dist/municipal/residents/residents.constants.d.ts.map +0 -1
  258. package/dist/municipal/residents/residents.constants.js +0 -6
  259. package/dist/municipal/residents/residents.constants.js.map +0 -1
  260. package/dist/municipal/residents/residents.getters.d.ts +0 -9
  261. package/dist/municipal/residents/residents.getters.d.ts.map +0 -1
  262. package/dist/municipal/residents/residents.getters.js +0 -32
  263. package/dist/municipal/residents/residents.getters.js.map +0 -1
  264. package/dist/municipal/residents/residents.schema.d.ts +0 -4
  265. package/dist/municipal/residents/residents.schema.d.ts.map +0 -1
  266. package/dist/municipal/residents/residents.schema.js +0 -29
  267. package/dist/municipal/residents/residents.schema.js.map +0 -1
  268. package/dist/municipal/residents/residents.types.d.ts +0 -15
  269. package/dist/municipal/residents/residents.types.d.ts.map +0 -1
  270. package/dist/municipal/residents/residents.types.js +0 -3
  271. package/dist/municipal/residents/residents.types.js.map +0 -1
  272. package/dist/talkpilot/subscriptions/subscriptions.utils.d.ts +0 -4
  273. package/dist/talkpilot/subscriptions/subscriptions.utils.d.ts.map +0 -1
  274. package/dist/talkpilot/subscriptions/subscriptions.utils.js +0 -20
  275. package/dist/talkpilot/subscriptions/subscriptions.utils.js.map +0 -1
  276. package/dist/test-utils/factories/municipal/residents.d.ts +0 -5
  277. package/dist/test-utils/factories/municipal/residents.d.ts.map +0 -1
  278. package/dist/test-utils/factories/municipal/residents.js +0 -22
  279. package/dist/test-utils/factories/municipal/residents.js.map +0 -1
  280. package/src/municipal/residents/__tests__/residents.spec.ts +0 -92
  281. package/src/municipal/residents/index.ts +0 -4
  282. package/src/municipal/residents/residents.constants.ts +0 -2
  283. package/src/municipal/residents/residents.getters.ts +0 -42
  284. package/src/municipal/residents/residents.schema.ts +0 -28
  285. package/src/municipal/residents/residents.types.ts +0 -17
  286. package/src/test-utils/factories/municipal/residents.ts +0 -20
@@ -1,274 +1,274 @@
1
- import {
2
- createSystemInstruction,
3
- updateSystemInstruction,
4
- deleteSystemInstruction,
5
- deactivateSystemInstruction,
6
- activateSystemInstruction,
7
- } from "../instructions.setters";
8
- import { getSystemInstructionById } from "../instructions.getters";
9
- import {
10
- MIS_SystemInstruction,
11
- MIS_TOOLS,
12
- QUERY_TYPES,
13
- } from "../instructions.types";
14
- import { ObjectId } from "mongodb";
15
-
16
- describe("System Instructions Setter Tests", () => {
17
- const testCity = "Ashdod";
18
-
19
- describe("createSystemInstruction", () => {
20
- it("given valid data when created then save document with timestamps", async () => {
21
- // Given
22
- const instructionData: Omit<
23
- MIS_SystemInstruction,
24
- "_id" | "createdAt" | "updatedAt"
25
- > = {
26
- cityName: testCity,
27
- instruction: "Test Instruction",
28
- isActive: true,
29
- tool: MIS_TOOLS.findSubject,
30
- queryType: QUERY_TYPES.any,
31
- tags: ["test", "unit"],
32
- };
33
-
34
- // When
35
- const id = await createSystemInstruction(instructionData);
36
-
37
- // Then
38
- const saved = await getSystemInstructionById(id.toString());
39
- expect(saved).toBeDefined();
40
- expect(saved?._id).toBeDefined();
41
- expect(saved).toMatchObject(instructionData);
42
- expect(saved?.createdAt).toBeInstanceOf(Date);
43
- expect(saved?.updatedAt).toBeInstanceOf(Date);
44
- });
45
-
46
- it("given data without tags when created then save document with default isActive true and no tags", async () => {
47
- // Given
48
- const instructionData: Omit<
49
- MIS_SystemInstruction,
50
- "_id" | "createdAt" | "updatedAt"
51
- > = {
52
- cityName: testCity,
53
- instruction: "No Tags Instruction",
54
- isActive: true,
55
- tool: MIS_TOOLS.findStreet,
56
- queryType: QUERY_TYPES.exactlyOne,
57
- };
58
-
59
- // When
60
- const id = await createSystemInstruction(instructionData);
61
-
62
- // Then
63
- const saved = await getSystemInstructionById(id.toString());
64
- expect(saved).toBeDefined();
65
- expect(saved?.tags).toBeUndefined();
66
- expect(saved?.isActive).toBe(true);
67
- });
68
-
69
- it("should throw error when creating with invalid tool", async () => {
70
- const invalidData = {
71
- cityName: testCity,
72
- instruction: "Invalid Tool Test",
73
- isActive: true,
74
- tool: "invalidTool" as any,
75
- queryType: QUERY_TYPES.any,
76
- };
77
-
78
- await expect(createSystemInstruction(invalidData)).rejects.toThrow(
79
- `Invalid tool value: invalidTool. Allowed values are: ${Object.values(MIS_TOOLS).join(", ")}`,
80
- );
81
- });
82
-
83
- it("should throw error when creating with invalid queryType", async () => {
84
- const invalidData = {
85
- cityName: testCity,
86
- instruction: "Invalid QueryType Test",
87
- isActive: true,
88
- tool: MIS_TOOLS.findSubject,
89
- queryType: "invalidType" as any,
90
- };
91
-
92
- await expect(createSystemInstruction(invalidData)).rejects.toThrow(
93
- `Invalid queryType value: invalidType. Allowed values are: ${Object.values(QUERY_TYPES).join(", ")}`,
94
- );
95
- });
96
- });
97
-
98
- describe("updateSystemInstruction", () => {
99
- let instructionId: string;
100
- //Given before each test
101
- beforeEach(async () => {
102
- const id = await createSystemInstruction({
103
- cityName: testCity,
104
- instruction: "Find Me",
105
- isActive: true,
106
- tool: MIS_TOOLS.findSubject,
107
- queryType: QUERY_TYPES.any,
108
- });
109
- instructionId = id.toString();
110
-
111
- await createSystemInstruction({
112
- cityName: testCity,
113
- instruction: "Inactive One",
114
- isActive: false,
115
- tool: MIS_TOOLS.findSubject,
116
- queryType: QUERY_TYPES.any,
117
- });
118
- });
119
- it("given existing doc when updated then change values and refresh updatedAt", async () => {
120
- const originalDoc = await getSystemInstructionById(
121
- instructionId.toString(),
122
- );
123
-
124
- // Wait a bit to ensure timestamp difference
125
- await new Promise((resolve) => setTimeout(resolve, 10));
126
-
127
- // When
128
- await updateSystemInstruction(instructionId.toString(), {
129
- instruction: "New Text",
130
- });
131
-
132
- // Then
133
- const updatedDoc = await getSystemInstructionById(
134
- instructionId.toString(),
135
- );
136
- expect(updatedDoc?.instruction).toBe("New Text");
137
- expect(updatedDoc?.updatedAt.getTime()).toBeGreaterThan(
138
- originalDoc!.updatedAt.getTime(),
139
- );
140
- });
141
-
142
- it("given multiple fields when updated then change all provided values", async () => {
143
- // When
144
- await updateSystemInstruction(instructionId, {
145
- isActive: false,
146
- tool: MIS_TOOLS.findStreet,
147
- tags: ["new-tag"],
148
- });
149
-
150
- // Then
151
- const updatedDoc = await getSystemInstructionById(instructionId);
152
- expect(updatedDoc?.isActive).toBe(false);
153
- expect(updatedDoc?.tool).toBe(MIS_TOOLS.findStreet);
154
- expect(updatedDoc?.tags).toEqual(["new-tag"]);
155
- });
156
-
157
- it("should throw error when updating with invalid tool", async () => {
158
- const invalidUpdate = { tool: "invalidTool" as any };
159
-
160
- await expect(
161
- updateSystemInstruction(instructionId, invalidUpdate),
162
- ).rejects.toThrow(
163
- `Invalid tool value: invalidTool. Allowed values are: ${Object.values(MIS_TOOLS).join(", ")}`,
164
- );
165
- });
166
-
167
- it("should throw error when updating with invalid queryType", async () => {
168
- const invalidUpdate = { queryType: "invalidType" as any };
169
-
170
- await expect(
171
- updateSystemInstruction(instructionId, invalidUpdate),
172
- ).rejects.toThrow(
173
- `Invalid queryType value: invalidType. Allowed values are: ${Object.values(QUERY_TYPES).join(", ")}`,
174
- );
175
- });
176
-
177
- it("given system instructions, when deactivating it then its status updated to active", async () => {
178
- //When
179
- const success = await deactivateSystemInstruction(
180
- instructionId.toString(),
181
- );
182
- const updatedDoc = await getSystemInstructionById(
183
- instructionId.toString(),
184
- );
185
- //Then
186
- expect(success).toBe(true);
187
- expect(updatedDoc?.isActive).toBe(false);
188
- });
189
- it("given invalidId when deactivating it then return false", async () => {
190
- //When
191
- const success = await deactivateSystemInstruction(
192
- new ObjectId().toHexString(),
193
- );
194
-
195
- //Then
196
- expect(success).toBe(false);
197
- });
198
-
199
- it("given already inactive instruction when deactivating then still return true and remain inactive", async () => {
200
- // Given
201
- await deactivateSystemInstruction(instructionId);
202
-
203
- // When
204
- const success = await deactivateSystemInstruction(instructionId);
205
-
206
- // Then
207
- expect(success).toBe(true);
208
- const doc = await getSystemInstructionById(instructionId);
209
- expect(doc?.isActive).toBe(false);
210
- });
211
- });
212
-
213
- describe("activateSystemInstruction", () => {
214
- let instructionId: string;
215
- beforeEach(async () => {
216
- const id = await createSystemInstruction({
217
- cityName: testCity,
218
- instruction: "Inactive Instruction",
219
- isActive: false,
220
- tool: MIS_TOOLS.findSubject,
221
- queryType: QUERY_TYPES.any,
222
- });
223
- instructionId = id.toString();
224
- });
225
-
226
- it("given inactive doc when activating then set isActive to true", async () => {
227
- // When
228
- const success = await activateSystemInstruction(instructionId);
229
-
230
- // Then
231
- expect(success).toBe(true);
232
- const updatedDoc = await getSystemInstructionById(instructionId);
233
- expect(updatedDoc?.isActive).toBe(true);
234
- });
235
-
236
- it("given invalidId when activating then return false", async () => {
237
- // When
238
- const success = await activateSystemInstruction(
239
- new ObjectId().toHexString(),
240
- );
241
-
242
- // Then
243
- expect(success).toBe(false);
244
- });
245
- });
246
-
247
- describe("deleteSystemInstruction", () => {
248
- it("given existing id when deleted then remove document from DB", async () => {
249
- const id = await createSystemInstruction({
250
- cityName: testCity,
251
- instruction: "To be deleted",
252
- isActive: true,
253
- tool: MIS_TOOLS.findSubject,
254
- queryType: QUERY_TYPES.any,
255
- });
256
-
257
- const deleteResult = await deleteSystemInstruction(id.toString());
258
- expect(deleteResult).toBe(true);
259
-
260
- const findResult = await getSystemInstructionById(id.toString());
261
- expect(findResult).toBeNull();
262
- });
263
-
264
- it("given non-existent id when deleting then return false", async () => {
265
- // When
266
- const result = await deleteSystemInstruction(
267
- new ObjectId().toHexString(),
268
- );
269
-
270
- // Then
271
- expect(result).toBe(false);
272
- });
273
- });
274
- });
1
+ import {
2
+ createSystemInstruction,
3
+ updateSystemInstruction,
4
+ deleteSystemInstruction,
5
+ deactivateSystemInstruction,
6
+ activateSystemInstruction,
7
+ } from "../instructions.setters";
8
+ import { getSystemInstructionById } from "../instructions.getters";
9
+ import {
10
+ MIS_SystemInstruction,
11
+ MIS_TOOLS,
12
+ QUERY_TYPES,
13
+ } from "../instructions.types";
14
+ import { ObjectId } from "mongodb";
15
+
16
+ describe("System Instructions Setter Tests", () => {
17
+ const testCity = "Ashdod";
18
+
19
+ describe("createSystemInstruction", () => {
20
+ it("given valid data when created then save document with timestamps", async () => {
21
+ // Given
22
+ const instructionData: Omit<
23
+ MIS_SystemInstruction,
24
+ "_id" | "createdAt" | "updatedAt"
25
+ > = {
26
+ cityName: testCity,
27
+ instruction: "Test Instruction",
28
+ isActive: true,
29
+ tool: MIS_TOOLS.findSubject,
30
+ queryType: QUERY_TYPES.any,
31
+ tags: ["test", "unit"],
32
+ };
33
+
34
+ // When
35
+ const id = await createSystemInstruction(instructionData);
36
+
37
+ // Then
38
+ const saved = await getSystemInstructionById(id.toString());
39
+ expect(saved).toBeDefined();
40
+ expect(saved?._id).toBeDefined();
41
+ expect(saved).toMatchObject(instructionData);
42
+ expect(saved?.createdAt).toBeInstanceOf(Date);
43
+ expect(saved?.updatedAt).toBeInstanceOf(Date);
44
+ });
45
+
46
+ it("given data without tags when created then save document with default isActive true and no tags", async () => {
47
+ // Given
48
+ const instructionData: Omit<
49
+ MIS_SystemInstruction,
50
+ "_id" | "createdAt" | "updatedAt"
51
+ > = {
52
+ cityName: testCity,
53
+ instruction: "No Tags Instruction",
54
+ isActive: true,
55
+ tool: MIS_TOOLS.findStreet,
56
+ queryType: QUERY_TYPES.exactlyOne,
57
+ };
58
+
59
+ // When
60
+ const id = await createSystemInstruction(instructionData);
61
+
62
+ // Then
63
+ const saved = await getSystemInstructionById(id.toString());
64
+ expect(saved).toBeDefined();
65
+ expect(saved?.tags).toBeUndefined();
66
+ expect(saved?.isActive).toBe(true);
67
+ });
68
+
69
+ it("should throw error when creating with invalid tool", async () => {
70
+ const invalidData = {
71
+ cityName: testCity,
72
+ instruction: "Invalid Tool Test",
73
+ isActive: true,
74
+ tool: "invalidTool" as any,
75
+ queryType: QUERY_TYPES.any,
76
+ };
77
+
78
+ await expect(createSystemInstruction(invalidData)).rejects.toThrow(
79
+ `Invalid tool value: invalidTool. Allowed values are: ${Object.values(MIS_TOOLS).join(", ")}`,
80
+ );
81
+ });
82
+
83
+ it("should throw error when creating with invalid queryType", async () => {
84
+ const invalidData = {
85
+ cityName: testCity,
86
+ instruction: "Invalid QueryType Test",
87
+ isActive: true,
88
+ tool: MIS_TOOLS.findSubject,
89
+ queryType: "invalidType" as any,
90
+ };
91
+
92
+ await expect(createSystemInstruction(invalidData)).rejects.toThrow(
93
+ `Invalid queryType value: invalidType. Allowed values are: ${Object.values(QUERY_TYPES).join(", ")}`,
94
+ );
95
+ });
96
+ });
97
+
98
+ describe("updateSystemInstruction", () => {
99
+ let instructionId: string;
100
+ //Given before each test
101
+ beforeEach(async () => {
102
+ const id = await createSystemInstruction({
103
+ cityName: testCity,
104
+ instruction: "Find Me",
105
+ isActive: true,
106
+ tool: MIS_TOOLS.findSubject,
107
+ queryType: QUERY_TYPES.any,
108
+ });
109
+ instructionId = id.toString();
110
+
111
+ await createSystemInstruction({
112
+ cityName: testCity,
113
+ instruction: "Inactive One",
114
+ isActive: false,
115
+ tool: MIS_TOOLS.findSubject,
116
+ queryType: QUERY_TYPES.any,
117
+ });
118
+ });
119
+ it("given existing doc when updated then change values and refresh updatedAt", async () => {
120
+ const originalDoc = await getSystemInstructionById(
121
+ instructionId.toString(),
122
+ );
123
+
124
+ // Wait a bit to ensure timestamp difference
125
+ await new Promise((resolve) => setTimeout(resolve, 10));
126
+
127
+ // When
128
+ await updateSystemInstruction(instructionId.toString(), {
129
+ instruction: "New Text",
130
+ });
131
+
132
+ // Then
133
+ const updatedDoc = await getSystemInstructionById(
134
+ instructionId.toString(),
135
+ );
136
+ expect(updatedDoc?.instruction).toBe("New Text");
137
+ expect(updatedDoc?.updatedAt.getTime()).toBeGreaterThan(
138
+ originalDoc!.updatedAt.getTime(),
139
+ );
140
+ });
141
+
142
+ it("given multiple fields when updated then change all provided values", async () => {
143
+ // When
144
+ await updateSystemInstruction(instructionId, {
145
+ isActive: false,
146
+ tool: MIS_TOOLS.findStreet,
147
+ tags: ["new-tag"],
148
+ });
149
+
150
+ // Then
151
+ const updatedDoc = await getSystemInstructionById(instructionId);
152
+ expect(updatedDoc?.isActive).toBe(false);
153
+ expect(updatedDoc?.tool).toBe(MIS_TOOLS.findStreet);
154
+ expect(updatedDoc?.tags).toEqual(["new-tag"]);
155
+ });
156
+
157
+ it("should throw error when updating with invalid tool", async () => {
158
+ const invalidUpdate = { tool: "invalidTool" as any };
159
+
160
+ await expect(
161
+ updateSystemInstruction(instructionId, invalidUpdate),
162
+ ).rejects.toThrow(
163
+ `Invalid tool value: invalidTool. Allowed values are: ${Object.values(MIS_TOOLS).join(", ")}`,
164
+ );
165
+ });
166
+
167
+ it("should throw error when updating with invalid queryType", async () => {
168
+ const invalidUpdate = { queryType: "invalidType" as any };
169
+
170
+ await expect(
171
+ updateSystemInstruction(instructionId, invalidUpdate),
172
+ ).rejects.toThrow(
173
+ `Invalid queryType value: invalidType. Allowed values are: ${Object.values(QUERY_TYPES).join(", ")}`,
174
+ );
175
+ });
176
+
177
+ it("given system instructions, when deactivating it then its status updated to active", async () => {
178
+ //When
179
+ const success = await deactivateSystemInstruction(
180
+ instructionId.toString(),
181
+ );
182
+ const updatedDoc = await getSystemInstructionById(
183
+ instructionId.toString(),
184
+ );
185
+ //Then
186
+ expect(success).toBe(true);
187
+ expect(updatedDoc?.isActive).toBe(false);
188
+ });
189
+ it("given invalidId when deactivating it then return false", async () => {
190
+ //When
191
+ const success = await deactivateSystemInstruction(
192
+ new ObjectId().toHexString(),
193
+ );
194
+
195
+ //Then
196
+ expect(success).toBe(false);
197
+ });
198
+
199
+ it("given already inactive instruction when deactivating then still return true and remain inactive", async () => {
200
+ // Given
201
+ await deactivateSystemInstruction(instructionId);
202
+
203
+ // When
204
+ const success = await deactivateSystemInstruction(instructionId);
205
+
206
+ // Then
207
+ expect(success).toBe(true);
208
+ const doc = await getSystemInstructionById(instructionId);
209
+ expect(doc?.isActive).toBe(false);
210
+ });
211
+ });
212
+
213
+ describe("activateSystemInstruction", () => {
214
+ let instructionId: string;
215
+ beforeEach(async () => {
216
+ const id = await createSystemInstruction({
217
+ cityName: testCity,
218
+ instruction: "Inactive Instruction",
219
+ isActive: false,
220
+ tool: MIS_TOOLS.findSubject,
221
+ queryType: QUERY_TYPES.any,
222
+ });
223
+ instructionId = id.toString();
224
+ });
225
+
226
+ it("given inactive doc when activating then set isActive to true", async () => {
227
+ // When
228
+ const success = await activateSystemInstruction(instructionId);
229
+
230
+ // Then
231
+ expect(success).toBe(true);
232
+ const updatedDoc = await getSystemInstructionById(instructionId);
233
+ expect(updatedDoc?.isActive).toBe(true);
234
+ });
235
+
236
+ it("given invalidId when activating then return false", async () => {
237
+ // When
238
+ const success = await activateSystemInstruction(
239
+ new ObjectId().toHexString(),
240
+ );
241
+
242
+ // Then
243
+ expect(success).toBe(false);
244
+ });
245
+ });
246
+
247
+ describe("deleteSystemInstruction", () => {
248
+ it("given existing id when deleted then remove document from DB", async () => {
249
+ const id = await createSystemInstruction({
250
+ cityName: testCity,
251
+ instruction: "To be deleted",
252
+ isActive: true,
253
+ tool: MIS_TOOLS.findSubject,
254
+ queryType: QUERY_TYPES.any,
255
+ });
256
+
257
+ const deleteResult = await deleteSystemInstruction(id.toString());
258
+ expect(deleteResult).toBe(true);
259
+
260
+ const findResult = await getSystemInstructionById(id.toString());
261
+ expect(findResult).toBeNull();
262
+ });
263
+
264
+ it("given non-existent id when deleting then return false", async () => {
265
+ // When
266
+ const result = await deleteSystemInstruction(
267
+ new ObjectId().toHexString(),
268
+ );
269
+
270
+ // Then
271
+ expect(result).toBe(false);
272
+ });
273
+ });
274
+ });
@@ -1,7 +1,7 @@
1
- export * from "./instructions.getters";
2
- export * from "./instructions.setters";
3
- export type {
4
- MIS_SystemInstruction,
5
- MIS_Tool,
6
- QueryType,
7
- } from "./instructions.types";
1
+ export * from "./instructions.getters";
2
+ export * from "./instructions.setters";
3
+ export type {
4
+ MIS_SystemInstruction,
5
+ MIS_Tool,
6
+ QueryType,
7
+ } from "./instructions.types";