@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,762 +0,0 @@
1
- /**
2
- * Workflow Definitions API Tests
3
- *
4
- * Tests all CRUD operations for workflow definitions API
5
- */
6
-
7
- import { NextRequest } from 'next/server'
8
- import { GET as listDefinitions, POST as createDefinition } from '../definitions/route'
9
- import {
10
- GET as getDefinition,
11
- PUT as updateDefinition,
12
- DELETE as deleteDefinition,
13
- } from '../definitions/[id]/route'
14
- import { WorkflowDefinition, WorkflowInstance } from '../../data/entities'
15
-
16
- // Mock dependencies
17
- jest.mock('@open-mercato/shared/lib/di/container', () => ({
18
- createRequestContainer: jest.fn(),
19
- }))
20
-
21
- jest.mock('@open-mercato/shared/lib/auth/server', () => ({
22
- getAuthFromRequest: jest.fn(),
23
- }))
24
-
25
- jest.mock('@open-mercato/core/modules/directory/utils/organizationScope', () => ({
26
- resolveOrganizationScopeForRequest: jest.fn(),
27
- }))
28
-
29
- describe('Workflow Definitions API', () => {
30
- let mockContainer: any
31
- let mockEm: any
32
- let mockAuthContext: any
33
- let mockRbacService: any
34
-
35
- const testTenantId = 'test-tenant-id'
36
- const testOrgId = 'test-org-id'
37
- const testUserId = 'test-user-id'
38
-
39
- beforeEach(() => {
40
- // Setup mocks
41
- mockAuthContext = {
42
- tenantId: testTenantId,
43
- organizationId: testOrgId,
44
- userId: testUserId,
45
- }
46
-
47
- mockRbacService = {
48
- userHasAllFeatures: jest.fn().mockResolvedValue(true),
49
- }
50
-
51
- mockEm = {
52
- findOne: jest.fn(),
53
- find: jest.fn(),
54
- findAndCount: jest.fn(),
55
- count: jest.fn(),
56
- create: jest.fn(),
57
- persistAndFlush: jest.fn(),
58
- flush: jest.fn(),
59
- }
60
-
61
- mockContainer = {
62
- resolve: jest.fn((name: string) => {
63
- if (name === 'em') return mockEm
64
- if (name === 'authContext') return mockAuthContext
65
- if (name === 'rbacService') return mockRbacService
66
- return null
67
- }),
68
- }
69
-
70
- const { createRequestContainer } = require('@open-mercato/shared/lib/di/container')
71
- createRequestContainer.mockResolvedValue(mockContainer)
72
-
73
- const { getAuthFromRequest } = require('@open-mercato/shared/lib/auth/server')
74
- getAuthFromRequest.mockResolvedValue({
75
- sub: testUserId,
76
- tenantId: testTenantId,
77
- orgId: testOrgId,
78
- })
79
-
80
- const { resolveOrganizationScopeForRequest } = require('@open-mercato/core/modules/directory/utils/organizationScope')
81
- resolveOrganizationScopeForRequest.mockResolvedValue({
82
- selectedId: testOrgId,
83
- })
84
-
85
- jest.clearAllMocks()
86
- })
87
-
88
- // ============================================================================
89
- // GET /api/workflows/definitions - List Definitions
90
- // ============================================================================
91
-
92
- describe('GET /api/workflows/definitions', () => {
93
- test('should list workflow definitions with default pagination', async () => {
94
- const mockDefinitions = [
95
- {
96
- id: 'def-1',
97
- workflowId: 'approval-workflow',
98
- version: 1,
99
- definition: {},
100
- enabled: true,
101
- tenantId: testTenantId,
102
- organizationId: testOrgId,
103
- },
104
- {
105
- id: 'def-2',
106
- workflowId: 'checkout-workflow',
107
- version: 1,
108
- definition: {},
109
- enabled: true,
110
- tenantId: testTenantId,
111
- organizationId: testOrgId,
112
- },
113
- ]
114
-
115
- mockEm.findAndCount.mockResolvedValue([mockDefinitions, 2])
116
-
117
- const request = new NextRequest('http://localhost/api/workflows/definitions')
118
- const response = await listDefinitions(request)
119
- const data = await response.json()
120
-
121
- expect(response.status).toBe(200)
122
- expect(data.data).toHaveLength(2)
123
- expect(data.pagination).toEqual({
124
- total: 2,
125
- limit: 50,
126
- offset: 0,
127
- hasMore: false,
128
- })
129
- expect(mockEm.findAndCount).toHaveBeenCalledWith(
130
- WorkflowDefinition,
131
- expect.objectContaining({
132
- tenantId: testTenantId,
133
- organizationId: testOrgId,
134
- deletedAt: null,
135
- }),
136
- expect.any(Object)
137
- )
138
- })
139
-
140
- test('should filter by enabled status', async () => {
141
- mockEm.findAndCount.mockResolvedValue([[], 0])
142
-
143
- const request = new NextRequest('http://localhost/api/workflows/definitions?enabled=true')
144
- await listDefinitions(request)
145
-
146
- expect(mockEm.findAndCount).toHaveBeenCalledWith(
147
- WorkflowDefinition,
148
- expect.objectContaining({
149
- enabled: true,
150
- }),
151
- expect.any(Object)
152
- )
153
- })
154
-
155
- test('should filter by workflowId', async () => {
156
- mockEm.findAndCount.mockResolvedValue([[], 0])
157
-
158
- const request = new NextRequest(
159
- 'http://localhost/api/workflows/definitions?workflowId=approval-workflow'
160
- )
161
- await listDefinitions(request)
162
-
163
- expect(mockEm.findAndCount).toHaveBeenCalledWith(
164
- WorkflowDefinition,
165
- expect.objectContaining({
166
- workflowId: 'approval-workflow',
167
- }),
168
- expect.any(Object)
169
- )
170
- })
171
-
172
- test('should search in workflowId and name', async () => {
173
- mockEm.findAndCount.mockResolvedValue([[], 0])
174
-
175
- const request = new NextRequest('http://localhost/api/workflows/definitions?search=approval')
176
- await listDefinitions(request)
177
-
178
- expect(mockEm.findAndCount).toHaveBeenCalledWith(
179
- WorkflowDefinition,
180
- expect.objectContaining({
181
- $or: expect.arrayContaining([
182
- expect.objectContaining({ workflowId: { $ilike: '%approval%' } }),
183
- ]),
184
- }),
185
- expect.any(Object)
186
- )
187
- })
188
-
189
- test('should support custom pagination', async () => {
190
- mockEm.findAndCount.mockResolvedValue([[], 100])
191
-
192
- const request = new NextRequest(
193
- 'http://localhost/api/workflows/definitions?limit=20&offset=40'
194
- )
195
- const response = await listDefinitions(request)
196
- const data = await response.json()
197
-
198
- expect(data.pagination).toEqual({
199
- total: 100,
200
- limit: 20,
201
- offset: 40,
202
- hasMore: true,
203
- })
204
- expect(mockEm.findAndCount).toHaveBeenCalledWith(
205
- WorkflowDefinition,
206
- expect.any(Object),
207
- expect.objectContaining({
208
- limit: 20,
209
- offset: 40,
210
- })
211
- )
212
- })
213
-
214
- test('should handle errors gracefully', async () => {
215
- mockEm.findAndCount.mockRejectedValue(new Error('Database error'))
216
-
217
- const request = new NextRequest('http://localhost/api/workflows/definitions')
218
- const response = await listDefinitions(request)
219
-
220
- expect(response.status).toBe(500)
221
- const data = await response.json()
222
- expect(data.error).toBeDefined()
223
- })
224
- })
225
-
226
- // ============================================================================
227
- // POST /api/workflows/definitions - Create Definition
228
- // ============================================================================
229
-
230
- describe('POST /api/workflows/definitions', () => {
231
- const validDefinition = {
232
- workflowId: 'test-workflow',
233
- workflowName: 'Test Workflow',
234
- description: 'A test workflow for unit testing',
235
- version: 1,
236
- definition: {
237
- steps: [
238
- { stepId: 'start', stepName: 'Start', stepType: 'START' },
239
- { stepId: 'end', stepName: 'End', stepType: 'END' },
240
- ],
241
- transitions: [
242
- {
243
- transitionId: 'start-to-end',
244
- fromStepId: 'start',
245
- toStepId: 'end',
246
- trigger: 'auto',
247
- },
248
- ],
249
- },
250
- enabled: true,
251
- }
252
-
253
- test('should create workflow definition successfully', async () => {
254
- mockEm.findOne.mockResolvedValue(null) // No existing definition
255
- mockEm.create.mockReturnValue({
256
- id: 'new-def-id',
257
- ...validDefinition,
258
- tenantId: testTenantId,
259
- organizationId: testOrgId,
260
- })
261
-
262
- const request = new NextRequest('http://localhost/api/workflows/definitions', {
263
- method: 'POST',
264
- body: JSON.stringify(validDefinition),
265
- })
266
-
267
- const response = await createDefinition(request)
268
- const data = await response.json()
269
-
270
- expect(response.status).toBe(201)
271
- expect(data.data).toBeDefined()
272
- expect(data.message).toBe('Workflow definition created successfully')
273
- expect(mockEm.create).toHaveBeenCalledWith(
274
- WorkflowDefinition,
275
- expect.objectContaining({
276
- workflowId: 'test-workflow',
277
- version: 1,
278
- tenantId: testTenantId,
279
- organizationId: testOrgId,
280
- })
281
- )
282
- expect(mockEm.persistAndFlush).toHaveBeenCalled()
283
- })
284
-
285
- test('should check create permission', async () => {
286
- const { createRequestContainer } = require('@open-mercato/shared/lib/di/container')
287
- const localRbacService = {
288
- userHasAllFeatures: jest.fn().mockResolvedValue(false),
289
- }
290
- const localContainer = {
291
- resolve: jest.fn((name: string) => {
292
- if (name === 'em') return mockEm
293
- if (name === 'authContext') return mockAuthContext
294
- if (name === 'rbacService') return localRbacService
295
- return null
296
- }),
297
- }
298
- createRequestContainer.mockResolvedValueOnce(localContainer)
299
-
300
- const request = new NextRequest('http://localhost/api/workflows/definitions', {
301
- method: 'POST',
302
- body: JSON.stringify(validDefinition),
303
- })
304
-
305
- const response = await createDefinition(request)
306
-
307
- expect(response.status).toBe(403)
308
- expect(localRbacService.userHasAllFeatures).toHaveBeenCalledWith(
309
- testUserId,
310
- ['workflows.definitions.create'],
311
- expect.any(Object)
312
- )
313
- })
314
-
315
- test('should validate input schema', async () => {
316
- const invalidDefinition = {
317
- workflowId: 'test',
318
- // Missing version and definition
319
- }
320
-
321
- const request = new NextRequest('http://localhost/api/workflows/definitions', {
322
- method: 'POST',
323
- body: JSON.stringify(invalidDefinition),
324
- })
325
-
326
- const response = await createDefinition(request)
327
- const data = await response.json()
328
-
329
- expect(response.status).toBe(400)
330
- expect(data.error).toBe('Validation failed')
331
- expect(data.details).toBeDefined()
332
- })
333
-
334
- test('should prevent duplicate workflowId + version', async () => {
335
- mockEm.findOne.mockResolvedValue({
336
- id: 'existing-def',
337
- workflowId: 'test-workflow',
338
- version: 1,
339
- })
340
-
341
- const request = new NextRequest('http://localhost/api/workflows/definitions', {
342
- method: 'POST',
343
- body: JSON.stringify(validDefinition),
344
- })
345
-
346
- const response = await createDefinition(request)
347
- const data = await response.json()
348
-
349
- expect(response.status).toBe(409)
350
- expect(data.error).toContain('already exists')
351
- })
352
-
353
- test('should handle database errors', async () => {
354
- mockEm.findOne.mockResolvedValue(null)
355
- mockEm.create.mockImplementation(() => {
356
- throw new Error('Database error')
357
- })
358
-
359
- const request = new NextRequest('http://localhost/api/workflows/definitions', {
360
- method: 'POST',
361
- body: JSON.stringify(validDefinition),
362
- })
363
-
364
- const response = await createDefinition(request)
365
-
366
- expect(response.status).toBe(500)
367
- })
368
- })
369
-
370
- // ============================================================================
371
- // GET /api/workflows/definitions/[id] - Get Definition
372
- // ============================================================================
373
-
374
- describe('GET /api/workflows/definitions/[id]', () => {
375
- test('should get workflow definition by id', async () => {
376
- const mockDefinition = {
377
- id: 'def-1',
378
- workflowId: 'test-workflow',
379
- version: 1,
380
- definition: {},
381
- enabled: true,
382
- tenantId: testTenantId,
383
- organizationId: testOrgId,
384
- }
385
-
386
- mockEm.findOne.mockResolvedValue(mockDefinition)
387
-
388
- const request = new NextRequest('http://localhost/api/workflows/definitions/def-1')
389
- const response = await getDefinition(request, { params: Promise.resolve({ id: 'def-1' }) })
390
- const data = await response.json()
391
-
392
- expect(response.status).toBe(200)
393
- expect(data.data).toEqual(mockDefinition)
394
- expect(mockEm.findOne).toHaveBeenCalledWith(
395
- WorkflowDefinition,
396
- expect.objectContaining({
397
- id: 'def-1',
398
- tenantId: testTenantId,
399
- organizationId: testOrgId,
400
- deletedAt: null,
401
- })
402
- )
403
- })
404
-
405
- test('should return 404 if definition not found', async () => {
406
- mockEm.findOne.mockResolvedValue(null)
407
-
408
- const request = new NextRequest('http://localhost/api/workflows/definitions/non-existent')
409
- const response = await getDefinition(request, { params: Promise.resolve({ id: 'non-existent' }) })
410
-
411
- expect(response.status).toBe(404)
412
- })
413
-
414
- test('should enforce tenant isolation', async () => {
415
- mockEm.findOne.mockResolvedValue(null) // Simulates finding nothing due to tenant mismatch
416
-
417
- const request = new NextRequest('http://localhost/api/workflows/definitions/other-tenant-def')
418
- const response = await getDefinition(request, { params: Promise.resolve({ id: 'other-tenant-def' }) })
419
-
420
- expect(response.status).toBe(404)
421
- expect(mockEm.findOne).toHaveBeenCalledWith(
422
- WorkflowDefinition,
423
- expect.objectContaining({
424
- tenantId: testTenantId,
425
- organizationId: testOrgId,
426
- })
427
- )
428
- })
429
- })
430
-
431
- // ============================================================================
432
- // PUT /api/workflows/definitions/[id] - Update Definition
433
- // ============================================================================
434
-
435
- describe('PUT /api/workflows/definitions/[id]', () => {
436
- const mockDefinition = {
437
- id: 'def-1',
438
- workflowId: 'test-workflow',
439
- version: 1,
440
- definition: {
441
- steps: [
442
- { stepId: 'start', stepName: 'Start', stepType: 'START' },
443
- { stepId: 'end', stepName: 'End', stepType: 'END' },
444
- ],
445
- transitions: [
446
- {
447
- transitionId: 'start-to-end',
448
- fromStepId: 'start',
449
- toStepId: 'end',
450
- trigger: 'auto',
451
- },
452
- ],
453
- },
454
- enabled: true,
455
- tenantId: testTenantId,
456
- organizationId: testOrgId,
457
- updatedAt: new Date(),
458
- }
459
-
460
- test('should update workflow definition', async () => {
461
- mockEm.findOne.mockResolvedValue(mockDefinition)
462
-
463
- const updates = {
464
- definition: {
465
- steps: [
466
- { stepId: 'start', stepName: 'Start', stepType: 'START' },
467
- { stepId: 'middle', stepName: 'Middle', stepType: 'AUTOMATED' },
468
- { stepId: 'end', stepName: 'End', stepType: 'END' },
469
- ],
470
- transitions: [
471
- {
472
- transitionId: 'start-to-middle',
473
- fromStepId: 'start',
474
- toStepId: 'middle',
475
- trigger: 'auto',
476
- },
477
- {
478
- transitionId: 'middle-to-end',
479
- fromStepId: 'middle',
480
- toStepId: 'end',
481
- trigger: 'auto',
482
- },
483
- ],
484
- },
485
- enabled: false,
486
- }
487
-
488
- const request = new NextRequest('http://localhost/api/workflows/definitions/def-1', {
489
- method: 'PUT',
490
- body: JSON.stringify(updates),
491
- })
492
-
493
- const response = await updateDefinition(request, { params: Promise.resolve({ id: 'def-1' }) })
494
- const data = await response.json()
495
-
496
- expect(response.status).toBe(200)
497
- expect(data.message).toBe('Workflow definition updated successfully')
498
- expect(mockDefinition.enabled).toBe(false)
499
- expect(mockEm.flush).toHaveBeenCalled()
500
- })
501
-
502
- test('should check edit permission', async () => {
503
- const { createRequestContainer } = require('@open-mercato/shared/lib/di/container')
504
- const localRbacService = {
505
- userHasAllFeatures: jest.fn().mockResolvedValue(false),
506
- }
507
- const localContainer = {
508
- resolve: jest.fn((name: string) => {
509
- if (name === 'em') return mockEm
510
- if (name === 'authContext') return mockAuthContext
511
- if (name === 'rbacService') return localRbacService
512
- return null
513
- }),
514
- }
515
- createRequestContainer.mockResolvedValueOnce(localContainer)
516
-
517
- const request = new NextRequest('http://localhost/api/workflows/definitions/def-1', {
518
- method: 'PUT',
519
- body: JSON.stringify({ enabled: false }),
520
- })
521
-
522
- const response = await updateDefinition(request, { params: Promise.resolve({ id: 'def-1' }) })
523
-
524
- expect(response.status).toBe(403)
525
- expect(localRbacService.userHasAllFeatures).toHaveBeenCalledWith(
526
- testUserId,
527
- ['workflows.definitions.edit'],
528
- expect.any(Object)
529
- )
530
- })
531
-
532
- test('should return 404 if definition not found', async () => {
533
- mockEm.findOne.mockResolvedValue(null)
534
-
535
- const request = new NextRequest('http://localhost/api/workflows/definitions/non-existent', {
536
- method: 'PUT',
537
- body: JSON.stringify({ enabled: false }),
538
- })
539
-
540
- const response = await updateDefinition(request, { params: Promise.resolve({ id: 'non-existent' }) })
541
-
542
- expect(response.status).toBe(404)
543
- })
544
-
545
- test('should validate update input', async () => {
546
- mockEm.findOne.mockResolvedValue(mockDefinition)
547
-
548
- const invalidUpdate = {
549
- definition: 'not-an-object', // Invalid type
550
- }
551
-
552
- const request = new NextRequest('http://localhost/api/workflows/definitions/def-1', {
553
- method: 'PUT',
554
- body: JSON.stringify(invalidUpdate),
555
- })
556
-
557
- const response = await updateDefinition(request, { params: Promise.resolve({ id: 'def-1' }) })
558
-
559
- expect(response.status).toBe(400)
560
- })
561
-
562
- test('should allow partial updates', async () => {
563
- mockEm.findOne.mockResolvedValue(mockDefinition)
564
-
565
- const partialUpdate = {
566
- enabled: false,
567
- // definition not provided
568
- }
569
-
570
- const request = new NextRequest('http://localhost/api/workflows/definitions/def-1', {
571
- method: 'PUT',
572
- body: JSON.stringify(partialUpdate),
573
- })
574
-
575
- const response = await updateDefinition(request, { params: Promise.resolve({ id: 'def-1' }) })
576
-
577
- expect(response.status).toBe(200)
578
- expect(mockDefinition.enabled).toBe(false)
579
- })
580
- })
581
-
582
- // ============================================================================
583
- // DELETE /api/workflows/definitions/[id] - Delete Definition
584
- // ============================================================================
585
-
586
- describe('DELETE /api/workflows/definitions/[id]', () => {
587
- const mockDefinition = {
588
- id: 'def-1',
589
- workflowId: 'test-workflow',
590
- version: 1,
591
- definition: {},
592
- enabled: true,
593
- tenantId: testTenantId,
594
- organizationId: testOrgId,
595
- deletedAt: null,
596
- updatedAt: new Date(),
597
- }
598
-
599
- test('should soft delete workflow definition', async () => {
600
- mockEm.findOne.mockResolvedValue(mockDefinition)
601
- mockEm.count.mockResolvedValue(0) // No active instances
602
-
603
- const request = new NextRequest('http://localhost/api/workflows/definitions/def-1', {
604
- method: 'DELETE',
605
- })
606
-
607
- const response = await deleteDefinition(request, { params: Promise.resolve({ id: 'def-1' }) })
608
- const data = await response.json()
609
-
610
- expect(response.status).toBe(200)
611
- expect(data.message).toBe('Workflow definition deleted successfully')
612
- expect(mockDefinition.deletedAt).toBeInstanceOf(Date)
613
- expect(mockEm.flush).toHaveBeenCalled()
614
- })
615
-
616
- test('should check delete permission', async () => {
617
- const { createRequestContainer } = require('@open-mercato/shared/lib/di/container')
618
- const localRbacService = {
619
- userHasAllFeatures: jest.fn().mockResolvedValue(false),
620
- }
621
- const localContainer = {
622
- resolve: jest.fn((name: string) => {
623
- if (name === 'em') return mockEm
624
- if (name === 'authContext') return mockAuthContext
625
- if (name === 'rbacService') return localRbacService
626
- return null
627
- }),
628
- }
629
- createRequestContainer.mockResolvedValueOnce(localContainer)
630
-
631
- const request = new NextRequest('http://localhost/api/workflows/definitions/def-1', {
632
- method: 'DELETE',
633
- })
634
-
635
- const response = await deleteDefinition(request, { params: Promise.resolve({ id: 'def-1' }) })
636
-
637
- expect(response.status).toBe(403)
638
- expect(localRbacService.userHasAllFeatures).toHaveBeenCalledWith(
639
- testUserId,
640
- ['workflows.definitions.delete'],
641
- expect.any(Object)
642
- )
643
- })
644
-
645
- test('should return 404 if definition not found', async () => {
646
- mockEm.findOne.mockResolvedValue(null)
647
-
648
- const request = new NextRequest('http://localhost/api/workflows/definitions/non-existent', {
649
- method: 'DELETE',
650
- })
651
-
652
- const response = await deleteDefinition(request, { params: Promise.resolve({ id: 'non-existent' }) })
653
-
654
- expect(response.status).toBe(404)
655
- })
656
-
657
- test('should prevent deletion if active instances exist', async () => {
658
- mockEm.findOne.mockResolvedValue(mockDefinition)
659
- mockEm.count.mockResolvedValue(3) // 3 active instances
660
-
661
- const request = new NextRequest('http://localhost/api/workflows/definitions/def-1', {
662
- method: 'DELETE',
663
- })
664
-
665
- const response = await deleteDefinition(request, { params: Promise.resolve({ id: 'def-1' }) })
666
- const data = await response.json()
667
-
668
- expect(response.status).toBe(409)
669
- expect(data.error).toContain('3 active instance')
670
- // Don't check deletedAt mutation when deletion is prevented
671
- expect(mockEm.flush).not.toHaveBeenCalled()
672
- })
673
-
674
- test('should check for active RUNNING instances', async () => {
675
- mockEm.findOne.mockResolvedValue(mockDefinition)
676
- mockEm.count.mockResolvedValue(0)
677
-
678
- const request = new NextRequest('http://localhost/api/workflows/definitions/def-1', {
679
- method: 'DELETE',
680
- })
681
-
682
- await deleteDefinition(request, { params: Promise.resolve({ id: 'def-1' }) })
683
-
684
- expect(mockEm.count).toHaveBeenCalledWith(
685
- expect.anything(),
686
- expect.objectContaining({
687
- definitionId: 'def-1',
688
- status: { $in: ['RUNNING', 'WAITING'] },
689
- })
690
- )
691
- })
692
-
693
- test('should handle database errors during delete', async () => {
694
- mockEm.findOne.mockResolvedValue(mockDefinition)
695
- mockEm.count.mockRejectedValue(new Error('Database error'))
696
-
697
- const request = new NextRequest('http://localhost/api/workflows/definitions/def-1', {
698
- method: 'DELETE',
699
- })
700
-
701
- const response = await deleteDefinition(request, { params: Promise.resolve({ id: 'def-1' }) })
702
-
703
- expect(response.status).toBe(500)
704
- })
705
- })
706
-
707
- // ============================================================================
708
- // Multi-tenant Isolation Tests
709
- // ============================================================================
710
-
711
- describe('Multi-tenant isolation', () => {
712
- test('should only return definitions for current tenant in list', async () => {
713
- mockEm.findAndCount.mockResolvedValue([[], 0])
714
-
715
- const request = new NextRequest('http://localhost/api/workflows/definitions')
716
- await listDefinitions(request)
717
-
718
- expect(mockEm.findAndCount).toHaveBeenCalledWith(
719
- WorkflowDefinition,
720
- expect.objectContaining({
721
- tenantId: testTenantId,
722
- organizationId: testOrgId,
723
- }),
724
- expect.any(Object)
725
- )
726
- })
727
-
728
- test('should not allow accessing other tenant definitions in get', async () => {
729
- mockEm.findOne.mockResolvedValue(null)
730
-
731
- const request = new NextRequest('http://localhost/api/workflows/definitions/other-tenant-def')
732
- const response = await getDefinition(request, { params: Promise.resolve({ id: 'other-tenant-def' }) })
733
-
734
- expect(response.status).toBe(404)
735
- })
736
-
737
- test('should not allow updating other tenant definitions', async () => {
738
- mockEm.findOne.mockResolvedValue(null)
739
-
740
- const request = new NextRequest('http://localhost/api/workflows/definitions/other-tenant-def', {
741
- method: 'PUT',
742
- body: JSON.stringify({ enabled: false }),
743
- })
744
-
745
- const response = await updateDefinition(request, { params: Promise.resolve({ id: 'other-tenant-def' }) })
746
-
747
- expect(response.status).toBe(404)
748
- })
749
-
750
- test('should not allow deleting other tenant definitions', async () => {
751
- mockEm.findOne.mockResolvedValue(null)
752
-
753
- const request = new NextRequest('http://localhost/api/workflows/definitions/other-tenant-def', {
754
- method: 'DELETE',
755
- })
756
-
757
- const response = await deleteDefinition(request, { params: Promise.resolve({ id: 'other-tenant-def' }) })
758
-
759
- expect(response.status).toBe(404)
760
- })
761
- })
762
- })