@open-mercato/core 0.4.5-develop-2e9903a57a → 0.4.5-develop-eeccf7adf4

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 (473) hide show
  1. package/package.json +2 -2
  2. package/dist/modules/auth/__integration__/TC-AUTH-001.spec.js +0 -9
  3. package/dist/modules/auth/__integration__/TC-AUTH-001.spec.js.map +0 -7
  4. package/dist/modules/auth/__integration__/TC-AUTH-002.spec.js +0 -22
  5. package/dist/modules/auth/__integration__/TC-AUTH-002.spec.js.map +0 -7
  6. package/dist/modules/auth/__integration__/TC-AUTH-003.spec.js +0 -21
  7. package/dist/modules/auth/__integration__/TC-AUTH-003.spec.js.map +0 -7
  8. package/dist/modules/auth/__integration__/TC-AUTH-004.spec.js +0 -15
  9. package/dist/modules/auth/__integration__/TC-AUTH-004.spec.js.map +0 -7
  10. package/dist/modules/auth/__integration__/TC-AUTH-005.spec.js +0 -11
  11. package/dist/modules/auth/__integration__/TC-AUTH-005.spec.js.map +0 -7
  12. package/dist/modules/auth/__integration__/TC-AUTH-006.spec.js +0 -11
  13. package/dist/modules/auth/__integration__/TC-AUTH-006.spec.js.map +0 -7
  14. package/dist/modules/auth/__integration__/TC-AUTH-007.spec.js +0 -14
  15. package/dist/modules/auth/__integration__/TC-AUTH-007.spec.js.map +0 -7
  16. package/dist/modules/auth/__integration__/TC-AUTH-008.spec.js +0 -26
  17. package/dist/modules/auth/__integration__/TC-AUTH-008.spec.js.map +0 -7
  18. package/dist/modules/auth/__integration__/TC-AUTH-009.spec.js +0 -16
  19. package/dist/modules/auth/__integration__/TC-AUTH-009.spec.js.map +0 -7
  20. package/dist/modules/auth/__integration__/TC-AUTH-010.spec.js +0 -32
  21. package/dist/modules/auth/__integration__/TC-AUTH-010.spec.js.map +0 -7
  22. package/dist/modules/auth/__integration__/TC-AUTH-011.spec.js +0 -26
  23. package/dist/modules/auth/__integration__/TC-AUTH-011.spec.js.map +0 -7
  24. package/dist/modules/auth/__integration__/TC-AUTH-012.spec.js +0 -30
  25. package/dist/modules/auth/__integration__/TC-AUTH-012.spec.js.map +0 -7
  26. package/dist/modules/auth/__integration__/TC-AUTH-013.spec.js +0 -41
  27. package/dist/modules/auth/__integration__/TC-AUTH-013.spec.js.map +0 -7
  28. package/dist/modules/auth/__integration__/TC-AUTH-014.spec.js +0 -25
  29. package/dist/modules/auth/__integration__/TC-AUTH-014.spec.js.map +0 -7
  30. package/dist/modules/auth/__integration__/TC-AUTH-015.spec.js +0 -20
  31. package/dist/modules/auth/__integration__/TC-AUTH-015.spec.js.map +0 -7
  32. package/dist/modules/auth/__integration__/TC-AUTH-016.spec.js +0 -76
  33. package/dist/modules/auth/__integration__/TC-AUTH-016.spec.js.map +0 -7
  34. package/dist/modules/catalog/__integration__/TC-CAT-001.spec.js +0 -20
  35. package/dist/modules/catalog/__integration__/TC-CAT-001.spec.js.map +0 -7
  36. package/dist/modules/catalog/__integration__/TC-CAT-002.spec.js +0 -12
  37. package/dist/modules/catalog/__integration__/TC-CAT-002.spec.js.map +0 -7
  38. package/dist/modules/catalog/__integration__/TC-CAT-003.spec.js +0 -28
  39. package/dist/modules/catalog/__integration__/TC-CAT-003.spec.js.map +0 -7
  40. package/dist/modules/catalog/__integration__/TC-CAT-004.spec.js +0 -33
  41. package/dist/modules/catalog/__integration__/TC-CAT-004.spec.js.map +0 -7
  42. package/dist/modules/catalog/__integration__/TC-CAT-005.spec.js +0 -30
  43. package/dist/modules/catalog/__integration__/TC-CAT-005.spec.js.map +0 -7
  44. package/dist/modules/catalog/__integration__/TC-CAT-006.spec.js +0 -31
  45. package/dist/modules/catalog/__integration__/TC-CAT-006.spec.js.map +0 -7
  46. package/dist/modules/catalog/__integration__/TC-CAT-007.spec.js +0 -31
  47. package/dist/modules/catalog/__integration__/TC-CAT-007.spec.js.map +0 -7
  48. package/dist/modules/catalog/__integration__/TC-CAT-008.spec.js +0 -65
  49. package/dist/modules/catalog/__integration__/TC-CAT-008.spec.js.map +0 -7
  50. package/dist/modules/catalog/__integration__/TC-CAT-009.spec.js +0 -31
  51. package/dist/modules/catalog/__integration__/TC-CAT-009.spec.js.map +0 -7
  52. package/dist/modules/catalog/__integration__/TC-CAT-010.spec.js +0 -28
  53. package/dist/modules/catalog/__integration__/TC-CAT-010.spec.js.map +0 -7
  54. package/dist/modules/catalog/__integration__/TC-CAT-011.spec.js +0 -34
  55. package/dist/modules/catalog/__integration__/TC-CAT-011.spec.js.map +0 -7
  56. package/dist/modules/catalog/__integration__/TC-CAT-012.spec.js +0 -27
  57. package/dist/modules/catalog/__integration__/TC-CAT-012.spec.js.map +0 -7
  58. package/dist/modules/core/__integration__/admin/TC-ADMIN-001.spec.js +0 -44
  59. package/dist/modules/core/__integration__/admin/TC-ADMIN-001.spec.js.map +0 -7
  60. package/dist/modules/core/__integration__/admin/TC-ADMIN-002.spec.js +0 -53
  61. package/dist/modules/core/__integration__/admin/TC-ADMIN-002.spec.js.map +0 -7
  62. package/dist/modules/core/__integration__/admin/TC-ADMIN-003.spec.js +0 -26
  63. package/dist/modules/core/__integration__/admin/TC-ADMIN-003.spec.js.map +0 -7
  64. package/dist/modules/core/__integration__/admin/TC-ADMIN-004.spec.js +0 -47
  65. package/dist/modules/core/__integration__/admin/TC-ADMIN-004.spec.js.map +0 -7
  66. package/dist/modules/core/__integration__/admin/TC-ADMIN-005.spec.js +0 -33
  67. package/dist/modules/core/__integration__/admin/TC-ADMIN-005.spec.js.map +0 -7
  68. package/dist/modules/core/__integration__/admin/TC-ADMIN-006.spec.js +0 -30
  69. package/dist/modules/core/__integration__/admin/TC-ADMIN-006.spec.js.map +0 -7
  70. package/dist/modules/core/__integration__/admin/TC-ADMIN-007.spec.js +0 -36
  71. package/dist/modules/core/__integration__/admin/TC-ADMIN-007.spec.js.map +0 -7
  72. package/dist/modules/core/__integration__/admin/TC-ADMIN-008.spec.js +0 -113
  73. package/dist/modules/core/__integration__/admin/TC-ADMIN-008.spec.js.map +0 -7
  74. package/dist/modules/core/__integration__/admin/TC-ADMIN-009.spec.js +0 -25
  75. package/dist/modules/core/__integration__/admin/TC-ADMIN-009.spec.js.map +0 -7
  76. package/dist/modules/core/__integration__/admin/TC-ADMIN-010.spec.js +0 -35
  77. package/dist/modules/core/__integration__/admin/TC-ADMIN-010.spec.js.map +0 -7
  78. package/dist/modules/core/__integration__/helpers/api.js +0 -64
  79. package/dist/modules/core/__integration__/helpers/api.js.map +0 -7
  80. package/dist/modules/core/__integration__/helpers/auth.js +0 -98
  81. package/dist/modules/core/__integration__/helpers/auth.js.map +0 -7
  82. package/dist/modules/core/__integration__/helpers/authUi.js +0 -31
  83. package/dist/modules/core/__integration__/helpers/authUi.js.map +0 -7
  84. package/dist/modules/core/__integration__/helpers/catalogFixtures.js +0 -49
  85. package/dist/modules/core/__integration__/helpers/catalogFixtures.js.map +0 -7
  86. package/dist/modules/core/__integration__/helpers/crmFixtures.js +0 -73
  87. package/dist/modules/core/__integration__/helpers/crmFixtures.js.map +0 -7
  88. package/dist/modules/core/__integration__/helpers/salesFixtures.js +0 -63
  89. package/dist/modules/core/__integration__/helpers/salesFixtures.js.map +0 -7
  90. package/dist/modules/core/__integration__/helpers/salesUi.js +0 -464
  91. package/dist/modules/core/__integration__/helpers/salesUi.js.map +0 -7
  92. package/dist/modules/core/__integration__/integration/TC-INT-001.spec.js +0 -26
  93. package/dist/modules/core/__integration__/integration/TC-INT-001.spec.js.map +0 -7
  94. package/dist/modules/core/__integration__/integration/TC-INT-002.spec.js +0 -60
  95. package/dist/modules/core/__integration__/integration/TC-INT-002.spec.js.map +0 -7
  96. package/dist/modules/core/__integration__/integration/TC-INT-003.spec.js +0 -36
  97. package/dist/modules/core/__integration__/integration/TC-INT-003.spec.js.map +0 -7
  98. package/dist/modules/core/__integration__/integration/TC-INT-004.spec.js +0 -74
  99. package/dist/modules/core/__integration__/integration/TC-INT-004.spec.js.map +0 -7
  100. package/dist/modules/core/__integration__/integration/TC-INT-005.spec.js +0 -21
  101. package/dist/modules/core/__integration__/integration/TC-INT-005.spec.js.map +0 -7
  102. package/dist/modules/customers/__integration__/TC-CRM-001.spec.js +0 -32
  103. package/dist/modules/customers/__integration__/TC-CRM-001.spec.js.map +0 -7
  104. package/dist/modules/customers/__integration__/TC-CRM-002.spec.js +0 -35
  105. package/dist/modules/customers/__integration__/TC-CRM-002.spec.js.map +0 -7
  106. package/dist/modules/customers/__integration__/TC-CRM-003.spec.js +0 -40
  107. package/dist/modules/customers/__integration__/TC-CRM-003.spec.js.map +0 -7
  108. package/dist/modules/customers/__integration__/TC-CRM-004.spec.js +0 -40
  109. package/dist/modules/customers/__integration__/TC-CRM-004.spec.js.map +0 -7
  110. package/dist/modules/customers/__integration__/TC-CRM-005.spec.js +0 -37
  111. package/dist/modules/customers/__integration__/TC-CRM-005.spec.js.map +0 -7
  112. package/dist/modules/customers/__integration__/TC-CRM-006.spec.js +0 -42
  113. package/dist/modules/customers/__integration__/TC-CRM-006.spec.js.map +0 -7
  114. package/dist/modules/customers/__integration__/TC-CRM-007.spec.js +0 -44
  115. package/dist/modules/customers/__integration__/TC-CRM-007.spec.js.map +0 -7
  116. package/dist/modules/customers/__integration__/TC-CRM-008.spec.js +0 -50
  117. package/dist/modules/customers/__integration__/TC-CRM-008.spec.js.map +0 -7
  118. package/dist/modules/customers/__integration__/TC-CRM-009.spec.js +0 -33
  119. package/dist/modules/customers/__integration__/TC-CRM-009.spec.js.map +0 -7
  120. package/dist/modules/customers/__integration__/TC-CRM-010.spec.js +0 -39
  121. package/dist/modules/customers/__integration__/TC-CRM-010.spec.js.map +0 -7
  122. package/dist/modules/customers/__integration__/TC-CRM-011.spec.js +0 -37
  123. package/dist/modules/customers/__integration__/TC-CRM-011.spec.js.map +0 -7
  124. package/dist/modules/customers/__integration__/TC-CRM-012.spec.js +0 -38
  125. package/dist/modules/customers/__integration__/TC-CRM-012.spec.js.map +0 -7
  126. package/dist/modules/customers/__integration__/TC-CRM-013.spec.js +0 -43
  127. package/dist/modules/customers/__integration__/TC-CRM-013.spec.js.map +0 -7
  128. package/dist/modules/customers/__integration__/TC-CRM-014.spec.js +0 -23
  129. package/dist/modules/customers/__integration__/TC-CRM-014.spec.js.map +0 -7
  130. package/dist/modules/customers/__integration__/TC-CRM-015.spec.js +0 -63
  131. package/dist/modules/customers/__integration__/TC-CRM-015.spec.js.map +0 -7
  132. package/dist/modules/customers/__integration__/TC-CRM-016.spec.js +0 -46
  133. package/dist/modules/customers/__integration__/TC-CRM-016.spec.js.map +0 -7
  134. package/dist/modules/customers/__integration__/TC-CRM-017.spec.js +0 -29
  135. package/dist/modules/customers/__integration__/TC-CRM-017.spec.js.map +0 -7
  136. package/dist/modules/customers/__integration__/TC-CRM-018.spec.js +0 -52
  137. package/dist/modules/customers/__integration__/TC-CRM-018.spec.js.map +0 -7
  138. package/dist/modules/customers/__integration__/TC-CRM-019.spec.js +0 -37
  139. package/dist/modules/customers/__integration__/TC-CRM-019.spec.js.map +0 -7
  140. package/dist/modules/customers/__integration__/TC-CRM-020.spec.js +0 -65
  141. package/dist/modules/customers/__integration__/TC-CRM-020.spec.js.map +0 -7
  142. package/dist/modules/progress/__integration__/TC-PROG-001.spec.js +0 -51
  143. package/dist/modules/progress/__integration__/TC-PROG-001.spec.js.map +0 -7
  144. package/dist/modules/resources/__integration__/TC-INT-007.spec.js +0 -88
  145. package/dist/modules/resources/__integration__/TC-INT-007.spec.js.map +0 -7
  146. package/dist/modules/resources/__integration__/helpers/resourcesFixtures.js +0 -45
  147. package/dist/modules/resources/__integration__/helpers/resourcesFixtures.js.map +0 -7
  148. package/dist/modules/sales/__integration__/TC-SALES-001.spec.js +0 -20
  149. package/dist/modules/sales/__integration__/TC-SALES-001.spec.js.map +0 -7
  150. package/dist/modules/sales/__integration__/TC-SALES-002.spec.js +0 -31
  151. package/dist/modules/sales/__integration__/TC-SALES-002.spec.js.map +0 -7
  152. package/dist/modules/sales/__integration__/TC-SALES-003.spec.js +0 -13
  153. package/dist/modules/sales/__integration__/TC-SALES-003.spec.js.map +0 -7
  154. package/dist/modules/sales/__integration__/TC-SALES-004.spec.js +0 -14
  155. package/dist/modules/sales/__integration__/TC-SALES-004.spec.js.map +0 -7
  156. package/dist/modules/sales/__integration__/TC-SALES-005.spec.js +0 -15
  157. package/dist/modules/sales/__integration__/TC-SALES-005.spec.js.map +0 -7
  158. package/dist/modules/sales/__integration__/TC-SALES-006.spec.js +0 -20
  159. package/dist/modules/sales/__integration__/TC-SALES-006.spec.js.map +0 -7
  160. package/dist/modules/sales/__integration__/TC-SALES-007.spec.js +0 -19
  161. package/dist/modules/sales/__integration__/TC-SALES-007.spec.js.map +0 -7
  162. package/dist/modules/sales/__integration__/TC-SALES-008.spec.js +0 -7
  163. package/dist/modules/sales/__integration__/TC-SALES-008.spec.js.map +0 -7
  164. package/dist/modules/sales/__integration__/TC-SALES-009.spec.js +0 -7
  165. package/dist/modules/sales/__integration__/TC-SALES-009.spec.js.map +0 -7
  166. package/dist/modules/sales/__integration__/TC-SALES-010.spec.js +0 -16
  167. package/dist/modules/sales/__integration__/TC-SALES-010.spec.js.map +0 -7
  168. package/dist/modules/sales/__integration__/TC-SALES-011.spec.js +0 -20
  169. package/dist/modules/sales/__integration__/TC-SALES-011.spec.js.map +0 -7
  170. package/dist/modules/sales/__integration__/TC-SALES-012.spec.js +0 -7
  171. package/dist/modules/sales/__integration__/TC-SALES-012.spec.js.map +0 -7
  172. package/dist/modules/sales/__integration__/TC-SALES-013.spec.js +0 -66
  173. package/dist/modules/sales/__integration__/TC-SALES-013.spec.js.map +0 -7
  174. package/dist/modules/sales/__integration__/TC-SALES-014.spec.js +0 -13
  175. package/dist/modules/sales/__integration__/TC-SALES-014.spec.js.map +0 -7
  176. package/dist/modules/sales/__integration__/TC-SALES-015.spec.js +0 -13
  177. package/dist/modules/sales/__integration__/TC-SALES-015.spec.js.map +0 -7
  178. package/dist/modules/sales/__integration__/TC-SALES-016.spec.js +0 -13
  179. package/dist/modules/sales/__integration__/TC-SALES-016.spec.js.map +0 -7
  180. package/dist/modules/sales/__integration__/TC-SALES-017.spec.js +0 -44
  181. package/dist/modules/sales/__integration__/TC-SALES-017.spec.js.map +0 -7
  182. package/dist/modules/sales/__integration__/TC-SALES-018.spec.js +0 -18
  183. package/dist/modules/sales/__integration__/TC-SALES-018.spec.js.map +0 -7
  184. package/dist/modules/sales/__integration__/TC-SALES-019.spec.js +0 -16
  185. package/dist/modules/sales/__integration__/TC-SALES-019.spec.js.map +0 -7
  186. package/dist/modules/sales/__integration__/TC-SALES-020.spec.js +0 -75
  187. package/dist/modules/sales/__integration__/TC-SALES-020.spec.js.map +0 -7
  188. package/dist/modules/staff/__integration__/TC-INT-006.spec.js +0 -64
  189. package/dist/modules/staff/__integration__/TC-INT-006.spec.js.map +0 -7
  190. package/dist/modules/translations/__integration__/TC-TRANS-001.spec.js +0 -48
  191. package/dist/modules/translations/__integration__/TC-TRANS-001.spec.js.map +0 -7
  192. package/dist/modules/translations/__integration__/TC-TRANS-002.spec.js +0 -94
  193. package/dist/modules/translations/__integration__/TC-TRANS-002.spec.js.map +0 -7
  194. package/dist/modules/translations/__integration__/TC-TRANS-003.spec.js +0 -61
  195. package/dist/modules/translations/__integration__/TC-TRANS-003.spec.js.map +0 -7
  196. package/dist/modules/translations/__integration__/TC-TRANS-004.spec.js +0 -52
  197. package/dist/modules/translations/__integration__/TC-TRANS-004.spec.js.map +0 -7
  198. package/dist/modules/translations/__integration__/TC-TRANS-005.spec.js +0 -106
  199. package/dist/modules/translations/__integration__/TC-TRANS-005.spec.js.map +0 -7
  200. package/dist/modules/translations/__integration__/TC-TRANS-006.spec.js +0 -94
  201. package/dist/modules/translations/__integration__/TC-TRANS-006.spec.js.map +0 -7
  202. package/dist/modules/translations/__integration__/TC-TRANS-007.spec.js +0 -62
  203. package/dist/modules/translations/__integration__/TC-TRANS-007.spec.js.map +0 -7
  204. package/dist/modules/translations/__integration__/TC-TRANS-008.spec.js +0 -168
  205. package/dist/modules/translations/__integration__/TC-TRANS-008.spec.js.map +0 -7
  206. package/dist/modules/translations/__integration__/helpers/translationFixtures.js +0 -63
  207. package/dist/modules/translations/__integration__/helpers/translationFixtures.js.map +0 -7
  208. package/dist/modules/workflows/__integration__/TC-WF-001.spec.js +0 -73
  209. package/dist/modules/workflows/__integration__/TC-WF-001.spec.js.map +0 -7
  210. package/src/__tests__/module-decoupling.test.ts +0 -356
  211. package/src/modules/api_keys/api/__tests__/keys.route.test.ts +0 -244
  212. package/src/modules/attachments/api/__tests__/attachments.api.test.ts +0 -240
  213. package/src/modules/attachments/components/__tests__/AttachmentContentPreview.test.tsx +0 -45
  214. package/src/modules/attachments/data/__tests__/entities-ocr.test.ts +0 -15
  215. package/src/modules/attachments/lib/__tests__/ocr-config.test.ts +0 -27
  216. package/src/modules/attachments/lib/__tests__/textExtraction.test.ts +0 -64
  217. package/src/modules/audit_logs/api/__tests__/access.route.test.ts +0 -118
  218. package/src/modules/audit_logs/api/__tests__/redo.route.test.ts +0 -131
  219. package/src/modules/audit_logs/api/__tests__/undo.route.test.ts +0 -103
  220. package/src/modules/audit_logs/services/__tests__/actionLogService.test.ts +0 -26
  221. package/src/modules/auth/__integration__/TC-AUTH-001.spec.ts +0 -13
  222. package/src/modules/auth/__integration__/TC-AUTH-002.spec.ts +0 -30
  223. package/src/modules/auth/__integration__/TC-AUTH-003.spec.ts +0 -28
  224. package/src/modules/auth/__integration__/TC-AUTH-004.spec.ts +0 -21
  225. package/src/modules/auth/__integration__/TC-AUTH-005.spec.ts +0 -17
  226. package/src/modules/auth/__integration__/TC-AUTH-006.spec.ts +0 -17
  227. package/src/modules/auth/__integration__/TC-AUTH-007.spec.ts +0 -19
  228. package/src/modules/auth/__integration__/TC-AUTH-008.spec.ts +0 -31
  229. package/src/modules/auth/__integration__/TC-AUTH-009.spec.ts +0 -22
  230. package/src/modules/auth/__integration__/TC-AUTH-010.spec.ts +0 -39
  231. package/src/modules/auth/__integration__/TC-AUTH-011.spec.ts +0 -35
  232. package/src/modules/auth/__integration__/TC-AUTH-012.spec.ts +0 -36
  233. package/src/modules/auth/__integration__/TC-AUTH-013.spec.ts +0 -48
  234. package/src/modules/auth/__integration__/TC-AUTH-014.spec.ts +0 -31
  235. package/src/modules/auth/__integration__/TC-AUTH-015.spec.ts +0 -28
  236. package/src/modules/auth/__integration__/TC-AUTH-016.spec.ts +0 -109
  237. package/src/modules/auth/__tests__/cli-rotate-encryption.test.ts +0 -97
  238. package/src/modules/auth/__tests__/cli-setup-acl.test.ts +0 -148
  239. package/src/modules/auth/api/__tests__/feature-check.test.ts +0 -65
  240. package/src/modules/auth/api/__tests__/login.test.ts +0 -47
  241. package/src/modules/auth/commands/__tests__/roles.custom-fields.test.ts +0 -126
  242. package/src/modules/auth/commands/__tests__/users.custom-fields.test.ts +0 -147
  243. package/src/modules/auth/lib/__tests__/rateLimitCheck.test.ts +0 -224
  244. package/src/modules/auth/services/__tests__/authService.test.ts +0 -32
  245. package/src/modules/auth/services/__tests__/rbacService.test.ts +0 -814
  246. package/src/modules/business_rules/api/__tests__/execute.route.test.ts +0 -311
  247. package/src/modules/business_rules/api/__tests__/logs-detail.route.test.ts +0 -181
  248. package/src/modules/business_rules/api/__tests__/logs.route.test.ts +0 -261
  249. package/src/modules/business_rules/api/__tests__/rules-detail.route.test.ts +0 -115
  250. package/src/modules/business_rules/api/__tests__/rules.route.test.ts +0 -746
  251. package/src/modules/business_rules/api/__tests__/sets-detail.route.test.ts +0 -169
  252. package/src/modules/business_rules/api/__tests__/sets-members.route.test.ts +0 -367
  253. package/src/modules/business_rules/api/__tests__/sets.route.test.ts +0 -361
  254. package/src/modules/business_rules/api/__tests__/test-helpers.ts +0 -42
  255. package/src/modules/business_rules/components/utils/__tests__/formHelpers.test.ts +0 -69
  256. package/src/modules/business_rules/data/__tests__/validators.test.ts +0 -637
  257. package/src/modules/business_rules/lib/__tests__/action-executor.test.ts +0 -728
  258. package/src/modules/business_rules/lib/__tests__/expression-evaluator.test.ts +0 -592
  259. package/src/modules/business_rules/lib/__tests__/rule-engine.test.ts +0 -805
  260. package/src/modules/business_rules/lib/__tests__/rule-evaluator.test.ts +0 -436
  261. package/src/modules/catalog/__integration__/TC-CAT-001.spec.ts +0 -32
  262. package/src/modules/catalog/__integration__/TC-CAT-002.spec.ts +0 -19
  263. package/src/modules/catalog/__integration__/TC-CAT-003.spec.ts +0 -39
  264. package/src/modules/catalog/__integration__/TC-CAT-004.spec.ts +0 -41
  265. package/src/modules/catalog/__integration__/TC-CAT-005.spec.ts +0 -37
  266. package/src/modules/catalog/__integration__/TC-CAT-006.spec.ts +0 -40
  267. package/src/modules/catalog/__integration__/TC-CAT-007.spec.ts +0 -37
  268. package/src/modules/catalog/__integration__/TC-CAT-008.spec.ts +0 -76
  269. package/src/modules/catalog/__integration__/TC-CAT-009.spec.ts +0 -39
  270. package/src/modules/catalog/__integration__/TC-CAT-010.spec.ts +0 -36
  271. package/src/modules/catalog/__integration__/TC-CAT-011.spec.ts +0 -44
  272. package/src/modules/catalog/__integration__/TC-CAT-012.spec.ts +0 -35
  273. package/src/modules/catalog/api/__tests__/offers.route.test.ts +0 -161
  274. package/src/modules/catalog/api/__tests__/prices.route.test.ts +0 -39
  275. package/src/modules/catalog/api/__tests__/products.route.test.ts +0 -91
  276. package/src/modules/catalog/api/__tests__/utils.test.ts +0 -36
  277. package/src/modules/catalog/api/__tests__/variants.route.test.ts +0 -44
  278. package/src/modules/catalog/backend/catalog/products/__tests__/ProductsDataTable.test.tsx +0 -172
  279. package/src/modules/catalog/commands/__tests__/products.delete.test.ts +0 -146
  280. package/src/modules/catalog/commands/__tests__/products.update.test.ts +0 -142
  281. package/src/modules/catalog/commands/__tests__/registration.test.ts +0 -54
  282. package/src/modules/catalog/commands/__tests__/shared.test.ts +0 -129
  283. package/src/modules/catalog/components/__tests__/catalogComponentsRender.test.tsx +0 -373
  284. package/src/modules/catalog/components/products/__tests__/ProductImageCell.test.tsx +0 -51
  285. package/src/modules/catalog/components/products/__tests__/productForm.test.ts +0 -32
  286. package/src/modules/catalog/lib/__tests__/pricing.test.ts +0 -150
  287. package/src/modules/catalog/services/__tests__/catalogPricingService.test.ts +0 -21
  288. package/src/modules/configs/components/__tests__/CachePanel.test.tsx +0 -134
  289. package/src/modules/configs/components/__tests__/SystemStatusPanel.test.tsx +0 -93
  290. package/src/modules/configs/lib/__tests__/system-status.test.ts +0 -55
  291. package/src/modules/configs/lib/__tests__/upgrade-actions.test.ts +0 -135
  292. package/src/modules/core/__integration__/admin/TC-ADMIN-001.spec.ts +0 -70
  293. package/src/modules/core/__integration__/admin/TC-ADMIN-002.spec.ts +0 -83
  294. package/src/modules/core/__integration__/admin/TC-ADMIN-003.spec.ts +0 -50
  295. package/src/modules/core/__integration__/admin/TC-ADMIN-004.spec.ts +0 -77
  296. package/src/modules/core/__integration__/admin/TC-ADMIN-005.spec.ts +0 -49
  297. package/src/modules/core/__integration__/admin/TC-ADMIN-006.spec.ts +0 -59
  298. package/src/modules/core/__integration__/admin/TC-ADMIN-007.spec.ts +0 -68
  299. package/src/modules/core/__integration__/admin/TC-ADMIN-008.spec.ts +0 -127
  300. package/src/modules/core/__integration__/admin/TC-ADMIN-009.spec.ts +0 -48
  301. package/src/modules/core/__integration__/admin/TC-ADMIN-010.spec.ts +0 -57
  302. package/src/modules/core/__integration__/helpers/api.ts +0 -84
  303. package/src/modules/core/__integration__/helpers/auth.ts +0 -110
  304. package/src/modules/core/__integration__/helpers/authUi.ts +0 -33
  305. package/src/modules/core/__integration__/helpers/catalogFixtures.ts +0 -73
  306. package/src/modules/core/__integration__/helpers/crmFixtures.ts +0 -101
  307. package/src/modules/core/__integration__/helpers/salesFixtures.ts +0 -89
  308. package/src/modules/core/__integration__/helpers/salesUi.ts +0 -528
  309. package/src/modules/core/__integration__/integration/TC-INT-001.spec.ts +0 -34
  310. package/src/modules/core/__integration__/integration/TC-INT-002.spec.ts +0 -74
  311. package/src/modules/core/__integration__/integration/TC-INT-003.spec.ts +0 -43
  312. package/src/modules/core/__integration__/integration/TC-INT-004.spec.ts +0 -82
  313. package/src/modules/core/__integration__/integration/TC-INT-005.spec.ts +0 -29
  314. package/src/modules/currencies/backend/exchange-rates/__tests__/formatDateTimeLocal.test.ts +0 -78
  315. package/src/modules/currencies/data/__tests__/validators.test.ts +0 -100
  316. package/src/modules/currencies/services/__tests__/exchangeRateService.test.ts +0 -666
  317. package/src/modules/currencies/services/__tests__/rateFetchingService.basic.test.ts +0 -398
  318. package/src/modules/currencies/services/__tests__/rateFetchingService.errors.test.ts +0 -296
  319. package/src/modules/currencies/services/__tests__/rateFetchingService.providers.test.ts +0 -350
  320. package/src/modules/currencies/services/__tests__/rateFetchingService.setup.ts +0 -188
  321. package/src/modules/customers/__integration__/TC-CRM-001.spec.ts +0 -42
  322. package/src/modules/customers/__integration__/TC-CRM-002.spec.ts +0 -47
  323. package/src/modules/customers/__integration__/TC-CRM-003.spec.ts +0 -55
  324. package/src/modules/customers/__integration__/TC-CRM-004.spec.ts +0 -57
  325. package/src/modules/customers/__integration__/TC-CRM-005.spec.ts +0 -50
  326. package/src/modules/customers/__integration__/TC-CRM-006.spec.ts +0 -60
  327. package/src/modules/customers/__integration__/TC-CRM-007.spec.ts +0 -57
  328. package/src/modules/customers/__integration__/TC-CRM-008.spec.ts +0 -62
  329. package/src/modules/customers/__integration__/TC-CRM-009.spec.ts +0 -46
  330. package/src/modules/customers/__integration__/TC-CRM-010.spec.ts +0 -49
  331. package/src/modules/customers/__integration__/TC-CRM-011.spec.ts +0 -47
  332. package/src/modules/customers/__integration__/TC-CRM-012.spec.ts +0 -49
  333. package/src/modules/customers/__integration__/TC-CRM-013.spec.ts +0 -61
  334. package/src/modules/customers/__integration__/TC-CRM-014.spec.ts +0 -31
  335. package/src/modules/customers/__integration__/TC-CRM-015.spec.ts +0 -89
  336. package/src/modules/customers/__integration__/TC-CRM-016.spec.ts +0 -55
  337. package/src/modules/customers/__integration__/TC-CRM-017.spec.ts +0 -37
  338. package/src/modules/customers/__integration__/TC-CRM-018.spec.ts +0 -62
  339. package/src/modules/customers/__integration__/TC-CRM-019.spec.ts +0 -44
  340. package/src/modules/customers/__integration__/TC-CRM-020.spec.ts +0 -73
  341. package/src/modules/customers/api/__tests__/utils.test.ts +0 -61
  342. package/src/modules/customers/api/dashboard/widgets/new-deals/__tests__/route.test.ts +0 -54
  343. package/src/modules/customers/commands/__tests__/shared.test.ts +0 -263
  344. package/src/modules/customers/commands/__tests__/undo.custom-fields.test.ts +0 -1184
  345. package/src/modules/customers/components/detail/__tests__/ActivityForm.validation.test.ts +0 -37
  346. package/src/modules/customers/components/detail/__tests__/DealForm.validation.test.ts +0 -45
  347. package/src/modules/customers/components/detail/__tests__/InlineEditors.test.tsx +0 -166
  348. package/src/modules/customers/components/detail/__tests__/TaskForm.submit.test.ts +0 -21
  349. package/src/modules/customers/components/detail/hooks/__tests__/useCustomerDictionary.test.ts +0 -97
  350. package/src/modules/customers/lib/__tests__/customFieldRouting.test.ts +0 -107
  351. package/src/modules/customers/utils/__tests__/addressFormat.test.ts +0 -105
  352. package/src/modules/customers/utils/__tests__/phoneDuplicates.test.ts +0 -98
  353. package/src/modules/dashboards/__tests__/widgets.test.ts +0 -70
  354. package/src/modules/dashboards/lib/__tests__/aggregations.test.ts +0 -328
  355. package/src/modules/dashboards/lib/__tests__/formatters.test.ts +0 -128
  356. package/src/modules/directory/backend/directory/organizations/__tests__/create-submit.test.ts +0 -46
  357. package/src/modules/directory/backend/directory/organizations/__tests__/edit-submit.test.ts +0 -49
  358. package/src/modules/directory/components/__tests__/OrganizationSelect.test.tsx +0 -71
  359. package/src/modules/directory/components/__tests__/TenantSelect.test.tsx +0 -75
  360. package/src/modules/entities/__tests__/cli-decrypt-database.test.ts +0 -534
  361. package/src/modules/entities/__tests__/cli-rotate-encryption.test.ts +0 -123
  362. package/src/modules/entities/api/__tests__/encryption.api.test.ts +0 -57
  363. package/src/modules/entities/api/__tests__/records.get.custom-entity.test.ts +0 -43
  364. package/src/modules/entities/api/__tests__/records.validation.test.ts +0 -53
  365. package/src/modules/entities/backend/entities/user/__tests__/create-entity-submit.test.ts +0 -47
  366. package/src/modules/entities/backend/entities/user/__tests__/records-submit.test.ts +0 -104
  367. package/src/modules/feature_toggles/commands/__tests__/global.test.ts +0 -325
  368. package/src/modules/feature_toggles/commands/__tests__/overrides.test.ts +0 -186
  369. package/src/modules/feature_toggles/lib/__tests__/feature-flag-check.test.ts +0 -365
  370. package/src/modules/feature_toggles/lib/__tests__/queries.test.ts +0 -130
  371. package/src/modules/inbox_ops/api/emails/[id]/reprocess/__tests__/route.test.ts +0 -194
  372. package/src/modules/inbox_ops/api/proposals/[id]/__tests__/route.test.ts +0 -124
  373. package/src/modules/inbox_ops/api/proposals/[id]/accept-all/__tests__/route.test.ts +0 -154
  374. package/src/modules/inbox_ops/api/proposals/[id]/actions/[actionId]/__tests__/route.test.ts +0 -200
  375. package/src/modules/inbox_ops/api/proposals/[id]/actions/[actionId]/accept/__tests__/route.test.ts +0 -261
  376. package/src/modules/inbox_ops/api/proposals/[id]/actions/[actionId]/reject/__tests__/route.test.ts +0 -201
  377. package/src/modules/inbox_ops/api/proposals/[id]/reject/__tests__/route.test.ts +0 -123
  378. package/src/modules/inbox_ops/api/proposals/[id]/replies/[replyId]/send/__tests__/route.test.ts +0 -232
  379. package/src/modules/inbox_ops/api/proposals/[id]/translate/__tests__/route.test.ts +0 -173
  380. package/src/modules/inbox_ops/api/proposals/__tests__/route.test.ts +0 -185
  381. package/src/modules/inbox_ops/api/webhook/__tests__/inbound.test.ts +0 -317
  382. package/src/modules/inbox_ops/data/__tests__/validators.test.ts +0 -463
  383. package/src/modules/inbox_ops/lib/__tests__/catalogLookup.test.ts +0 -143
  384. package/src/modules/inbox_ops/lib/__tests__/contactMatcher.test.ts +0 -158
  385. package/src/modules/inbox_ops/lib/__tests__/emailParser.test.ts +0 -191
  386. package/src/modules/inbox_ops/lib/__tests__/executionEngine.test.ts +0 -1419
  387. package/src/modules/inbox_ops/lib/__tests__/extractionPrompt.test.ts +0 -151
  388. package/src/modules/inbox_ops/lib/__tests__/priceValidator.test.ts +0 -259
  389. package/src/modules/inbox_ops/lib/__tests__/translationProvider.test.ts +0 -99
  390. package/src/modules/inbox_ops/subscribers/__tests__/extractionWorker.test.ts +0 -803
  391. package/src/modules/notifications/__tests__/deliver-notification.test.ts +0 -285
  392. package/src/modules/notifications/__tests__/deliveryStrategies.test.ts +0 -19
  393. package/src/modules/notifications/__tests__/notificationService.test.ts +0 -248
  394. package/src/modules/planner/__tests__/availabilityMerge.test.ts +0 -99
  395. package/src/modules/planner/__tests__/plannerAvailabilityService.test.ts +0 -89
  396. package/src/modules/planner/data/__tests__/validators.test.ts +0 -78
  397. package/src/modules/progress/__integration__/TC-PROG-001.spec.ts +0 -67
  398. package/src/modules/progress/__tests__/progressService.test.ts +0 -377
  399. package/src/modules/query_index/__tests__/hybrid-engine.test.ts +0 -365
  400. package/src/modules/query_index/__tests__/indexer.test.ts +0 -175
  401. package/src/modules/resources/__integration__/TC-INT-007.spec.ts +0 -110
  402. package/src/modules/resources/__integration__/helpers/resourcesFixtures.ts +0 -50
  403. package/src/modules/resources/data/__tests__/validators.test.ts +0 -65
  404. package/src/modules/sales/__integration__/TC-SALES-001.spec.ts +0 -26
  405. package/src/modules/sales/__integration__/TC-SALES-002.spec.ts +0 -38
  406. package/src/modules/sales/__integration__/TC-SALES-003.spec.ts +0 -18
  407. package/src/modules/sales/__integration__/TC-SALES-004.spec.ts +0 -19
  408. package/src/modules/sales/__integration__/TC-SALES-005.spec.ts +0 -21
  409. package/src/modules/sales/__integration__/TC-SALES-006.spec.ts +0 -26
  410. package/src/modules/sales/__integration__/TC-SALES-007.spec.ts +0 -23
  411. package/src/modules/sales/__integration__/TC-SALES-008.spec.ts +0 -11
  412. package/src/modules/sales/__integration__/TC-SALES-009.spec.ts +0 -12
  413. package/src/modules/sales/__integration__/TC-SALES-010.spec.ts +0 -20
  414. package/src/modules/sales/__integration__/TC-SALES-011.spec.ts +0 -26
  415. package/src/modules/sales/__integration__/TC-SALES-012.spec.ts +0 -12
  416. package/src/modules/sales/__integration__/TC-SALES-013.spec.ts +0 -73
  417. package/src/modules/sales/__integration__/TC-SALES-014.spec.ts +0 -17
  418. package/src/modules/sales/__integration__/TC-SALES-015.spec.ts +0 -17
  419. package/src/modules/sales/__integration__/TC-SALES-016.spec.ts +0 -17
  420. package/src/modules/sales/__integration__/TC-SALES-017.spec.ts +0 -60
  421. package/src/modules/sales/__integration__/TC-SALES-018.spec.ts +0 -25
  422. package/src/modules/sales/__integration__/TC-SALES-019.spec.ts +0 -22
  423. package/src/modules/sales/__integration__/TC-SALES-020.spec.ts +0 -107
  424. package/src/modules/sales/api/__tests__/channels.route.test.ts +0 -50
  425. package/src/modules/sales/api/__tests__/document-history.test.ts +0 -146
  426. package/src/modules/sales/api/__tests__/documents.factory.test.ts +0 -98
  427. package/src/modules/sales/api/__tests__/documents.routes.test.ts +0 -149
  428. package/src/modules/sales/api/__tests__/quotes.acceptance.test.ts +0 -209
  429. package/src/modules/sales/api/__tests__/timeline.test.tsx +0 -165
  430. package/src/modules/sales/api/dashboard/widgets/new-orders/__tests__/route.test.ts +0 -112
  431. package/src/modules/sales/api/dashboard/widgets/new-quotes/__tests__/route.test.ts +0 -116
  432. package/src/modules/sales/commands/__tests__/documents.cache.test.ts +0 -126
  433. package/src/modules/sales/commands/__tests__/documents.undo.test.ts +0 -170
  434. package/src/modules/sales/commands/__tests__/registration.test.ts +0 -141
  435. package/src/modules/sales/components/__tests__/salesComponentsRender.test.tsx +0 -456
  436. package/src/modules/sales/lib/__tests__/calculations.test.ts +0 -210
  437. package/src/modules/sales/services/__tests__/salesCalculationService.test.ts +0 -181
  438. package/src/modules/sales/services/__tests__/taxCalculationService.test.ts +0 -79
  439. package/src/modules/sales/widgets/dashboard/new-orders/__tests__/config.test.ts +0 -47
  440. package/src/modules/sales/widgets/dashboard/new-quotes/__tests__/config.test.ts +0 -47
  441. package/src/modules/staff/__integration__/TC-INT-006.spec.ts +0 -71
  442. package/src/modules/staff/data/__tests__/validators.test.ts +0 -60
  443. package/src/modules/translations/__integration__/TC-TRANS-001.spec.ts +0 -57
  444. package/src/modules/translations/__integration__/TC-TRANS-002.spec.ts +0 -114
  445. package/src/modules/translations/__integration__/TC-TRANS-003.spec.ts +0 -71
  446. package/src/modules/translations/__integration__/TC-TRANS-004.spec.ts +0 -66
  447. package/src/modules/translations/__integration__/TC-TRANS-005.spec.ts +0 -135
  448. package/src/modules/translations/__integration__/TC-TRANS-006.spec.ts +0 -113
  449. package/src/modules/translations/__integration__/TC-TRANS-007.spec.ts +0 -80
  450. package/src/modules/translations/__integration__/TC-TRANS-008.spec.ts +0 -209
  451. package/src/modules/translations/__integration__/helpers/translationFixtures.ts +0 -95
  452. package/src/modules/translations/api/__tests__/locales.test.ts +0 -67
  453. package/src/modules/translations/data/__tests__/validators.test.ts +0 -143
  454. package/src/modules/translations/lib/__tests__/extract-record-id.test.ts +0 -75
  455. package/src/modules/translations/lib/__tests__/helpers.test.ts +0 -215
  456. package/src/modules/translations/lib/__tests__/locale.test.ts +0 -115
  457. package/src/modules/translations/lib/__tests__/resolve-field-list.test.ts +0 -176
  458. package/src/modules/translations/lib/__tests__/translatable-fields.test.ts +0 -79
  459. package/src/modules/translations/widgets/__tests__/injection-table.test.ts +0 -83
  460. package/src/modules/workflows/__integration__/TC-WF-001.spec.ts +0 -114
  461. package/src/modules/workflows/api/__tests__/definitions.route.test.ts +0 -762
  462. package/src/modules/workflows/api/__tests__/instances.route.test.ts +0 -869
  463. package/src/modules/workflows/data/__tests__/validators.test.ts +0 -707
  464. package/src/modules/workflows/lib/__tests__/activity-executor.test.ts +0 -1230
  465. package/src/modules/workflows/lib/__tests__/call-api.test.ts +0 -421
  466. package/src/modules/workflows/lib/__tests__/compensation.test.ts +0 -713
  467. package/src/modules/workflows/lib/__tests__/event-logger.test.ts +0 -615
  468. package/src/modules/workflows/lib/__tests__/integration.test.ts +0 -693
  469. package/src/modules/workflows/lib/__tests__/signals.test.ts +0 -566
  470. package/src/modules/workflows/lib/__tests__/step-handler.test.ts +0 -670
  471. package/src/modules/workflows/lib/__tests__/sub-workflow.test.ts +0 -934
  472. package/src/modules/workflows/lib/__tests__/transition-handler.test.ts +0 -925
  473. package/src/modules/workflows/lib/__tests__/workflow-executor.test.ts +0 -684
@@ -1,350 +0,0 @@
1
- import { describe, it, expect, jest, beforeEach } from '@jest/globals'
2
- import { RateFetchingService } from '../rateFetchingService'
3
- import {
4
- createMockEntityManager,
5
- createMockProvider,
6
- createTestCurrency,
7
- createTestRate,
8
- TEST_SCOPE,
9
- TEST_DATE,
10
- } from './rateFetchingService.setup'
11
-
12
- describe('RateFetchingService - Provider Management', () => {
13
- let service: RateFetchingService
14
-
15
- beforeEach(() => {
16
- jest.clearAllMocks()
17
- })
18
-
19
- describe('provider selection', () => {
20
- it('uses all registered providers by default', async () => {
21
- // Setup
22
- const currencies = [
23
- createTestCurrency({ code: 'USD' }),
24
- createTestCurrency({ code: 'EUR' }),
25
- ]
26
-
27
- const { em } = createMockEntityManager({ currencies })
28
- service = new RateFetchingService(em)
29
-
30
- const provider1 = createMockProvider({
31
- source: 'PROVIDER1',
32
- rates: [createTestRate({ fromCurrencyCode: 'USD', toCurrencyCode: 'EUR' })],
33
- })
34
-
35
- const provider2 = createMockProvider({
36
- source: 'PROVIDER2',
37
- rates: [createTestRate({ fromCurrencyCode: 'EUR', toCurrencyCode: 'USD' })],
38
- })
39
-
40
- service.registerProvider(provider1)
41
- service.registerProvider(provider2)
42
-
43
- // Execute - no providers specified in options
44
- const result = await service.fetchRatesForDate(TEST_DATE, TEST_SCOPE)
45
-
46
- // Assert - both providers should be called
47
- expect(provider1.fetchRates).toHaveBeenCalled()
48
- expect(provider2.fetchRates).toHaveBeenCalled()
49
- expect(result.totalFetched).toBe(2)
50
- })
51
-
52
- it('uses only specified providers when options.providers is set', async () => {
53
- // Setup
54
- const currencies = [
55
- createTestCurrency({ code: 'USD' }),
56
- createTestCurrency({ code: 'EUR' }),
57
- ]
58
-
59
- const { em } = createMockEntityManager({ currencies })
60
- service = new RateFetchingService(em)
61
-
62
- const provider1 = createMockProvider({
63
- source: 'PROVIDER1',
64
- rates: [createTestRate({ fromCurrencyCode: 'USD', toCurrencyCode: 'EUR' })],
65
- })
66
-
67
- const provider2 = createMockProvider({
68
- source: 'PROVIDER2',
69
- rates: [createTestRate({ fromCurrencyCode: 'EUR', toCurrencyCode: 'USD' })],
70
- })
71
-
72
- service.registerProvider(provider1)
73
- service.registerProvider(provider2)
74
-
75
- // Execute - only request PROVIDER1
76
- const result = await service.fetchRatesForDate(TEST_DATE, TEST_SCOPE, {
77
- providers: ['PROVIDER1'],
78
- })
79
-
80
- // Assert - only PROVIDER1 should be called
81
- expect(provider1.fetchRates).toHaveBeenCalled()
82
- expect(provider2.fetchRates).not.toHaveBeenCalled()
83
- expect(result.totalFetched).toBe(1)
84
- expect(result.byProvider['PROVIDER1']).toBeDefined()
85
- expect(result.byProvider['PROVIDER2']).toBeUndefined()
86
- })
87
-
88
- it('handles unknown provider names gracefully', async () => {
89
- // Setup
90
- const currencies = [createTestCurrency({ code: 'USD' })]
91
- const { em } = createMockEntityManager({ currencies })
92
- service = new RateFetchingService(em)
93
-
94
- const provider = createMockProvider({
95
- source: 'KNOWN',
96
- rates: [],
97
- })
98
-
99
- service.registerProvider(provider)
100
-
101
- // Execute - request an unknown provider
102
- const result = await service.fetchRatesForDate(TEST_DATE, TEST_SCOPE, {
103
- providers: ['UNKNOWN'],
104
- })
105
-
106
- // Assert
107
- expect(result.errors).toContain('Unknown provider: UNKNOWN')
108
- expect(result.totalFetched).toBe(0)
109
- expect(provider.fetchRates).not.toHaveBeenCalled()
110
- })
111
-
112
- it('processes valid providers even with unknown ones in list', async () => {
113
- // Setup
114
- const currencies = [
115
- createTestCurrency({ code: 'USD' }),
116
- createTestCurrency({ code: 'EUR' }),
117
- ]
118
-
119
- const { em } = createMockEntityManager({ currencies })
120
- service = new RateFetchingService(em)
121
-
122
- const knownProvider = createMockProvider({
123
- source: 'KNOWN',
124
- rates: [createTestRate({ fromCurrencyCode: 'USD', toCurrencyCode: 'EUR' })],
125
- })
126
-
127
- service.registerProvider(knownProvider)
128
-
129
- // Execute - mix of unknown and known providers
130
- const result = await service.fetchRatesForDate(TEST_DATE, TEST_SCOPE, {
131
- providers: ['UNKNOWN1', 'KNOWN', 'UNKNOWN2'],
132
- })
133
-
134
- // Assert
135
- expect(result.errors).toContain('Unknown provider: UNKNOWN1')
136
- expect(result.errors).toContain('Unknown provider: UNKNOWN2')
137
- expect(result.totalFetched).toBe(1) // From KNOWN provider
138
- expect(knownProvider.fetchRates).toHaveBeenCalled()
139
- expect(result.byProvider['KNOWN']).toEqual({ count: 1 })
140
- })
141
- })
142
-
143
- describe('provider availability', () => {
144
- it('skips providers that report isAvailable() === false', async () => {
145
- // Setup
146
- const currencies = [createTestCurrency({ code: 'USD' })]
147
- const { em } = createMockEntityManager({ currencies })
148
- service = new RateFetchingService(em)
149
-
150
- const unavailableProvider = createMockProvider({
151
- source: 'UNAVAILABLE',
152
- isAvailable: false,
153
- rates: [createTestRate()],
154
- })
155
-
156
- service.registerProvider(unavailableProvider)
157
-
158
- // Execute
159
- const result = await service.fetchRatesForDate(TEST_DATE, TEST_SCOPE)
160
-
161
- // Assert
162
- expect(unavailableProvider.isAvailable).toHaveBeenCalled()
163
- expect(unavailableProvider.fetchRates).not.toHaveBeenCalled()
164
- expect(result.totalFetched).toBe(0)
165
- })
166
-
167
- it('adds error for unavailable providers', async () => {
168
- // Setup
169
- const currencies = [createTestCurrency({ code: 'USD' })]
170
- const { em } = createMockEntityManager({ currencies })
171
- service = new RateFetchingService(em)
172
-
173
- const unavailableProvider = createMockProvider({
174
- source: 'OFFLINE',
175
- isAvailable: false,
176
- rates: [],
177
- })
178
-
179
- service.registerProvider(unavailableProvider)
180
-
181
- // Execute
182
- const result = await service.fetchRatesForDate(TEST_DATE, TEST_SCOPE)
183
-
184
- // Assert
185
- expect(result.errors).toContain('Provider not available: OFFLINE')
186
- })
187
-
188
- it('processes available providers when some are unavailable', async () => {
189
- // Setup
190
- const currencies = [
191
- createTestCurrency({ code: 'USD' }),
192
- createTestCurrency({ code: 'EUR' }),
193
- ]
194
-
195
- const { em } = createMockEntityManager({ currencies })
196
- service = new RateFetchingService(em)
197
-
198
- const unavailableProvider = createMockProvider({
199
- source: 'UNAVAILABLE',
200
- isAvailable: false,
201
- rates: [],
202
- })
203
-
204
- const availableProvider = createMockProvider({
205
- source: 'AVAILABLE',
206
- isAvailable: true,
207
- rates: [createTestRate({ fromCurrencyCode: 'USD', toCurrencyCode: 'EUR' })],
208
- })
209
-
210
- service.registerProvider(unavailableProvider)
211
- service.registerProvider(availableProvider)
212
-
213
- // Execute
214
- const result = await service.fetchRatesForDate(TEST_DATE, TEST_SCOPE)
215
-
216
- // Assert
217
- expect(unavailableProvider.fetchRates).not.toHaveBeenCalled()
218
- expect(availableProvider.fetchRates).toHaveBeenCalled()
219
- expect(result.totalFetched).toBe(1)
220
- expect(result.errors).toContain('Provider not available: UNAVAILABLE')
221
- })
222
-
223
- it('calls isAvailable() for each provider before fetching', async () => {
224
- // Setup
225
- const currencies = [createTestCurrency({ code: 'USD' })]
226
- const { em } = createMockEntityManager({ currencies })
227
- service = new RateFetchingService(em)
228
-
229
- const provider1 = createMockProvider({
230
- source: 'PROVIDER1',
231
- isAvailable: true,
232
- rates: [],
233
- })
234
-
235
- const provider2 = createMockProvider({
236
- source: 'PROVIDER2',
237
- isAvailable: true,
238
- rates: [],
239
- })
240
-
241
- service.registerProvider(provider1)
242
- service.registerProvider(provider2)
243
-
244
- // Execute
245
- await service.fetchRatesForDate(TEST_DATE, TEST_SCOPE)
246
-
247
- // Assert
248
- expect(provider1.isAvailable).toHaveBeenCalled()
249
- expect(provider2.isAvailable).toHaveBeenCalled()
250
- })
251
- })
252
-
253
- describe('registerProvider', () => {
254
- it('registers providers for fetching rates', async () => {
255
- // Setup
256
- const currencies = [
257
- createTestCurrency({ code: 'USD' }),
258
- createTestCurrency({ code: 'EUR' }),
259
- ]
260
-
261
- const { em } = createMockEntityManager({ currencies })
262
- service = new RateFetchingService(em)
263
-
264
- // Service starts with no providers
265
- // Register custom test providers
266
- const customProvider = createMockProvider({
267
- source: 'CUSTOM',
268
- rates: [createTestRate({ fromCurrencyCode: 'USD', toCurrencyCode: 'EUR' })],
269
- })
270
-
271
- service.registerProvider(customProvider)
272
-
273
- // Execute
274
- const result = await service.fetchRatesForDate(TEST_DATE, TEST_SCOPE)
275
-
276
- // Assert - custom provider should be used
277
- expect(customProvider.fetchRates).toHaveBeenCalled()
278
- expect(result.byProvider['CUSTOM']).toBeDefined()
279
- expect(Object.keys(result.byProvider)).toEqual(['CUSTOM'])
280
- })
281
-
282
- it('allows registering multiple providers', async () => {
283
- // Setup
284
- const currencies = [createTestCurrency({ code: 'USD' })]
285
- const { em } = createMockEntityManager({ currencies })
286
- service = new RateFetchingService(em)
287
-
288
- const firstProvider = createMockProvider({
289
- source: 'FIRST',
290
- rates: [],
291
- })
292
-
293
- const secondProvider = createMockProvider({
294
- source: 'SECOND',
295
- rates: [],
296
- })
297
-
298
- // Register both providers
299
- service.registerProvider(firstProvider)
300
- service.registerProvider(secondProvider)
301
-
302
- // Execute
303
- await service.fetchRatesForDate(TEST_DATE, TEST_SCOPE)
304
-
305
- // Assert - both providers should be called
306
- expect(firstProvider.fetchRates).toHaveBeenCalled()
307
- expect(secondProvider.fetchRates).toHaveBeenCalled()
308
- })
309
-
310
- it('supports registering many providers', async () => {
311
- // Setup
312
- const currencies = [
313
- createTestCurrency({ code: 'USD' }),
314
- createTestCurrency({ code: 'EUR' }),
315
- createTestCurrency({ code: 'GBP' }),
316
- ]
317
-
318
- const { em } = createMockEntityManager({ currencies })
319
- service = new RateFetchingService(em)
320
-
321
- const provider1 = createMockProvider({
322
- source: 'P1',
323
- rates: [createTestRate({ fromCurrencyCode: 'USD', toCurrencyCode: 'EUR' })],
324
- })
325
-
326
- const provider2 = createMockProvider({
327
- source: 'P2',
328
- rates: [createTestRate({ fromCurrencyCode: 'EUR', toCurrencyCode: 'GBP' })],
329
- })
330
-
331
- const provider3 = createMockProvider({
332
- source: 'P3',
333
- rates: [createTestRate({ fromCurrencyCode: 'GBP', toCurrencyCode: 'USD' })],
334
- })
335
-
336
- service.registerProvider(provider1)
337
- service.registerProvider(provider2)
338
- service.registerProvider(provider3)
339
-
340
- // Execute
341
- const result = await service.fetchRatesForDate(TEST_DATE, TEST_SCOPE)
342
-
343
- // Assert - all three providers should be called
344
- expect(provider1.fetchRates).toHaveBeenCalled()
345
- expect(provider2.fetchRates).toHaveBeenCalled()
346
- expect(provider3.fetchRates).toHaveBeenCalled()
347
- expect(result.totalFetched).toBe(3)
348
- })
349
- })
350
- })
@@ -1,188 +0,0 @@
1
- import type { EntityManager } from '@mikro-orm/core'
2
- import { Currency, ExchangeRate } from '../../data/entities'
3
- import type { RateProvider, RateProviderResult } from '../providers/base'
4
-
5
- export interface MockEntityManagerConfig {
6
- currencies?: Currency[]
7
- existingRates?: ExchangeRate[]
8
- shouldFailTransaction?: boolean
9
- }
10
-
11
- export interface MockProviderConfig {
12
- source: string
13
- name?: string
14
- isAvailable?: boolean
15
- rates?: RateProviderResult[]
16
- error?: Error
17
- }
18
-
19
- /**
20
- * Create a mock EntityManager for testing
21
- */
22
- export function createMockEntityManager(config: MockEntityManagerConfig = {}) {
23
- const persisted: any[] = []
24
- const flushed: boolean[] = []
25
-
26
- const mockEm: any = {
27
- find: jest.fn(async (entityClass: any, filter: any) => {
28
- // Return currencies for Currency entity queries
29
- if (entityClass === Currency || entityClass.name === 'Currency') {
30
- const currencies = config.currencies || []
31
- // Apply filters if specified
32
- return currencies.filter(c => {
33
- if (filter.isActive !== undefined && c.isActive !== filter.isActive) return false
34
- if (filter.deletedAt !== undefined && filter.deletedAt === null && c.deletedAt !== null) return false
35
- if (filter.tenantId && c.tenantId !== filter.tenantId) return false
36
- if (filter.organizationId && c.organizationId !== filter.organizationId) return false
37
- return true
38
- })
39
- }
40
-
41
- // Return exchange rates for ExchangeRate entity queries
42
- if (entityClass === ExchangeRate || entityClass.name === 'ExchangeRate') {
43
- const rates = config.existingRates || []
44
- // Apply filters if specified
45
- return rates.filter(r => {
46
- if (filter.organizationId && r.organizationId !== filter.organizationId) return false
47
- if (filter.tenantId && r.tenantId !== filter.tenantId) return false
48
- if (filter.fromCurrencyCode && r.fromCurrencyCode !== filter.fromCurrencyCode) return false
49
- if (filter.toCurrencyCode && r.toCurrencyCode !== filter.toCurrencyCode) return false
50
- if (filter.date && r.date.getTime() !== filter.date.getTime()) return false
51
- if (filter.isActive !== undefined && r.isActive !== filter.isActive) return false
52
- if (filter.deletedAt !== undefined && filter.deletedAt === null && r.deletedAt !== null) return false
53
- return true
54
- })
55
- }
56
-
57
- return []
58
- }),
59
-
60
- findOne: jest.fn(async (entityClass: any, filter: any) => {
61
- // Return existing rate if it matches all unique constraint fields
62
- if ((entityClass === ExchangeRate || entityClass.name === 'ExchangeRate') && config.existingRates) {
63
- return config.existingRates.find(r =>
64
- r.organizationId === filter.organizationId &&
65
- r.tenantId === filter.tenantId &&
66
- r.fromCurrencyCode === filter.fromCurrencyCode &&
67
- r.toCurrencyCode === filter.toCurrencyCode &&
68
- r.date.getTime() === filter.date.getTime() &&
69
- r.source === filter.source
70
- ) || null
71
- }
72
- return null
73
- }),
74
-
75
- create: jest.fn((entityClass: any, data: any) => ({
76
- ...data,
77
- id: `mock-id-${Math.random()}`,
78
- })),
79
-
80
- persist: jest.fn((entity: any) => {
81
- persisted.push(entity)
82
- }),
83
-
84
- flush: jest.fn(async () => {
85
- flushed.push(true)
86
- }),
87
-
88
- transactional: jest.fn(async (callback: (em: any) => Promise<any>) => {
89
- if (config.shouldFailTransaction) {
90
- throw new Error('Transaction failed')
91
- }
92
- // Create a separate mock EM for the transaction with same config
93
- const txEm = createMockEntityManager(config).em
94
- return callback(txEm)
95
- }),
96
- }
97
-
98
- return {
99
- em: mockEm,
100
- persisted,
101
- flushed,
102
- }
103
- }
104
-
105
- /**
106
- * Create a mock RateProvider for testing
107
- */
108
- export function createMockProvider(config: MockProviderConfig): RateProvider {
109
- return {
110
- source: config.source,
111
- name: config.name || config.source,
112
- isAvailable: jest.fn(() => config.isAvailable ?? true),
113
- fetchRates: jest.fn(async (date, scope, currencies) => {
114
- if (config.error) {
115
- throw config.error
116
- }
117
- return config.rates || []
118
- }),
119
- }
120
- }
121
-
122
- /**
123
- * Create a test Currency entity
124
- */
125
- export function createTestCurrency(overrides?: Partial<Currency>): Currency {
126
- return {
127
- id: overrides?.id || `currency-${Math.random()}`,
128
- organizationId: 'test-org',
129
- tenantId: 'test-tenant',
130
- code: 'USD',
131
- name: 'US Dollar',
132
- symbol: '$',
133
- decimalPlaces: 2,
134
- thousandsSeparator: ',',
135
- decimalSeparator: '.',
136
- isBase: false,
137
- isActive: true,
138
- createdAt: new Date('2024-01-01'),
139
- updatedAt: new Date('2024-01-01'),
140
- deletedAt: null,
141
- ...overrides,
142
- } as Currency
143
- }
144
-
145
- /**
146
- * Create a test RateProviderResult
147
- */
148
- export function createTestRate(overrides?: Partial<RateProviderResult>): RateProviderResult {
149
- return {
150
- fromCurrencyCode: 'USD',
151
- toCurrencyCode: 'EUR',
152
- rate: '0.85',
153
- source: 'TEST',
154
- date: new Date('2024-01-15T00:00:00.000Z'),
155
- ...overrides,
156
- }
157
- }
158
-
159
- /**
160
- * Create a test ExchangeRate entity
161
- */
162
- export function createTestExchangeRate(overrides?: Partial<ExchangeRate>): ExchangeRate {
163
- return {
164
- id: `rate-${Math.random()}`,
165
- organizationId: 'test-org',
166
- tenantId: 'test-tenant',
167
- fromCurrencyCode: 'USD',
168
- toCurrencyCode: 'EUR',
169
- rate: '0.85',
170
- date: new Date('2024-01-15T00:00:00.000Z'),
171
- source: 'TEST',
172
- isActive: true,
173
- createdAt: new Date('2024-01-01'),
174
- updatedAt: new Date('2024-01-01'),
175
- deletedAt: null,
176
- ...overrides,
177
- } as ExchangeRate
178
- }
179
-
180
- /**
181
- * Common test constants
182
- */
183
- export const TEST_SCOPE = {
184
- tenantId: 'test-tenant',
185
- organizationId: 'test-org',
186
- }
187
-
188
- export const TEST_DATE = new Date('2024-01-15T00:00:00.000Z')
@@ -1,42 +0,0 @@
1
- import { test, expect } from '@playwright/test';
2
- import { login } from '@open-mercato/core/modules/core/__integration__/helpers/auth';
3
- import { getAuthToken } from '@open-mercato/core/modules/core/__integration__/helpers/api';
4
- import { deleteEntityIfExists } from '@open-mercato/core/modules/core/__integration__/helpers/crmFixtures';
5
-
6
- /**
7
- * TC-CRM-001: Company Creation
8
- * Source: .ai/qa/scenarios/TC-CRM-001-company-creation.md
9
- */
10
- test.describe('TC-CRM-001: Company Creation', () => {
11
- test('should create a company from create form and show it in companies list', async ({ page, request }) => {
12
- let token: string | null = null;
13
- let companyId: string | null = null;
14
- const companyName = `QA TC-CRM-001 ${Date.now()}`;
15
-
16
- try {
17
- token = await getAuthToken(request);
18
-
19
- await login(page, 'admin');
20
- await page.goto('/backend/customers/companies');
21
-
22
- await page.getByRole('link', { name: /Create Company/i }).first().click();
23
- await page.locator('form').getByRole('textbox').first().fill(companyName);
24
- await page.getByPlaceholder('https://example.com').fill('https://example.com');
25
- await page.locator('form').getByRole('button', { name: /Create Company/i }).click();
26
-
27
- await expect(page).toHaveURL(/\/backend\/customers\/companies\/[0-9a-f-]{36}$/i);
28
- await expect(page.getByRole('button', { name: companyName, exact: true }).first()).toBeVisible();
29
-
30
- const url = page.url();
31
- const idMatch = url.match(/\/backend\/customers\/companies\/([0-9a-f-]{36})$/i);
32
- companyId = idMatch ? idMatch[1] : null;
33
- expect(companyId, 'Expected created company id in detail URL').toBeTruthy();
34
-
35
- await page.goto('/backend/customers/companies');
36
- await page.getByRole('textbox', { name: /Search companies/i }).fill(companyName);
37
- await expect(page.getByRole('link', { name: companyName, exact: true })).toBeVisible();
38
- } finally {
39
- await deleteEntityIfExists(request, token, '/api/customers/companies', companyId);
40
- }
41
- });
42
- });
@@ -1,47 +0,0 @@
1
- import { expect, test } from '@playwright/test';
2
- import { login } from '@open-mercato/core/modules/core/__integration__/helpers/auth';
3
- import { deleteEntityIfExists } from '@open-mercato/core/modules/core/__integration__/helpers/crmFixtures';
4
- import { getAuthToken } from '@open-mercato/core/modules/core/__integration__/helpers/api';
5
-
6
- /**
7
- * TC-CRM-002: Company Creation Validation Errors
8
- * Source: .ai/qa/scenarios/TC-CRM-002-company-creation-validation.md
9
- */
10
- test.describe('TC-CRM-002: Company Creation Validation Errors', () => {
11
- test('should block invalid input, show field errors, then allow create after correction', async ({ page, request }) => {
12
- let token: string | null = null;
13
- let companyId: string | null = null;
14
- const companyName = `QA TC-CRM-002 ${Date.now()}`;
15
-
16
- try {
17
- token = await getAuthToken(request);
18
-
19
- await login(page, 'admin');
20
- await page.goto('/backend/customers/companies/create');
21
-
22
- await page.getByRole('button', { name: 'Create Company' }).first().click();
23
- await expect(page.getByText('This field is required')).toBeVisible();
24
-
25
- await page.locator('form').getByRole('textbox').first().fill(companyName);
26
- await page.getByPlaceholder('name@example.com').fill('invalid-email');
27
- await page.getByPlaceholder('https://example.com').fill('notaurl');
28
- await page.getByRole('button', { name: 'Create Company' }).first().click();
29
-
30
- await expect(page.getByText('Invalid email address')).toBeVisible();
31
- await expect(page.getByText('Invalid URL')).toBeVisible();
32
-
33
- await page.getByPlaceholder('name@example.com').fill('qa+crm002@example.com');
34
- await page.getByPlaceholder('https://example.com').fill('https://example.com');
35
- await page.getByRole('button', { name: 'Create Company' }).first().click();
36
-
37
- await expect(page).toHaveURL(/\/backend\/customers\/companies\/[0-9a-f-]{36}$/i);
38
- await expect(page.getByRole('button', { name: companyName, exact: true }).first()).toBeVisible();
39
-
40
- const idMatch = page.url().match(/\/backend\/customers\/companies\/([0-9a-f-]{36})$/i);
41
- companyId = idMatch?.[1] ?? null;
42
- expect(companyId, 'Expected created company id in detail URL').toBeTruthy();
43
- } finally {
44
- await deleteEntityIfExists(request, token, '/api/customers/companies', companyId);
45
- }
46
- });
47
- });
@@ -1,55 +0,0 @@
1
- import { expect, test } from '@playwright/test';
2
- import { login } from '@open-mercato/core/modules/core/__integration__/helpers/auth';
3
- import { createCompanyFixture, deleteEntityIfExists } from '@open-mercato/core/modules/core/__integration__/helpers/crmFixtures';
4
- import { getAuthToken } from '@open-mercato/core/modules/core/__integration__/helpers/api';
5
-
6
- function escapeRegex(value: string): string {
7
- return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
8
- }
9
-
10
- /**
11
- * TC-CRM-003: Edit Company Details
12
- * Source: .ai/qa/scenarios/TC-CRM-003-company-edit.md
13
- */
14
- test.describe('TC-CRM-003: Edit Company Details', () => {
15
- test('should update company fields from detail page and persist changes in list view', async ({ page, request }) => {
16
- let token: string | null = null;
17
- let companyId: string | null = null;
18
- const originalName = `QA TC-CRM-003 Original ${Date.now()}`;
19
- const updatedName = `QA TC-CRM-003 Updated ${Date.now()}`;
20
- const updatedWebsite = `https://crm003-${Date.now()}.example.com`;
21
-
22
- try {
23
- token = await getAuthToken(request);
24
- companyId = await createCompanyFixture(request, token, originalName);
25
-
26
- await login(page, 'admin');
27
- await page.goto(`/backend/customers/companies/${companyId}`);
28
-
29
- await page.getByRole('button', { name: new RegExp(`Display name\\s+${escapeRegex(originalName)}`) }).click();
30
- await page.getByRole('textbox', { name: 'Enter company name' }).fill(updatedName);
31
- await page.getByRole('button', { name: /Save .*Ctrl\+Enter/i }).first().click();
32
- await expect(page.getByRole('button', { name: new RegExp(`Display name\\s+${escapeRegex(updatedName)}`) })).toBeVisible();
33
-
34
- await page.getByRole('button', { name: /Website/i }).click();
35
- await page.getByPlaceholder('https://example.com').fill(updatedWebsite);
36
- await page.getByRole('button', { name: /Save .*Ctrl\+Enter/i }).first().click();
37
- await expect(page.getByRole('button', { name: new RegExp(`Website\\s+${escapeRegex(updatedWebsite)}`) })).toBeVisible();
38
-
39
- await page.getByRole('button', { name: /Lifecycle stage/i }).click();
40
- await page
41
- .locator('select')
42
- .filter({ has: page.locator('option', { hasText: 'Prospect' }) })
43
- .first()
44
- .selectOption({ label: 'Prospect' });
45
- await page.getByRole('button', { name: /Save .*Ctrl\+Enter/i }).first().click();
46
- await expect(page.getByRole('button', { name: /Lifecycle stage\s+Prospect/i })).toBeVisible();
47
-
48
- await page.goto('/backend/customers/companies');
49
- await page.getByRole('textbox', { name: /Search companies/i }).fill(updatedName);
50
- await expect(page.getByRole('link', { name: updatedName, exact: true })).toBeVisible();
51
- } finally {
52
- await deleteEntityIfExists(request, token, '/api/customers/companies', companyId);
53
- }
54
- });
55
- });