@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,436 +0,0 @@
1
- import { describe, test, expect } from '@jest/globals'
2
- import {
3
- evaluate,
4
- evaluateSingleRule,
5
- evaluateConditions,
6
- sortRulesByPriority,
7
- filterRulesByContext,
8
- getApplicableRules,
9
- type RuleEvaluationContext,
10
- } from '../rule-evaluator'
11
- import type { BusinessRule } from '../../data/entities'
12
-
13
- describe('RuleEvaluatorService', () => {
14
-
15
- // Helper to create test rules
16
- const createTestRule = (overrides: Partial<BusinessRule> = {}): BusinessRule => {
17
- return {
18
- id: 'test-id',
19
- ruleId: 'TEST-001',
20
- ruleName: 'Test Rule',
21
- ruleType: 'GUARD',
22
- entityType: 'WorkOrder',
23
- conditionExpression: { field: 'status', operator: '=', value: 'ACTIVE' },
24
- enabled: true,
25
- priority: 100,
26
- version: 1,
27
- tenantId: 'tenant-123',
28
- organizationId: 'org-456',
29
- createdAt: new Date(),
30
- updatedAt: new Date(),
31
- ...overrides,
32
- } as BusinessRule
33
- }
34
-
35
- describe('evaluateSingleRule', () => {
36
- test('should evaluate a simple rule successfully', async () => {
37
- const rule = createTestRule({
38
- conditionExpression: { field: 'status', operator: '=', value: 'ACTIVE' },
39
- })
40
-
41
- const result = await evaluateSingleRule(rule, { status: 'ACTIVE' }, {})
42
-
43
- expect(result.conditionsPassed).toBe(true)
44
- expect(result.evaluationCompleted).toBe(true)
45
- expect(result.rule).toBe(rule)
46
- expect(result.evaluationTime).toBeGreaterThanOrEqual(0)
47
- expect(result.error).toBeUndefined()
48
- })
49
-
50
- test('should fail when conditions do not match', async () => {
51
- const rule = createTestRule({
52
- conditionExpression: { field: 'status', operator: '=', value: 'ACTIVE' },
53
- })
54
-
55
- const result = await evaluateSingleRule(rule, { status: 'INACTIVE' }, {})
56
-
57
- expect(result.conditionsPassed).toBe(false)
58
- expect(result.evaluationCompleted).toBe(true) // Evaluation completed, conditions just didn't pass
59
- expect(result.error).toBeUndefined()
60
- })
61
-
62
- test('should fail when rule is disabled', async () => {
63
- const rule = createTestRule({
64
- enabled: false,
65
- })
66
-
67
- const result = await evaluateSingleRule(rule, { status: 'ACTIVE' }, {})
68
-
69
- expect(result.conditionsPassed).toBe(false)
70
- expect(result.evaluationCompleted).toBe(false)
71
- expect(result.error).toBe('Rule is disabled')
72
- })
73
-
74
- test('should fail when rule is not yet effective', async () => {
75
- const future = new Date(Date.now() + 86400000) // Tomorrow
76
- const rule = createTestRule({
77
- effectiveFrom: future,
78
- })
79
-
80
- const result = await evaluateSingleRule(rule, { status: 'ACTIVE' }, {})
81
-
82
- expect(result.conditionsPassed).toBe(false)
83
- expect(result.evaluationCompleted).toBe(false)
84
- expect(result.error).toBe('Rule is not effective (outside date range)')
85
- })
86
-
87
- test('should fail when rule has expired', async () => {
88
- const past = new Date(Date.now() - 86400000) // Yesterday
89
- const rule = createTestRule({
90
- effectiveTo: past,
91
- })
92
-
93
- const result = await evaluateSingleRule(rule, { status: 'ACTIVE' }, {})
94
-
95
- expect(result.conditionsPassed).toBe(false)
96
- expect(result.evaluationCompleted).toBe(false)
97
- expect(result.error).toBe('Rule is not effective (outside date range)')
98
- })
99
-
100
- test('should succeed when rule is within effective date range', async () => {
101
- const yesterday = new Date(Date.now() - 86400000)
102
- const tomorrow = new Date(Date.now() + 86400000)
103
- const rule = createTestRule({
104
- effectiveFrom: yesterday,
105
- effectiveTo: tomorrow,
106
- conditionExpression: { field: 'status', operator: '=', value: 'ACTIVE' },
107
- })
108
-
109
- const result = await evaluateSingleRule(rule, { status: 'ACTIVE' }, {})
110
-
111
- expect(result.conditionsPassed).toBe(true)
112
- expect(result.evaluationCompleted).toBe(true)
113
- })
114
-
115
- test('should handle complex AND conditions', async () => {
116
- const rule = createTestRule({
117
- conditionExpression: {
118
- operator: 'AND',
119
- rules: [
120
- { field: 'quantity', operator: '>', value: 0 },
121
- { field: 'status', operator: '=', value: 'ACTIVE' },
122
- ],
123
- },
124
- })
125
-
126
- const result = await evaluateSingleRule(rule, { quantity: 10, status: 'ACTIVE' }, {})
127
-
128
- expect(result.conditionsPassed).toBe(true)
129
- expect(result.evaluationCompleted).toBe(true)
130
- })
131
-
132
- test('should handle complex OR conditions', async () => {
133
- const rule = createTestRule({
134
- conditionExpression: {
135
- operator: 'OR',
136
- rules: [
137
- { field: 'priority', operator: '=', value: 'HIGH' },
138
- { field: 'urgent', operator: '=', value: true },
139
- ],
140
- },
141
- })
142
-
143
- const result = await evaluateSingleRule(rule, { priority: 'LOW', urgent: true }, {})
144
-
145
- expect(result.conditionsPassed).toBe(true)
146
- expect(result.evaluationCompleted).toBe(true)
147
- })
148
-
149
- test('should pass when conditions are null (always true)', async () => {
150
- const rule = createTestRule({
151
- conditionExpression: null as any,
152
- })
153
-
154
- const result = await evaluateSingleRule(rule, {}, {})
155
-
156
- expect(result.conditionsPassed).toBe(true)
157
- expect(result.evaluationCompleted).toBe(true)
158
- })
159
-
160
- test('should handle evaluation errors gracefully', async () => {
161
- const rule = createTestRule({
162
- conditionExpression: { field: 'value', operator: 'INVALID_OPERATOR' as any, value: 10 },
163
- })
164
-
165
- const result = await evaluateSingleRule(rule, { value: 10 }, {})
166
-
167
- expect(result.conditionsPassed).toBe(false)
168
- expect(result.evaluationCompleted).toBe(false)
169
- expect(result.error).toContain('Unknown operator')
170
- })
171
- })
172
-
173
- describe('evaluateConditions', () => {
174
- test('should evaluate simple conditions', async () => {
175
- const conditions = { field: 'status', operator: '=', value: 'ACTIVE' }
176
- const result = await evaluateConditions(conditions, { status: 'ACTIVE' }, {})
177
-
178
- expect(result).toBe(true)
179
- })
180
-
181
- test('should evaluate group conditions', async () => {
182
- const conditions = {
183
- operator: 'AND',
184
- rules: [
185
- { field: 'quantity', operator: '>', value: 0 },
186
- { field: 'price', operator: '<=', value: 100 },
187
- ],
188
- }
189
- const result = await evaluateConditions(conditions, { quantity: 10, price: 50 }, {})
190
-
191
- expect(result).toBe(true)
192
- })
193
-
194
- test('should return true when conditions are null', async () => {
195
- const result = await evaluateConditions(null, {}, {})
196
-
197
- expect(result).toBe(true)
198
- })
199
-
200
- test('should throw error on invalid conditions', async () => {
201
- const conditions = { field: 'value', operator: 'INVALID' as any, value: 10 }
202
-
203
- await expect(evaluateConditions(conditions, { value: 10 }, {})).rejects.toThrow('Condition evaluation failed')
204
- })
205
- })
206
-
207
- describe('evaluate (multiple rules)', () => {
208
- test('should evaluate multiple rules and return results', async () => {
209
- const rules = [
210
- createTestRule({
211
- ruleId: 'RULE-001',
212
- conditionExpression: { field: 'quantity', operator: '>', value: 0 },
213
- }),
214
- createTestRule({
215
- ruleId: 'RULE-002',
216
- conditionExpression: { field: 'status', operator: '=', value: 'ACTIVE' },
217
- }),
218
- ]
219
-
220
- const result = await evaluate(rules, { quantity: 10, status: 'ACTIVE' }, {})
221
-
222
- expect(result.conditionsPassed).toBe(true)
223
- expect(result.evaluationCompleted).toBe(true)
224
- expect(result.matchedRules).toHaveLength(2)
225
- expect(result.failedRules).toHaveLength(0)
226
- expect(result.evaluationTime).toBeGreaterThanOrEqual(0)
227
- })
228
-
229
- test('should separate matched and failed rules', async () => {
230
- const rules = [
231
- createTestRule({
232
- ruleId: 'RULE-001',
233
- conditionExpression: { field: 'quantity', operator: '>', value: 0 },
234
- }),
235
- createTestRule({
236
- ruleId: 'RULE-002',
237
- conditionExpression: { field: 'status', operator: '=', value: 'DELETED' },
238
- }),
239
- ]
240
-
241
- const result = await evaluate(rules, { quantity: 10, status: 'ACTIVE' }, {})
242
-
243
- expect(result.conditionsPassed).toBe(true)
244
- expect(result.evaluationCompleted).toBe(true)
245
- expect(result.matchedRules).toHaveLength(1)
246
- expect(result.matchedRules[0].ruleId).toBe('RULE-001')
247
- expect(result.failedRules).toHaveLength(1)
248
- expect(result.failedRules[0].ruleId).toBe('RULE-002')
249
- })
250
-
251
- test('should collect errors from failed rules', async () => {
252
- const rules = [
253
- createTestRule({
254
- ruleId: 'RULE-001',
255
- enabled: false,
256
- }),
257
- createTestRule({
258
- ruleId: 'RULE-002',
259
- conditionExpression: { field: 'value', operator: 'INVALID' as any, value: 10 },
260
- }),
261
- ]
262
-
263
- const result = await evaluate(rules, { value: 10 }, {})
264
-
265
- expect(result.conditionsPassed).toBe(false)
266
- expect(result.evaluationCompleted).toBe(false)
267
- expect(result.errors).toBeDefined()
268
- expect(result.errors?.length).toBe(2)
269
- expect(result.errors?.[0]).toContain('RULE-001')
270
- expect(result.errors?.[1]).toContain('RULE-002')
271
- })
272
-
273
- test('should evaluate rules in priority order', async () => {
274
- const executionOrder: string[] = []
275
-
276
- const rules = [
277
- createTestRule({
278
- ruleId: 'LOW',
279
- priority: 50,
280
- conditionExpression: { field: 'always', operator: '=', value: true },
281
- }),
282
- createTestRule({
283
- ruleId: 'HIGH',
284
- priority: 200,
285
- conditionExpression: { field: 'always', operator: '=', value: true },
286
- }),
287
- createTestRule({
288
- ruleId: 'MEDIUM',
289
- priority: 100,
290
- conditionExpression: { field: 'always', operator: '=', value: true },
291
- }),
292
- ]
293
-
294
- const result = await evaluate(rules, { always: true }, {})
295
-
296
- // Check that rules were matched in priority order
297
- expect(result.matchedRules[0].ruleId).toBe('HIGH')
298
- expect(result.matchedRules[1].ruleId).toBe('MEDIUM')
299
- expect(result.matchedRules[2].ruleId).toBe('LOW')
300
- })
301
- })
302
-
303
- describe('sortRulesByPriority', () => {
304
- test('should sort rules by priority (highest first)', () => {
305
- const rules = [
306
- createTestRule({ ruleId: 'LOW', priority: 50 }),
307
- createTestRule({ ruleId: 'HIGH', priority: 200 }),
308
- createTestRule({ ruleId: 'MEDIUM', priority: 100 }),
309
- ]
310
-
311
- const sorted = sortRulesByPriority(rules)
312
-
313
- expect(sorted[0].ruleId).toBe('HIGH')
314
- expect(sorted[1].ruleId).toBe('MEDIUM')
315
- expect(sorted[2].ruleId).toBe('LOW')
316
- })
317
-
318
- test('should sort by ruleId when priority is the same', () => {
319
- const rules = [
320
- createTestRule({ ruleId: 'RULE-C', priority: 100 }),
321
- createTestRule({ ruleId: 'RULE-A', priority: 100 }),
322
- createTestRule({ ruleId: 'RULE-B', priority: 100 }),
323
- ]
324
-
325
- const sorted = sortRulesByPriority(rules)
326
-
327
- expect(sorted[0].ruleId).toBe('RULE-A')
328
- expect(sorted[1].ruleId).toBe('RULE-B')
329
- expect(sorted[2].ruleId).toBe('RULE-C')
330
- })
331
-
332
- test('should not mutate original array', () => {
333
- const rules = [
334
- createTestRule({ ruleId: 'LOW', priority: 50 }),
335
- createTestRule({ ruleId: 'HIGH', priority: 200 }),
336
- ]
337
-
338
- const originalOrder = rules.map((r) => r.ruleId)
339
- sortRulesByPriority(rules)
340
-
341
- expect(rules.map((r) => r.ruleId)).toEqual(originalOrder)
342
- })
343
- })
344
-
345
- describe('filterRulesByContext', () => {
346
- test('should filter by entity type', () => {
347
- const rules = [
348
- createTestRule({ ruleId: 'RULE-1', entityType: 'WorkOrder' }),
349
- createTestRule({ ruleId: 'RULE-2', entityType: 'Item' }),
350
- createTestRule({ ruleId: 'RULE-3', entityType: 'WorkOrder' }),
351
- ]
352
-
353
- const filtered = filterRulesByContext(rules, 'WorkOrder')
354
-
355
- expect(filtered).toHaveLength(2)
356
- expect(filtered[0].ruleId).toBe('RULE-1')
357
- expect(filtered[1].ruleId).toBe('RULE-3')
358
- })
359
-
360
- test('should filter by event type', () => {
361
- const rules = [
362
- createTestRule({ ruleId: 'RULE-1', eventType: 'beforeSave' }),
363
- createTestRule({ ruleId: 'RULE-2', eventType: 'afterSave' }),
364
- createTestRule({ ruleId: 'RULE-3', eventType: null }),
365
- ]
366
-
367
- const filtered = filterRulesByContext(rules, undefined, 'beforeSave')
368
-
369
- // RULE-1 matches, RULE-3 has no event type so it passes
370
- expect(filtered).toHaveLength(2)
371
- expect(filtered.map((r) => r.ruleId)).toContain('RULE-1')
372
- expect(filtered.map((r) => r.ruleId)).toContain('RULE-3')
373
- })
374
-
375
- test('should filter by both entity type and event type', () => {
376
- const rules = [
377
- createTestRule({ ruleId: 'RULE-1', entityType: 'WorkOrder', eventType: 'beforeSave' }),
378
- createTestRule({ ruleId: 'RULE-2', entityType: 'Item', eventType: 'beforeSave' }),
379
- createTestRule({ ruleId: 'RULE-3', entityType: 'WorkOrder', eventType: 'afterSave' }),
380
- createTestRule({ ruleId: 'RULE-4', entityType: 'WorkOrder', eventType: null }),
381
- ]
382
-
383
- const filtered = filterRulesByContext(rules, 'WorkOrder', 'beforeSave')
384
-
385
- expect(filtered).toHaveLength(2)
386
- expect(filtered.map((r) => r.ruleId)).toContain('RULE-1')
387
- expect(filtered.map((r) => r.ruleId)).toContain('RULE-4')
388
- })
389
-
390
- test('should return all rules when no filters provided', () => {
391
- const rules = [
392
- createTestRule({ ruleId: 'RULE-1' }),
393
- createTestRule({ ruleId: 'RULE-2' }),
394
- ]
395
-
396
- const filtered = filterRulesByContext(rules)
397
-
398
- expect(filtered).toHaveLength(2)
399
- })
400
- })
401
-
402
- describe('getApplicableRules', () => {
403
- test('should return enabled, effective, and sorted rules', () => {
404
- const yesterday = new Date(Date.now() - 86400000)
405
- const tomorrow = new Date(Date.now() + 86400000)
406
-
407
- const rules = [
408
- createTestRule({ ruleId: 'RULE-1', priority: 100, enabled: true }),
409
- createTestRule({ ruleId: 'RULE-2', priority: 200, enabled: false }), // Disabled
410
- createTestRule({ ruleId: 'RULE-3', priority: 150, effectiveFrom: tomorrow }), // Not yet effective
411
- createTestRule({ ruleId: 'RULE-4', priority: 50, effectiveTo: yesterday }), // Expired
412
- createTestRule({ ruleId: 'RULE-5', priority: 300, enabled: true }),
413
- ]
414
-
415
- const applicable = getApplicableRules(rules)
416
-
417
- expect(applicable).toHaveLength(2)
418
- expect(applicable[0].ruleId).toBe('RULE-5') // Highest priority
419
- expect(applicable[1].ruleId).toBe('RULE-1')
420
- })
421
-
422
- test('should filter by entity type and event type', () => {
423
- const rules = [
424
- createTestRule({ ruleId: 'RULE-1', entityType: 'WorkOrder', priority: 100 }),
425
- createTestRule({ ruleId: 'RULE-2', entityType: 'Item', priority: 200 }),
426
- createTestRule({ ruleId: 'RULE-3', entityType: 'WorkOrder', priority: 150 }),
427
- ]
428
-
429
- const applicable = getApplicableRules(rules, 'WorkOrder')
430
-
431
- expect(applicable).toHaveLength(2)
432
- expect(applicable[0].ruleId).toBe('RULE-3') // Higher priority
433
- expect(applicable[1].ruleId).toBe('RULE-1')
434
- })
435
- })
436
- })
@@ -1,32 +0,0 @@
1
- import { expect, test } from '@playwright/test';
2
- import { login } from '@open-mercato/core/modules/core/__integration__/helpers/auth';
3
-
4
- /**
5
- * TC-CAT-001: Create New Product
6
- * Source: .ai/qa/scenarios/TC-CAT-001-product-creation.md
7
- */
8
- test.describe('TC-CAT-001: Create New Product', () => {
9
- test('should create a product from catalog create form', async ({ page }) => {
10
- const productName = `QA TC-CAT-001 ${Date.now()}`;
11
- const sku = `QA-CAT-001-${Date.now()}`;
12
-
13
- await login(page, 'admin');
14
- await page.goto('/backend/catalog/products/create');
15
-
16
- await page.getByRole('textbox', { name: 'e.g., Summer sneaker' }).fill(productName);
17
- await page
18
- .getByRole('textbox', { name: 'Describe the product...' })
19
- .fill('This is a catalog QA description long enough to satisfy SEO validation checks in create flow.');
20
-
21
- await page.getByRole('button', { name: 'Variants' }).click();
22
- await page.getByRole('textbox', { name: 'e.g., SKU-001' }).fill(sku);
23
-
24
- await page.getByRole('button', { name: 'Create product' }).last().click();
25
- await expect(page).toHaveURL(/\/backend\/catalog\/products$/);
26
-
27
- const search = page.getByRole('textbox', { name: 'Search' });
28
- await search.fill(productName);
29
- await expect(page.getByText(productName, { exact: true })).toBeVisible();
30
- });
31
- });
32
-
@@ -1,19 +0,0 @@
1
- import { expect, test } from '@playwright/test';
2
- import { login } from '@open-mercato/core/modules/core/__integration__/helpers/auth';
3
-
4
- /**
5
- * TC-CAT-002: Product Creation Validation Errors
6
- * Source: .ai/qa/scenarios/TC-CAT-002-product-creation-validation.md
7
- */
8
- test.describe('TC-CAT-002: Product Creation Validation Errors', () => {
9
- test('should block save when required title is missing', async ({ page }) => {
10
- await login(page, 'admin');
11
- await page.goto('/backend/catalog/products/create');
12
-
13
- await page.getByRole('button', { name: 'Create product' }).last().click();
14
-
15
- await expect(page.getByText(/required/i)).toBeVisible();
16
- await expect(page).toHaveURL(/\/backend\/catalog\/products\/create$/);
17
- });
18
- });
19
-
@@ -1,39 +0,0 @@
1
- import { expect, test } from '@playwright/test';
2
- import { login } from '@open-mercato/core/modules/core/__integration__/helpers/auth';
3
-
4
- /**
5
- * TC-CAT-003: Edit Existing Product
6
- * Source: .ai/qa/scenarios/TC-CAT-003-product-edit.md
7
- */
8
- test.describe('TC-CAT-003: Edit Existing Product', () => {
9
- test('should edit product title and persist it', async ({ page }) => {
10
- const productName = `QA TC-CAT-003 ${Date.now()}`;
11
- const updatedName = `${productName} Updated`;
12
- const sku = `QA-CAT-003-${Date.now()}`;
13
-
14
- await login(page, 'admin');
15
- await page.goto('/backend/catalog/products/create');
16
- await page.getByRole('textbox', { name: 'e.g., Summer sneaker' }).fill(productName);
17
- await page
18
- .getByRole('textbox', { name: 'Describe the product...' })
19
- .fill('This is a catalog QA description long enough to satisfy SEO validation checks in create flow.');
20
- await page.getByRole('button', { name: 'Variants' }).click();
21
- await page.getByRole('textbox', { name: 'e.g., SKU-001' }).fill(sku);
22
- await page.getByRole('button', { name: 'Create product' }).last().click();
23
-
24
- await expect(page).toHaveURL(/\/backend\/catalog\/products$/);
25
- const search = page.getByRole('textbox', { name: 'Search' });
26
- await search.fill(productName);
27
- await page.getByText(productName, { exact: true }).first().click();
28
-
29
- await expect(page).toHaveURL(/\/backend\/catalog\/products\/[0-9a-f-]{36}$/i);
30
- const titleField = page.getByRole('textbox', { name: 'e.g., Summer sneaker' });
31
- await titleField.fill(updatedName);
32
- await page.getByRole('button', { name: 'Save changes' }).last().click();
33
-
34
- await expect(page).toHaveURL(/\/backend\/catalog\/products$/);
35
- await search.fill(updatedName);
36
- await expect(page.getByText(updatedName, { exact: true })).toBeVisible();
37
- });
38
- });
39
-
@@ -1,41 +0,0 @@
1
- import { expect, test } from '@playwright/test';
2
- import { createProductFixture, deleteCatalogProductIfExists } from '@open-mercato/core/modules/core/__integration__/helpers/catalogFixtures';
3
- import { getAuthToken } from '@open-mercato/core/modules/core/__integration__/helpers/api';
4
- import { login } from '@open-mercato/core/modules/core/__integration__/helpers/auth';
5
-
6
- /**
7
- * TC-CAT-004: Delete Product
8
- * Source: .ai/qa/scenarios/TC-CAT-004-product-delete.md
9
- */
10
- test.describe('TC-CAT-004: Delete Product', () => {
11
- test('should open delete confirmation for the default variant', async ({ page, request }) => {
12
- const productName = `QA TC-CAT-004 ${Date.now()}`;
13
- const sku = `QA-CAT-004-BASE-${Date.now()}`;
14
- let token: string | null = null;
15
- let productId: string | null = null;
16
-
17
- try {
18
- token = await getAuthToken(request);
19
- productId = await createProductFixture(request, token, { title: productName, sku });
20
-
21
- await login(page, 'admin');
22
- await page.goto(`/backend/catalog/products/${productId}`);
23
-
24
- await page.getByRole('link', { name: 'Add variant' }).click();
25
- await expect(page).toHaveURL(/\/variants\/create$/);
26
- await page.getByRole('textbox', { name: 'e.g., Blue / Small' }).fill('Delete Me Variant');
27
- await page.getByRole('textbox', { name: 'Unique identifier' }).fill(`QA-CAT-004-VAR-${Date.now()}`);
28
- await page.getByRole('button', { name: 'Create variant' }).last().click();
29
- await expect(page).toHaveURL(/\/variants\/[0-9a-f-]{36}$/i);
30
-
31
- await page.goto(`/backend/catalog/products/${productId}`);
32
- await page.getByRole('button', { name: /^Delete$/i }).first().click();
33
- const confirmDialog = page.getByRole('alertdialog');
34
- await expect(confirmDialog).toBeVisible();
35
- await expect(confirmDialog.getByRole('heading', { name: /Delete variant/i })).toBeVisible();
36
- await expect(confirmDialog.getByRole('button', { name: 'Confirm' })).toBeVisible();
37
- } finally {
38
- await deleteCatalogProductIfExists(request, token, productId);
39
- }
40
- });
41
- });
@@ -1,37 +0,0 @@
1
- import { expect, test } from '@playwright/test';
2
- import { createProductFixture, deleteCatalogProductIfExists } from '@open-mercato/core/modules/core/__integration__/helpers/catalogFixtures';
3
- import { getAuthToken } from '@open-mercato/core/modules/core/__integration__/helpers/api';
4
- import { login } from '@open-mercato/core/modules/core/__integration__/helpers/auth';
5
-
6
- /**
7
- * TC-CAT-005: Create Product Variant
8
- * Source: .ai/qa/scenarios/TC-CAT-005-product-variant-creation.md
9
- */
10
- test.describe('TC-CAT-005: Create Product Variant', () => {
11
- test('should create an additional variant for a product', async ({ page, request }) => {
12
- const productName = `QA TC-CAT-005 ${Date.now()}`;
13
- const baseSku = `QA-CAT-005-BASE-${Date.now()}`;
14
- const variantName = `Blue / 42 ${Date.now()}`;
15
- const variantSku = `QA-CAT-005-VAR-${Date.now()}`;
16
- let token: string | null = null;
17
- let productId: string | null = null;
18
-
19
- try {
20
- token = await getAuthToken(request);
21
- productId = await createProductFixture(request, token, { title: productName, sku: baseSku });
22
-
23
- await login(page, 'admin');
24
- await page.goto(`/backend/catalog/products/${productId}/variants/create`);
25
- await expect(page).toHaveURL(/\/variants\/create$/);
26
- await page.getByRole('textbox', { name: 'e.g., Blue / Small' }).fill(variantName);
27
- await page.getByRole('textbox', { name: 'Unique identifier' }).fill(variantSku);
28
- await page.getByRole('button', { name: 'Create variant' }).last().click();
29
-
30
- await expect(page).toHaveURL(/\/backend\/catalog\/products\/[0-9a-f-]{36}\/variants\/[0-9a-f-]{36}$/i);
31
- await expect(page.getByRole('textbox', { name: 'e.g., Blue / Small' })).toHaveValue(variantName);
32
- await expect(page.getByRole('textbox', { name: 'Unique identifier' })).toHaveValue(variantSku);
33
- } finally {
34
- await deleteCatalogProductIfExists(request, token, productId);
35
- }
36
- });
37
- });
@@ -1,40 +0,0 @@
1
- import { expect, test } from '@playwright/test';
2
- import { createProductFixture, deleteCatalogProductIfExists } from '@open-mercato/core/modules/core/__integration__/helpers/catalogFixtures';
3
- import { getAuthToken } from '@open-mercato/core/modules/core/__integration__/helpers/api';
4
- import { login } from '@open-mercato/core/modules/core/__integration__/helpers/auth';
5
-
6
- /**
7
- * TC-CAT-006: Edit Product Variant
8
- * Source: .ai/qa/scenarios/TC-CAT-006-product-variant-edit.md
9
- */
10
- test.describe('TC-CAT-006: Edit Product Variant', () => {
11
- test('should edit default variant SKU and persist change', async ({ page, request }) => {
12
- const productName = `QA TC-CAT-006 ${Date.now()}`;
13
- const baseSku = `QA-CAT-006-BASE-${Date.now()}`;
14
- const updatedSku = `QA-CAT-006-UPD-${Date.now()}`;
15
- let token: string | null = null;
16
- let productId: string | null = null;
17
-
18
- try {
19
- token = await getAuthToken(request);
20
- productId = await createProductFixture(request, token, { title: productName, sku: baseSku });
21
-
22
- await login(page, 'admin');
23
- await page.goto(`/backend/catalog/products/${productId}`);
24
-
25
- await page.getByRole('link', { name: 'Add variant' }).click();
26
- await expect(page).toHaveURL(/\/variants\/create$/);
27
- await page.getByRole('textbox', { name: 'e.g., Blue / Small' }).fill('Editable Variant');
28
- await page.getByRole('textbox', { name: 'Unique identifier' }).fill(baseSku);
29
- await page.getByRole('button', { name: 'Create variant' }).last().click();
30
- await expect(page).toHaveURL(/\/variants\/[0-9a-f-]{36}$/i);
31
-
32
- await page.getByRole('textbox', { name: 'Unique identifier' }).fill(updatedSku);
33
- await page.getByRole('button', { name: 'Save changes' }).last().click();
34
-
35
- await expect(page.getByText(updatedSku, { exact: true })).toBeVisible();
36
- } finally {
37
- await deleteCatalogProductIfExists(request, token, productId);
38
- }
39
- });
40
- });