@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,209 +0,0 @@
1
- /** @jest-environment node */
2
- import { POST as sendQuote } from '@open-mercato/core/modules/sales/api/quotes/send/route'
3
- import { GET as getPublicQuote } from '@open-mercato/core/modules/sales/api/quotes/public/[token]/route'
4
- import { POST as acceptQuote } from '@open-mercato/core/modules/sales/api/quotes/accept/route'
5
- import { SalesOrder, SalesQuote } from '@open-mercato/core/modules/sales/data/entities'
6
- import { Dictionary, DictionaryEntry } from '@open-mercato/core/modules/dictionaries/data/entities'
7
- import { commandRegistry } from '@open-mercato/shared/lib/commands/registry'
8
-
9
- const mockCommandBus = { execute: jest.fn() }
10
- const mockEm = {
11
- fork: jest.fn(),
12
- findOne: jest.fn(),
13
- find: jest.fn(),
14
- persist: jest.fn(),
15
- flush: jest.fn(),
16
- }
17
-
18
- jest.mock('@open-mercato/shared/lib/auth/server', () => ({
19
- getAuthFromRequest: jest.fn(),
20
- }))
21
-
22
- jest.mock('@open-mercato/shared/lib/di/container', () => ({
23
- createRequestContainer: jest.fn(async () => ({
24
- resolve: (token: string) => {
25
- if (token === 'commandBus') return mockCommandBus
26
- if (token === 'em') return mockEm
27
- if (token === 'accessLogService') return null
28
- return null
29
- },
30
- })),
31
- }))
32
-
33
- jest.mock('@open-mercato/shared/lib/i18n/server', () => ({
34
- resolveTranslations: jest.fn().mockResolvedValue({
35
- translate: (_key: string, fallback?: string) => fallback ?? _key,
36
- }),
37
- detectLocale: jest.fn().mockResolvedValue('en'),
38
- }))
39
-
40
- jest.mock('@open-mercato/shared/lib/email/send', () => ({
41
- sendEmail: jest.fn().mockResolvedValue(undefined),
42
- }))
43
-
44
- jest.mock('@open-mercato/core/modules/directory/utils/organizationScope', () => ({
45
- resolveOrganizationScopeForRequest: jest.fn(),
46
- }))
47
-
48
- function makeRequest(body: unknown) {
49
- return new Request('http://localhost/api/sales/quotes/send', {
50
- method: 'POST',
51
- headers: { 'content-type': 'application/json' },
52
- body: JSON.stringify(body),
53
- })
54
- }
55
-
56
- describe('quote send + accept flow', () => {
57
- beforeEach(async () => {
58
- jest.clearAllMocks()
59
- mockEm.fork.mockReturnValue(mockEm)
60
- const { getAuthFromRequest } = await import('@open-mercato/shared/lib/auth/server')
61
- const { resolveOrganizationScopeForRequest } = await import('@open-mercato/core/modules/directory/utils/organizationScope')
62
- ;(getAuthFromRequest as jest.Mock).mockResolvedValue({
63
- sub: 'user-1',
64
- tenantId: '00000000-0000-4000-8000-000000000000',
65
- orgId: '11111111-1111-4111-8111-111111111111',
66
- roles: ['admin'],
67
- })
68
- ;(resolveOrganizationScopeForRequest as jest.Mock).mockResolvedValue({
69
- selectedId: '11111111-1111-4111-8111-111111111111',
70
- filterIds: ['11111111-1111-4111-8111-111111111111'],
71
- allowedIds: ['11111111-1111-4111-8111-111111111111'],
72
- })
73
- })
74
-
75
- test('send sets status=sent, token and validUntil', async () => {
76
- const quote = {
77
- id: '22222222-2222-4222-8222-222222222222',
78
- tenantId: '00000000-0000-4000-8000-000000000000',
79
- organizationId: '11111111-1111-4111-8111-111111111111',
80
- quoteNumber: 'SQ-1',
81
- currencyCode: 'USD',
82
- grandTotalGrossAmount: '10',
83
- status: 'draft',
84
- statusEntryId: null,
85
- customerSnapshot: { customer: { primaryEmail: 'test@example.com' } },
86
- metadata: null,
87
- updatedAt: new Date(),
88
- validUntil: null,
89
- sentAt: null,
90
- acceptanceToken: null,
91
- }
92
-
93
- mockEm.findOne.mockImplementation(async (cls: any, where: any) => {
94
- if (cls === SalesQuote) return where?.id === quote.id ? quote : null
95
- if (cls === Dictionary) return { id: 'dict-1' }
96
- if (cls === DictionaryEntry) return { id: 'entry-sent' }
97
- return null
98
- })
99
-
100
- const res = await sendQuote(makeRequest({ quoteId: quote.id, validForDays: 14 }))
101
- expect(res.status).toBe(200)
102
- expect(quote.status).toBe('sent')
103
- expect(quote.acceptanceToken).toBeTruthy()
104
- expect(quote.validUntil).toBeInstanceOf(Date)
105
- expect(mockEm.flush).toHaveBeenCalled()
106
- })
107
-
108
- test('public view returns expired flag', async () => {
109
- const quote = {
110
- id: 'q-1',
111
- quoteNumber: 'SQ-1',
112
- currencyCode: 'USD',
113
- status: 'sent',
114
- validFrom: null,
115
- validUntil: new Date(Date.now() - 60_000),
116
- subtotalNetAmount: '0',
117
- subtotalGrossAmount: '0',
118
- discountTotalAmount: '0',
119
- taxTotalAmount: '0',
120
- grandTotalNetAmount: '0',
121
- grandTotalGrossAmount: '0',
122
- }
123
- mockEm.findOne.mockResolvedValue(quote)
124
- mockEm.find.mockResolvedValue([])
125
- const res = await getPublicQuote(new Request('http://localhost/api/sales/quotes/public/x'), { params: { token: '00000000-0000-4000-8000-000000000000' } } as any)
126
- expect(res.status).toBe(200)
127
- const body = await res.json()
128
- expect(body.isExpired).toBe(true)
129
- })
130
-
131
- test('accept converts quote to order', async () => {
132
- const quote = {
133
- id: '22222222-2222-4222-8222-222222222222',
134
- tenantId: '00000000-0000-4000-8000-000000000000',
135
- organizationId: '11111111-1111-4111-8111-111111111111',
136
- quoteNumber: 'SQ-1',
137
- status: 'sent',
138
- statusEntryId: null,
139
- validUntil: new Date(Date.now() + 60_000),
140
- updatedAt: new Date(),
141
- }
142
-
143
- mockEm.findOne.mockImplementation(async (cls: any, where: any) => {
144
- if (cls === SalesQuote) return where?.acceptanceToken ? quote : null
145
- if (cls === Dictionary) return { id: 'dict-1' }
146
- if (cls === DictionaryEntry) return { id: 'entry-confirmed' }
147
- if (cls === SalesOrder) return { id: 'order-1', orderNumber: 'SO-1', deletedAt: null }
148
- return null
149
- })
150
- mockCommandBus.execute.mockResolvedValue({ result: { orderId: 'order-1' }, logEntry: null })
151
-
152
- const res = await acceptQuote(makeRequest({ token: '00000000-0000-4000-8000-000000000000' }))
153
- expect(res.status).toBe(200)
154
- const body = await res.json()
155
- expect(body.orderId).toBe('order-1')
156
- expect(quote.status).toBe('confirmed')
157
- expect(mockCommandBus.execute).toHaveBeenCalledWith(
158
- 'sales.quotes.convert_to_order',
159
- expect.objectContaining({ input: { quoteId: quote.id } })
160
- )
161
- })
162
- })
163
-
164
- describe('quote editing invalidates sent token', () => {
165
- test('updating a sent quote clears token and reverts status to draft', async () => {
166
- // Registers commands (including sales.quotes.update) into the global command registry.
167
- await import('@open-mercato/core/modules/sales/commands/documents')
168
-
169
- const handler = commandRegistry.get<any, any>('sales.quotes.update')
170
- expect(handler).toBeTruthy()
171
-
172
- const quote: any = {
173
- id: '33333333-3333-4333-8333-333333333333',
174
- tenantId: '00000000-0000-4000-8000-000000000000',
175
- organizationId: '11111111-1111-4111-8111-111111111111',
176
- status: 'sent',
177
- statusEntryId: 'entry-sent',
178
- acceptanceToken: '44444444-4444-4444-8444-444444444444',
179
- sentAt: new Date(),
180
- currencyCode: 'USD',
181
- updatedAt: new Date(),
182
- }
183
-
184
- mockEm.fork.mockReturnValue(mockEm)
185
- mockEm.findOne.mockImplementation(async (cls: any, where: any) => {
186
- if (cls === SalesQuote) return where?.id === quote.id ? quote : null
187
- if (cls === Dictionary) return { id: 'dict-1' }
188
- if (cls === DictionaryEntry) return { id: 'entry-draft' }
189
- return null
190
- })
191
- mockEm.flush.mockResolvedValue(undefined)
192
-
193
- const ctx: any = {
194
- container: { resolve: (token: string) => (token === 'em' ? mockEm : null) },
195
- auth: { sub: 'user-1', tenantId: quote.tenantId, orgId: quote.organizationId },
196
- organizationScope: null,
197
- selectedOrganizationId: quote.organizationId,
198
- organizationIds: [quote.organizationId],
199
- }
200
-
201
- await handler!.execute({ id: quote.id, comment: 'updated' }, ctx)
202
-
203
- expect(quote.acceptanceToken).toBeNull()
204
- expect(quote.sentAt).toBeNull()
205
- expect(quote.status).toBe('draft')
206
- })
207
- })
208
-
209
-
@@ -1,165 +0,0 @@
1
- /**
2
- * @jest-environment jsdom
3
- */
4
- import * as React from 'react'
5
- import { render, screen, fireEvent } from '@testing-library/react'
6
- import { DocumentHistoryWidget as TimelineWidget } from '../../widgets/injection/document-history/widget.client'
7
- import type { TimelineEntry } from '../../widgets/injection/document-history/widget.client'
8
-
9
- const mockApiCall = jest.fn()
10
-
11
- jest.mock('@open-mercato/ui/backend/utils/apiCall', () => ({
12
- apiCall: (...args: any[]) => mockApiCall(...args),
13
- }))
14
-
15
- jest.mock('@open-mercato/shared/lib/i18n/context', () => {
16
- const t = (key: string, fallback?: string) => fallback ?? key
17
- return { useT: () => t }
18
- })
19
-
20
- jest.mock('@open-mercato/shared/lib/time', () => ({
21
- formatRelativeTime: () => 'just now',
22
- formatDateTime: (iso: string) => iso,
23
- }))
24
-
25
- jest.mock('@open-mercato/shared/lib/utils', () => ({
26
- cn: (...classes: unknown[]) => classes.filter(Boolean).join(' '),
27
- }))
28
-
29
- jest.mock('@open-mercato/ui/primitives/spinner', () => ({
30
- Spinner: () => React.createElement('div', { 'data-testid': 'spinner' }),
31
- }))
32
-
33
- jest.mock('lucide-react', () => ({
34
- ArrowRightLeft: () => null,
35
- Zap: () => null,
36
- MessageSquare: () => null,
37
- User: () => null,
38
- Filter: () => null,
39
- ChevronDown: () => null,
40
- Check: () => null,
41
- }))
42
-
43
- const baseContext = { kind: 'order' as const, record: { id: 'order-1' } }
44
-
45
- const entries: TimelineEntry[] = [
46
- {
47
- id: '1',
48
- occurredAt: new Date().toISOString(),
49
- kind: 'status',
50
- action: 'Order created',
51
- actor: { id: 'u1', label: 'User 1' },
52
- source: 'action_log',
53
- },
54
- {
55
- id: '2',
56
- occurredAt: new Date().toISOString(),
57
- kind: 'action',
58
- action: 'Order sent',
59
- actor: { id: 'u2', label: 'User 2' },
60
- source: 'action_log',
61
- },
62
- {
63
- id: '3',
64
- occurredAt: new Date().toISOString(),
65
- kind: 'comment',
66
- action: 'Note added',
67
- actor: { id: 'u3', label: 'User 3' },
68
- source: 'note',
69
- },
70
- ]
71
-
72
- beforeEach(() => {
73
- jest.clearAllMocks()
74
- mockApiCall.mockImplementation((url: string) => {
75
- if (typeof url === 'string' && url.includes('/api/sales/order-statuses')) {
76
- return Promise.resolve({ ok: true, result: { items: [] } })
77
- }
78
- if (typeof url === 'string' && url.includes('/api/sales/document-history')) {
79
- return Promise.resolve({ ok: true, result: { items: entries } })
80
- }
81
- return Promise.resolve({ ok: false, result: null })
82
- })
83
- })
84
-
85
- describe('TimelineWidget', () => {
86
- it('renders all entries by default', async () => {
87
- render(<TimelineWidget context={baseContext} />)
88
- expect(await screen.findByText('Order created')).toBeInTheDocument()
89
- expect(screen.getByText('Order sent')).toBeInTheDocument()
90
- expect(screen.getByText('Note added')).toBeInTheDocument()
91
- })
92
-
93
- it('shows only status entries when Status changes filter is selected', async () => {
94
- render(<TimelineWidget context={baseContext} />)
95
- expect(await screen.findByText('Order created')).toBeInTheDocument()
96
- fireEvent.click(screen.getByRole('button', { name: /Filters/i }))
97
- fireEvent.click(screen.getByRole('option', { name: /Status changes/i }))
98
- expect(screen.getByText('Order created')).toBeInTheDocument()
99
- expect(screen.queryByText('Order sent')).not.toBeInTheDocument()
100
- expect(screen.queryByText('Note added')).not.toBeInTheDocument()
101
- })
102
-
103
- it('shows only action entries when Actions filter is selected', async () => {
104
- render(<TimelineWidget context={baseContext} />)
105
- expect(await screen.findByText('Order sent')).toBeInTheDocument()
106
- fireEvent.click(screen.getByRole('button', { name: /Filters/i }))
107
- fireEvent.click(screen.getByRole('option', { name: /^Actions$/i }))
108
- expect(screen.getByText('Order sent')).toBeInTheDocument()
109
- expect(screen.queryByText('Order created')).not.toBeInTheDocument()
110
- expect(screen.queryByText('Note added')).not.toBeInTheDocument()
111
- })
112
-
113
- it('shows only comment entries when Comments filter is selected', async () => {
114
- render(<TimelineWidget context={baseContext} />)
115
- expect(await screen.findByText('Note added')).toBeInTheDocument()
116
- fireEvent.click(screen.getByRole('button', { name: /Filters/i }))
117
- fireEvent.click(screen.getByRole('option', { name: /^Comments$/i }))
118
- expect(screen.getByText('Note added')).toBeInTheDocument()
119
- expect(screen.queryByText('Order created')).not.toBeInTheDocument()
120
- expect(screen.queryByText('Order sent')).not.toBeInTheDocument()
121
- })
122
-
123
- it('shows empty state when no entries returned', async () => {
124
- mockApiCall.mockImplementation(() =>
125
- Promise.resolve({ ok: true, result: { items: [] } })
126
- )
127
- render(<TimelineWidget context={baseContext} />)
128
- expect(await screen.findByText(/No history entries yet/i)).toBeInTheDocument()
129
- })
130
-
131
- it('shows loading spinner before data loads', () => {
132
- mockApiCall.mockImplementation(() => new Promise(() => {}))
133
- render(<TimelineWidget context={baseContext} />)
134
- expect(screen.getByTestId('spinner')).toBeInTheDocument()
135
- })
136
-
137
- it('shows actor name from entry', async () => {
138
- render(<TimelineWidget context={baseContext} />)
139
- expect(await screen.findByText('User 1')).toBeInTheDocument()
140
- expect(screen.getByText('User 2')).toBeInTheDocument()
141
- })
142
-
143
- it('shows status transition for status entries with metadata', async () => {
144
- const entriesWithMeta: TimelineEntry[] = [
145
- {
146
- id: '1',
147
- occurredAt: new Date().toISOString(),
148
- kind: 'status',
149
- action: 'confirmed',
150
- actor: { id: 'u1', label: 'User 1' },
151
- source: 'action_log',
152
- metadata: { statusFrom: 'draft', statusTo: 'confirmed' },
153
- },
154
- ]
155
- mockApiCall.mockImplementation((url: string) => {
156
- if (url.includes('/api/sales/document-history')) {
157
- return Promise.resolve({ ok: true, result: { items: entriesWithMeta } })
158
- }
159
- return Promise.resolve({ ok: true, result: { items: [] } })
160
- })
161
- render(<TimelineWidget context={baseContext} />)
162
- expect(await screen.findByText('draft')).toBeInTheDocument()
163
- expect(screen.getByText('confirmed')).toBeInTheDocument()
164
- })
165
- })
@@ -1,112 +0,0 @@
1
- import { GET } from '../route'
2
-
3
- const mockResolveWidgetScope = jest.fn()
4
- const mockFindAndCountWithDecryption = jest.fn()
5
- const mockResolveDateRange = jest.fn()
6
-
7
- jest.mock('../../../../../../customers/api/dashboard/widgets/utils', () => ({
8
- resolveWidgetScope: (...args: unknown[]) => mockResolveWidgetScope(...args),
9
- }))
10
-
11
- jest.mock('@open-mercato/shared/lib/i18n/server', () => ({
12
- resolveTranslations: async () => ({
13
- translate: (_key: string, fallback?: string) => fallback ?? _key,
14
- }),
15
- }))
16
-
17
- jest.mock('@open-mercato/shared/lib/encryption/find', () => ({
18
- findAndCountWithDecryption: (...args: unknown[]) => mockFindAndCountWithDecryption(...args),
19
- }))
20
-
21
- jest.mock('@open-mercato/ui/backend/date-range', () => ({
22
- resolveDateRange: (...args: unknown[]) => mockResolveDateRange(...args),
23
- }))
24
-
25
- jest.mock('@open-mercato/cache', () => ({
26
- runWithCacheTenant: async (_tenantId: string | null, fn: () => unknown) => await fn(),
27
- }))
28
-
29
- describe('sales new-orders widget route', () => {
30
- beforeEach(() => {
31
- jest.clearAllMocks()
32
- mockResolveWidgetScope.mockResolvedValue({
33
- container: { resolve: () => { throw new Error('cache unavailable') } },
34
- em: { marker: 'em' },
35
- tenantId: '33333333-3333-4333-8333-333333333333',
36
- organizationIds: ['11111111-1111-4111-8111-111111111111', '22222222-2222-4222-8222-222222222222'],
37
- })
38
- mockResolveDateRange.mockReturnValue({
39
- start: new Date('2026-02-01T00:00:00.000Z'),
40
- end: new Date('2026-02-07T23:59:59.999Z'),
41
- })
42
- mockFindAndCountWithDecryption.mockResolvedValue([
43
- [
44
- {
45
- id: 'aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa',
46
- orderNumber: 'SO-1001',
47
- status: 'open',
48
- fulfillmentStatus: null,
49
- paymentStatus: null,
50
- customerSnapshot: { displayName: 'Acme Inc' },
51
- customerEntityId: 'bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb',
52
- grandTotalNetAmount: '100.00',
53
- grandTotalGrossAmount: '123.00',
54
- currencyCode: 'USD',
55
- createdAt: new Date('2026-02-05T10:00:00.000Z'),
56
- },
57
- ],
58
- 1,
59
- ])
60
- })
61
-
62
- it('returns 200 with items and total', async () => {
63
- const req = new Request('http://localhost/api/sales/dashboard/widgets/new-orders?limit=5&datePeriod=last7d')
64
- const res = await GET(req)
65
-
66
- expect(res.status).toBe(200)
67
- const body = await res.json()
68
- expect(body.total).toBe(1)
69
- expect(body.items[0]).toMatchObject({
70
- id: 'aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa',
71
- orderNumber: 'SO-1001',
72
- customerName: 'Acme Inc',
73
- grossAmount: '123.00',
74
- })
75
-
76
- expect(mockFindAndCountWithDecryption).toHaveBeenCalledWith(
77
- expect.objectContaining({ marker: 'em' }),
78
- expect.any(Function),
79
- expect.objectContaining({
80
- tenantId: '33333333-3333-4333-8333-333333333333',
81
- deletedAt: null,
82
- organizationId: { $in: ['11111111-1111-4111-8111-111111111111', '22222222-2222-4222-8222-222222222222'] },
83
- }),
84
- expect.objectContaining({ limit: 5 }),
85
- { tenantId: '33333333-3333-4333-8333-333333333333', organizationId: null }
86
- )
87
- })
88
-
89
- it('returns 400 on invalid query parameters', async () => {
90
- const req = new Request('http://localhost/api/sales/dashboard/widgets/new-orders?limit=0')
91
- const res = await GET(req)
92
-
93
- expect(res.status).toBe(400)
94
- const body = await res.json()
95
- expect(body).toHaveProperty('error')
96
- expect(mockResolveWidgetScope).not.toHaveBeenCalled()
97
- })
98
-
99
- it('uses custom date range when datePeriod=custom', async () => {
100
- const req = new Request(
101
- 'http://localhost/api/sales/dashboard/widgets/new-orders?datePeriod=custom&customFrom=2026-02-03T00:00:00.000Z&customTo=2026-02-04T00:00:00.000Z'
102
- )
103
-
104
- const res = await GET(req)
105
- expect(res.status).toBe(200)
106
-
107
- const where = mockFindAndCountWithDecryption.mock.calls[0][2]
108
- expect(where.createdAt.$gte.toISOString()).toBe('2026-02-03T00:00:00.000Z')
109
- expect(where.createdAt.$lte.toISOString()).toBe('2026-02-04T00:00:00.000Z')
110
- expect(mockResolveDateRange).not.toHaveBeenCalled()
111
- })
112
- })
@@ -1,116 +0,0 @@
1
- import { GET } from '../route'
2
-
3
- const mockResolveWidgetScope = jest.fn()
4
- const mockFindAndCountWithDecryption = jest.fn()
5
- const mockResolveDateRange = jest.fn()
6
-
7
- jest.mock('../../../../../../customers/api/dashboard/widgets/utils', () => ({
8
- resolveWidgetScope: (...args: unknown[]) => mockResolveWidgetScope(...args),
9
- }))
10
-
11
- jest.mock('@open-mercato/shared/lib/i18n/server', () => ({
12
- resolveTranslations: async () => ({
13
- translate: (_key: string, fallback?: string) => fallback ?? _key,
14
- }),
15
- }))
16
-
17
- jest.mock('@open-mercato/shared/lib/encryption/find', () => ({
18
- findAndCountWithDecryption: (...args: unknown[]) => mockFindAndCountWithDecryption(...args),
19
- }))
20
-
21
- jest.mock('@open-mercato/ui/backend/date-range', () => ({
22
- resolveDateRange: (...args: unknown[]) => mockResolveDateRange(...args),
23
- }))
24
-
25
- jest.mock('@open-mercato/cache', () => ({
26
- runWithCacheTenant: async (_tenantId: string | null, fn: () => unknown) => await fn(),
27
- }))
28
-
29
- describe('sales new-quotes widget route', () => {
30
- beforeEach(() => {
31
- jest.clearAllMocks()
32
- mockResolveWidgetScope.mockResolvedValue({
33
- container: { resolve: () => { throw new Error('cache unavailable') } },
34
- em: { marker: 'em' },
35
- tenantId: '33333333-3333-4333-8333-333333333333',
36
- organizationIds: ['11111111-1111-4111-8111-111111111111'],
37
- })
38
- mockResolveDateRange.mockReturnValue({
39
- start: new Date('2026-02-01T00:00:00.000Z'),
40
- end: new Date('2026-02-07T23:59:59.999Z'),
41
- })
42
- mockFindAndCountWithDecryption.mockResolvedValue([
43
- [
44
- {
45
- id: 'aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa',
46
- quoteNumber: 'SQ-2001',
47
- status: 'draft',
48
- customerSnapshot: { displayName: 'Acme Inc' },
49
- customerEntityId: 'bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb',
50
- validFrom: new Date('2026-02-01T00:00:00.000Z'),
51
- validUntil: new Date('2026-02-15T00:00:00.000Z'),
52
- grandTotalNetAmount: '80.00',
53
- grandTotalGrossAmount: '98.40',
54
- currencyCode: 'USD',
55
- createdAt: new Date('2026-02-05T10:00:00.000Z'),
56
- convertedOrderId: null,
57
- },
58
- ],
59
- 1,
60
- ])
61
- })
62
-
63
- it('returns 200 with items and total', async () => {
64
- const req = new Request('http://localhost/api/sales/dashboard/widgets/new-quotes?limit=5&datePeriod=last7d')
65
- const res = await GET(req)
66
-
67
- expect(res.status).toBe(200)
68
- const body = await res.json()
69
- expect(body.total).toBe(1)
70
- expect(body.items[0]).toMatchObject({
71
- id: 'aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa',
72
- quoteNumber: 'SQ-2001',
73
- customerName: 'Acme Inc',
74
- grossAmount: '98.40',
75
- })
76
-
77
- expect(mockFindAndCountWithDecryption).toHaveBeenCalledWith(
78
- expect.objectContaining({ marker: 'em' }),
79
- expect.any(Function),
80
- expect.objectContaining({
81
- tenantId: '33333333-3333-4333-8333-333333333333',
82
- deletedAt: null,
83
- organizationId: '11111111-1111-4111-8111-111111111111',
84
- }),
85
- expect.objectContaining({ limit: 5 }),
86
- {
87
- tenantId: '33333333-3333-4333-8333-333333333333',
88
- organizationId: '11111111-1111-4111-8111-111111111111',
89
- }
90
- )
91
- })
92
-
93
- it('returns 400 on invalid query parameters', async () => {
94
- const req = new Request('http://localhost/api/sales/dashboard/widgets/new-quotes?limit=0')
95
- const res = await GET(req)
96
-
97
- expect(res.status).toBe(400)
98
- const body = await res.json()
99
- expect(body).toHaveProperty('error')
100
- expect(mockResolveWidgetScope).not.toHaveBeenCalled()
101
- })
102
-
103
- it('uses custom date range when datePeriod=custom', async () => {
104
- const req = new Request(
105
- 'http://localhost/api/sales/dashboard/widgets/new-quotes?datePeriod=custom&customFrom=2026-02-03T00:00:00.000Z&customTo=2026-02-04T00:00:00.000Z'
106
- )
107
-
108
- const res = await GET(req)
109
- expect(res.status).toBe(200)
110
-
111
- const where = mockFindAndCountWithDecryption.mock.calls[0][2]
112
- expect(where.createdAt.$gte.toISOString()).toBe('2026-02-03T00:00:00.000Z')
113
- expect(where.createdAt.$lte.toISOString()).toBe('2026-02-04T00:00:00.000Z')
114
- expect(mockResolveDateRange).not.toHaveBeenCalled()
115
- })
116
- })