@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,134 +0,0 @@
1
- /**
2
- * @jest-environment jsdom
3
- */
4
-
5
- import '@testing-library/jest-dom'
6
- import * as React from 'react'
7
- import { fireEvent, screen, waitFor } from '@testing-library/react'
8
- import { CachePanel } from '../CachePanel'
9
- import { renderWithProviders } from '@open-mercato/shared/lib/testing/renderWithProviders'
10
- import { readApiResultOrThrow } from '@open-mercato/ui/backend/utils/apiCall'
11
- import { flash } from '@open-mercato/ui/backend/FlashMessages'
12
-
13
- jest.mock('@open-mercato/ui/backend/utils/apiCall', () => ({
14
- readApiResultOrThrow: jest.fn(),
15
- }))
16
-
17
- jest.mock('@open-mercato/ui/backend/FlashMessages', () => ({
18
- flash: jest.fn(),
19
- }))
20
-
21
- // Mock HTMLDialogElement methods for jsdom compatibility
22
- HTMLDialogElement.prototype.showModal = jest.fn(function(this: HTMLDialogElement) {
23
- this.open = true
24
- this.setAttribute('open', '')
25
- })
26
- HTMLDialogElement.prototype.close = jest.fn(function(this: HTMLDialogElement) {
27
- this.open = false
28
- this.removeAttribute('open')
29
- })
30
-
31
- const dict = {
32
- 'configs.cache.title': 'Cache overview',
33
- 'configs.cache.description': 'Inspect cache',
34
- 'configs.cache.loading': 'Loading cache statistics…',
35
- 'configs.cache.loadError': 'Failed to load cache statistics.',
36
- 'configs.cache.refresh': 'Refresh',
37
- 'configs.cache.purgeAll': 'Purge all cache',
38
- 'configs.cache.purgeSegment': 'Purge segment',
39
- 'configs.cache.purgeSegmentSuccess': 'Purged {{segment}} ({{count}})',
40
- 'configs.cache.purgeAllSuccess': 'All cache purged',
41
- 'configs.cache.table.segment': 'Segment',
42
- 'configs.cache.table.path': 'Path',
43
- 'configs.cache.table.method': 'Method',
44
- 'configs.cache.table.count': 'Cached keys',
45
- 'configs.cache.table.countValue': '{{count}} keys',
46
- 'configs.cache.table.actions': 'Actions',
47
- 'configs.cache.table.pathUnknown': 'n/a',
48
- 'configs.cache.generatedAt': 'Stats generated {{timestamp}}',
49
- 'configs.cache.totalEntries': '{{count}} cached entries',
50
- 'configs.cache.retry': 'Retry',
51
- 'configs.cache.purgeError': 'Failed to purge cache segment.',
52
- 'configs.cache.purgeAllError': 'Failed to purge',
53
- 'configs.cache.purgeSegmentConfirm': 'Confirm segment purge?',
54
- 'configs.cache.purgeAllConfirm': 'Confirm all purge?',
55
- 'configs.cache.inactive': 'Inactive',
56
- 'ui.dialogs.confirm.confirmText': 'Confirm',
57
- 'ui.dialogs.confirm.cancelText': 'Cancel',
58
- 'ui.dialog.close.ariaLabel': 'Close',
59
- }
60
-
61
- const statsPayload = {
62
- generatedAt: '2025-01-01T00:00:00.000Z',
63
- totalKeys: 5,
64
- segments: [
65
- {
66
- segment: 'users.list',
67
- resource: 'users',
68
- method: 'GET',
69
- path: '/api/users',
70
- keyCount: 3,
71
- },
72
- ],
73
- }
74
-
75
- describe('CachePanel', () => {
76
- beforeEach(() => {
77
- jest.resetAllMocks()
78
- })
79
-
80
- it('renders cache statistics and management actions', async () => {
81
- ;(readApiResultOrThrow as jest.Mock)
82
- .mockResolvedValueOnce(statsPayload) // stats
83
- .mockResolvedValueOnce({ ok: true, granted: ['configs.cache.manage'] }) // feature check
84
-
85
- renderWithProviders(<CachePanel />, { dict })
86
-
87
- await waitFor(() => {
88
- expect(screen.getByText('users.list')).toBeInTheDocument()
89
- })
90
- expect(screen.getByRole('button', { name: 'Purge all cache' })).toBeInTheDocument()
91
- })
92
-
93
- it('purges a segment when user confirms', async () => {
94
- ;(readApiResultOrThrow as jest.Mock)
95
- .mockResolvedValueOnce(statsPayload)
96
- .mockResolvedValueOnce({ ok: true, granted: ['configs.cache.manage'] })
97
- .mockResolvedValueOnce({
98
- stats: statsPayload,
99
- deleted: 1,
100
- })
101
-
102
- renderWithProviders(<CachePanel />, { dict })
103
-
104
- await waitFor(() => {
105
- expect(screen.getByText('users.list')).toBeInTheDocument()
106
- })
107
-
108
- // Click purge segment button
109
- fireEvent.click(screen.getByRole('button', { name: 'Purge segment' }))
110
-
111
- // Wait for confirm dialog to appear (dialog title)
112
- await waitFor(() => {
113
- expect(screen.getByText('Confirm segment purge?')).toBeInTheDocument()
114
- })
115
-
116
- // Click confirm button by text (inside dialog)
117
- const confirmButtons = screen.getAllByText('Confirm')
118
- fireEvent.click(confirmButtons[confirmButtons.length - 1])
119
-
120
- await waitFor(() => {
121
- expect(flash).toHaveBeenCalledWith('Purged users.list (1)', 'success')
122
- })
123
- })
124
-
125
- it('shows an error notice when stats cannot be loaded', async () => {
126
- ;(readApiResultOrThrow as jest.Mock).mockRejectedValueOnce(new Error('boom'))
127
-
128
- renderWithProviders(<CachePanel />, { dict })
129
-
130
- await waitFor(() => {
131
- expect(screen.getByText('boom')).toBeInTheDocument()
132
- })
133
- })
134
- })
@@ -1,93 +0,0 @@
1
- /**
2
- * @jest-environment jsdom
3
- */
4
-
5
- import '@testing-library/jest-dom'
6
- import * as React from 'react'
7
- import { screen, waitFor } from '@testing-library/react'
8
- import { SystemStatusPanel } from '../SystemStatusPanel'
9
- import { renderWithProviders } from '@open-mercato/shared/lib/testing/renderWithProviders'
10
- import { readApiResultOrThrow } from '@open-mercato/ui/backend/utils/apiCall'
11
-
12
- jest.mock('@open-mercato/ui/backend/utils/apiCall', () => ({
13
- readApiResultOrThrow: jest.fn(),
14
- }))
15
-
16
- const dict = {
17
- 'configs.systemStatus.title': 'System status',
18
- 'configs.systemStatus.description': 'Review system flags',
19
- 'configs.systemStatus.loading': 'Loading status snapshot…',
20
- 'configs.systemStatus.runtime.development': 'Development',
21
- 'configs.systemStatus.state.enabled': 'Enabled',
22
- 'configs.systemStatus.state.disabled': 'Disabled',
23
- 'configs.systemStatus.state.set': 'Set',
24
- 'configs.systemStatus.state.unset': 'Unset',
25
- 'configs.systemStatus.state.unknown': 'Unknown',
26
- 'configs.systemStatus.details.currentValue': 'Current value',
27
- 'configs.systemStatus.details.defaultValue': 'Default',
28
- 'configs.systemStatus.details.updateHint': 'Update {{key}}',
29
- 'configs.systemStatus.details.updateDocs': 'Docs',
30
- 'configs.systemStatus.viewDocs': 'Documentation',
31
- 'configs.systemStatus.error': 'Failed to load system status',
32
- 'configs.systemStatus.invalidResponse': 'Unexpected response when loading system status',
33
- 'configs.systemStatus.category.debug': 'Debug tools',
34
- 'configs.systemStatus.item.verbose': 'Verbose logging',
35
- 'configs.systemStatus.item.verbose.description': 'Verbose logging description',
36
- }
37
-
38
- const snapshot = {
39
- generatedAt: '2025-01-01T00:00:00.000Z',
40
- runtimeMode: 'development',
41
- categories: [
42
- {
43
- key: 'debug',
44
- labelKey: 'configs.systemStatus.category.debug',
45
- descriptionKey: null,
46
- items: [
47
- {
48
- key: 'DEBUG_LOGGING',
49
- labelKey: 'configs.systemStatus.item.verbose',
50
- descriptionKey: 'configs.systemStatus.item.verbose.description',
51
- state: 'enabled',
52
- value: '1',
53
- defaultValue: '0',
54
- docUrl: null,
55
- },
56
- ],
57
- },
58
- ],
59
- }
60
-
61
- describe('SystemStatusPanel', () => {
62
- beforeEach(() => {
63
- jest.resetAllMocks()
64
- })
65
-
66
- it('renders snapshot categories returned from the API', async () => {
67
- ;(readApiResultOrThrow as jest.Mock).mockResolvedValueOnce(snapshot)
68
- renderWithProviders(<SystemStatusPanel />, { dict })
69
-
70
- await waitFor(() => {
71
- expect(screen.getByText('Debug tools')).toBeInTheDocument()
72
- expect(screen.getByText('Verbose logging')).toBeInTheDocument()
73
- })
74
- })
75
-
76
- it('shows a friendly error if the payload is not a snapshot', async () => {
77
- ;(readApiResultOrThrow as jest.Mock).mockResolvedValueOnce({ invalid: true })
78
- renderWithProviders(<SystemStatusPanel />, { dict })
79
-
80
- await waitFor(() => {
81
- expect(screen.getByText('Unexpected response when loading system status')).toBeInTheDocument()
82
- })
83
- })
84
-
85
- it('handles request failures', async () => {
86
- ;(readApiResultOrThrow as jest.Mock).mockRejectedValueOnce(new Error('boom'))
87
- renderWithProviders(<SystemStatusPanel />, { dict })
88
-
89
- await waitFor(() => {
90
- expect(screen.getByText('boom')).toBeInTheDocument()
91
- })
92
- })
93
- })
@@ -1,55 +0,0 @@
1
- import { buildSystemStatusSnapshot } from '../system-status'
2
-
3
- function findItemValue(snapshot: ReturnType<typeof buildSystemStatusSnapshot>, key: string): string | null {
4
- for (const category of snapshot.categories) {
5
- const item = category.items.find((entry) => entry.key === key)
6
- if (item) return item.value
7
- }
8
- return null
9
- }
10
-
11
- describe('buildSystemStatusSnapshot', () => {
12
- it('masks credentials for DATABASE_URL', () => {
13
- const snapshot = buildSystemStatusSnapshot({
14
- DATABASE_URL: 'postgresql://app_user:secret@db.example.com:5432/mercato?sslmode=require',
15
- })
16
-
17
- const value = findItemValue(snapshot, 'DATABASE_URL')
18
- expect(value).toBe('postgresql://db.example.com:5432/mercato?sslmode=require')
19
- expect(value).not.toContain('app_user')
20
- expect(value).not.toContain('secret')
21
- })
22
-
23
- it('keeps database url unchanged when no credentials are present', () => {
24
- const snapshot = buildSystemStatusSnapshot({
25
- DATABASE_URL: 'postgresql://db.example.com:5432/mercato',
26
- })
27
-
28
- expect(findItemValue(snapshot, 'DATABASE_URL')).toBe('postgresql://db.example.com:5432/mercato')
29
- })
30
-
31
- it('masks credentials for malformed DSNs using fallback redaction', () => {
32
- const cases = [
33
- {
34
- input: 'postgresql://app_user:se/cret@db.example.com:5432/mercato',
35
- expected: 'postgresql://db.example.com:5432/mercato',
36
- },
37
- {
38
- input: 'postgresql://app_user:secret@/mercato',
39
- expected: 'postgresql:///mercato',
40
- },
41
- {
42
- input: 'postgresql://app_user:secret@db.example.com:5432/mercato?sslmode=require',
43
- expected: 'postgresql://db.example.com:5432/mercato?sslmode=require',
44
- },
45
- ]
46
-
47
- for (const entry of cases) {
48
- const snapshot = buildSystemStatusSnapshot({ DATABASE_URL: entry.input })
49
- const value = findItemValue(snapshot, 'DATABASE_URL')
50
- expect(value).toBe(entry.expected)
51
- expect(value).not.toContain('app_user')
52
- expect(value).not.toContain('secret')
53
- }
54
- })
55
- })
@@ -1,135 +0,0 @@
1
- jest.mock('@open-mercato/core/modules/catalog/lib/seeds', () => ({
2
- installExampleCatalogData: jest.fn(),
3
- }))
4
- jest.mock('@open-mercato/cache', () => ({
5
- runWithCacheTenant: jest.fn((_, fn) => fn()),
6
- }))
7
- jest.mock('@open-mercato/shared/lib/crud/cache-stats', () => ({
8
- collectCrudCacheStats: jest.fn().mockResolvedValue({ segments: [] }),
9
- purgeCrudCacheSegment: jest.fn(),
10
- }))
11
- jest.mock('@open-mercato/shared/lib/crud/cache', () => ({
12
- isCrudCacheEnabled: jest.fn().mockReturnValue(false),
13
- resolveCrudCache: jest.fn(),
14
- }))
15
-
16
- import { compareVersions, actionsUpToVersion, findUpgradeAction, upgradeActions } from '../upgrade-actions'
17
-
18
- describe('compareVersions', () => {
19
- describe('basic comparisons', () => {
20
- it('returns 0 for equal versions', () => {
21
- expect(compareVersions('1.0.0', '1.0.0')).toBe(0)
22
- expect(compareVersions('0.3.4', '0.3.4')).toBe(0)
23
- })
24
-
25
- it('returns negative when first version is less than second', () => {
26
- expect(compareVersions('1.0.0', '2.0.0')).toBeLessThan(0)
27
- expect(compareVersions('1.0.0', '1.1.0')).toBeLessThan(0)
28
- expect(compareVersions('1.0.0', '1.0.1')).toBeLessThan(0)
29
- })
30
-
31
- it('returns positive when first version is greater than second', () => {
32
- expect(compareVersions('2.0.0', '1.0.0')).toBeGreaterThan(0)
33
- expect(compareVersions('1.1.0', '1.0.0')).toBeGreaterThan(0)
34
- expect(compareVersions('1.0.1', '1.0.0')).toBeGreaterThan(0)
35
- })
36
- })
37
-
38
- describe('edge cases - partial versions', () => {
39
- it('handles versions with fewer than 3 parts via semver coercion', () => {
40
- expect(compareVersions('1.2', '1.2.0')).toBe(0)
41
- expect(compareVersions('1', '1.0.0')).toBe(0)
42
- expect(compareVersions('2', '1.9.9')).toBeGreaterThan(0)
43
- })
44
- })
45
-
46
- describe('edge cases - versions with extra parts', () => {
47
- it('handles versions with more than 3 parts by coercing to first 3', () => {
48
- expect(compareVersions('1.2.3.4', '1.2.3')).toBe(0)
49
- expect(compareVersions('1.2.3.4.5', '1.2.3')).toBe(0)
50
- })
51
- })
52
-
53
- describe('edge cases - prerelease versions', () => {
54
- it('coerces prerelease versions to numeric form', () => {
55
- expect(compareVersions('1.2.3-alpha', '1.2.3')).toBe(0)
56
- expect(compareVersions('1.2.3-beta.1', '1.2.3')).toBe(0)
57
- })
58
- })
59
-
60
- describe('edge cases - invalid versions', () => {
61
- it('throws an error for completely invalid version strings', () => {
62
- expect(() => compareVersions('invalid', '1.0.0')).toThrow(/Invalid version string/)
63
- expect(() => compareVersions('1.0.0', 'invalid')).toThrow(/Invalid version string/)
64
- })
65
-
66
- it('throws an error for empty strings', () => {
67
- expect(() => compareVersions('', '1.0.0')).toThrow(/Invalid version string/)
68
- expect(() => compareVersions('1.0.0', '')).toThrow(/Invalid version string/)
69
- })
70
- })
71
-
72
- describe('boundary cases', () => {
73
- it('handles version 0.0.0', () => {
74
- expect(compareVersions('0.0.0', '0.0.1')).toBeLessThan(0)
75
- expect(compareVersions('0.0.1', '0.0.0')).toBeGreaterThan(0)
76
- })
77
-
78
- it('handles large version numbers', () => {
79
- expect(compareVersions('100.200.300', '100.200.299')).toBeGreaterThan(0)
80
- expect(compareVersions('999.999.999', '1000.0.0')).toBeLessThan(0)
81
- })
82
- })
83
- })
84
-
85
- describe('actionsUpToVersion', () => {
86
- it('returns actions up to and including the specified version', () => {
87
- const actions = actionsUpToVersion('0.3.4')
88
- actions.forEach((action) => {
89
- expect(compareVersions(action.version, '0.3.4')).toBeLessThanOrEqual(0)
90
- })
91
- })
92
-
93
- it('returns empty array for versions before any action', () => {
94
- const actions = actionsUpToVersion('0.0.1')
95
- expect(actions).toEqual([])
96
- })
97
-
98
- it('returns actions sorted by version then by id', () => {
99
- const actions = actionsUpToVersion('99.99.99')
100
- for (let i = 1; i < actions.length; i++) {
101
- const prevVersion = actions[i - 1].version
102
- const currentVersion = actions[i].version
103
- const versionComparison = compareVersions(prevVersion, currentVersion)
104
- if (versionComparison === 0) {
105
- expect(actions[i - 1].id.localeCompare(actions[i].id)).toBeLessThanOrEqual(0)
106
- } else {
107
- expect(versionComparison).toBeLessThan(0)
108
- }
109
- }
110
- })
111
- })
112
-
113
- describe('findUpgradeAction', () => {
114
- it('finds an action by id within the version range', () => {
115
- const existingAction = upgradeActions[0]
116
- if (existingAction) {
117
- const found = findUpgradeAction(existingAction.id, existingAction.version)
118
- expect(found).toBeDefined()
119
- expect(found?.id).toBe(existingAction.id)
120
- }
121
- })
122
-
123
- it('returns undefined for non-existent action id', () => {
124
- const found = findUpgradeAction('non.existent.action', '99.99.99')
125
- expect(found).toBeUndefined()
126
- })
127
-
128
- it('returns undefined when action version exceeds max version', () => {
129
- const existingAction = upgradeActions[0]
130
- if (existingAction) {
131
- const found = findUpgradeAction(existingAction.id, '0.0.1')
132
- expect(found).toBeUndefined()
133
- }
134
- })
135
- })
@@ -1,70 +0,0 @@
1
- import { test, expect } from '@playwright/test';
2
- import { login } from '@open-mercato/core/modules/core/__integration__/helpers/auth';
3
- import { getAuthToken, apiRequest } from '@open-mercato/core/modules/core/__integration__/helpers/api';
4
-
5
- /**
6
- * TC-ADMIN-001: Create API Key
7
- * Source: .ai/qa/scenarios/TC-ADMIN-001-api-key-creation.md
8
- *
9
- * Verifies that API keys can be created from the create form,
10
- * that the generated key is shown once, and that the key appears
11
- * in the API keys list.
12
- *
13
- * Navigation: Settings → Auth → API Keys → Create
14
- */
15
- test.describe('TC-ADMIN-001: Create API Key', () => {
16
- test('should create an API key and show it in the list', async ({ page, request }) => {
17
- const keyName = `QA TC-ADMIN-001 ${Date.now()}`;
18
- let token: string | null = null;
19
-
20
- try {
21
- token = await getAuthToken(request);
22
- await login(page, 'admin');
23
-
24
- // Navigate to API Keys via Settings
25
- await page.goto('/backend/api-keys');
26
- await expect(page.getByRole('heading', { name: 'API Keys', level: 2 })).toBeVisible();
27
-
28
- // Click Create
29
- await page.getByRole('link', { name: 'Create' }).click();
30
- await expect(page).toHaveURL(/\/backend\/api-keys\/create$/);
31
- await expect(page.getByText('Create API Key')).toBeVisible();
32
-
33
- // Fill in the name
34
- const nameField = page.locator('form').getByRole('textbox').first();
35
- await nameField.fill(keyName);
36
-
37
- // Click Create button
38
- await page.getByRole('button', { name: 'Create' }).last().click();
39
-
40
- // After creation, a dialog shows the generated key (one-time view)
41
- await expect(page.getByText('Keep this key safe')).toBeVisible({ timeout: 10_000 });
42
- await expect(page.getByText(/Prefix: omk_/)).toBeVisible();
43
-
44
- // Close the key dialog
45
- await page.getByRole('button', { name: 'Close' }).click();
46
-
47
- // Navigate back to list
48
- await page.goto('/backend/api-keys');
49
- await page.getByText('Loading data...').waitFor({ state: 'hidden', timeout: 10_000 }).catch(() => {});
50
-
51
- // Search for the created key
52
- await page.getByRole('textbox', { name: 'Search' }).fill(keyName);
53
- await expect(page.getByText(keyName)).toBeVisible({ timeout: 5_000 });
54
- } finally {
55
- // Cleanup: try to delete the API key via API (best effort)
56
- if (token) {
57
- const listResponse = await apiRequest(request, 'GET', '/api/auth/api-keys', { token });
58
- const listData = await listResponse.json().catch(() => null);
59
- if (listData && Array.isArray(listData.items)) {
60
- const keyToDelete = listData.items.find((item: Record<string, unknown>) =>
61
- item.name === keyName,
62
- );
63
- if (keyToDelete && typeof keyToDelete.id === 'string') {
64
- await apiRequest(request, 'DELETE', `/api/auth/api-keys?id=${keyToDelete.id}`, { token }).catch(() => {});
65
- }
66
- }
67
- }
68
- }
69
- });
70
- });
@@ -1,83 +0,0 @@
1
- import { test, expect } from '@playwright/test';
2
- import { login } from '@open-mercato/core/modules/core/__integration__/helpers/auth';
3
- import { getAuthToken, apiRequest } from '@open-mercato/core/modules/core/__integration__/helpers/api';
4
-
5
- /**
6
- * TC-ADMIN-002: Revoke API Key
7
- * Source: .ai/qa/scenarios/TC-ADMIN-002-api-key-revocation.md
8
- *
9
- * Verifies that an existing API key can be revoked.
10
- * Creates a key via API, then revokes it through the UI.
11
- *
12
- * Navigation: Settings → Auth → API Keys
13
- */
14
- test.describe('TC-ADMIN-002: Revoke API Key', () => {
15
- test('should revoke an existing API key', async ({ page, request }) => {
16
- const keyName = `QA TC-ADMIN-002 ${Date.now()}`;
17
- let token: string | null = null;
18
- let keyId: string | null = null;
19
-
20
- try {
21
- token = await getAuthToken(request);
22
-
23
- // Create an API key via the UI first
24
- await login(page, 'admin');
25
- await page.goto('/backend/api-keys/create');
26
-
27
- const nameField = page.locator('form').getByRole('textbox').first();
28
- await nameField.fill(keyName);
29
- await page.getByRole('button', { name: 'Create' }).last().click();
30
-
31
- // Wait for the key dialog
32
- await expect(page.getByText('Keep this key safe')).toBeVisible({ timeout: 10_000 });
33
- await page.getByRole('button', { name: 'Close' }).click();
34
-
35
- // Navigate to API keys list
36
- await page.goto('/backend/api-keys');
37
- await page.getByText('Loading data...').waitFor({ state: 'hidden', timeout: 10_000 }).catch(() => {});
38
-
39
- // Search for the key
40
- await page.getByRole('textbox', { name: 'Search' }).fill(keyName);
41
- await expect(page.getByText(keyName)).toBeVisible({ timeout: 5_000 });
42
-
43
- // Find and click the row actions for this key — look for a revoke/delete button
44
- const keyRow = page.locator('table tbody tr').filter({ hasText: keyName }).first();
45
- await expect(keyRow).toBeVisible();
46
-
47
- // Click the actions button on the row
48
- const actionsButton = keyRow.getByRole('button').last();
49
- await actionsButton.click();
50
-
51
- // Look for a Revoke or Delete option in the dropdown menu
52
- const revokeButton = page.getByRole('menuitem', { name: /revoke|delete/i }).first();
53
- await expect(revokeButton).toBeVisible({ timeout: 3_000 });
54
- await revokeButton.click();
55
-
56
- // Handle confirmation dialog if present
57
- const confirmButton = page.getByRole('button', { name: /confirm|revoke|delete|yes/i });
58
- if (await confirmButton.isVisible().catch(() => false)) {
59
- await confirmButton.click();
60
- }
61
-
62
- // Verify the key is revoked or removed
63
- await page.waitForTimeout(1_000);
64
- await page.getByRole('textbox', { name: 'Search' }).fill(keyName);
65
- // Key should either show as revoked or be removed from list
66
- // We verify at least that no error occurred
67
- } finally {
68
- // Cleanup via API
69
- if (token) {
70
- const listResponse = await apiRequest(request, 'GET', '/api/auth/api-keys', { token });
71
- const listData = await listResponse.json().catch(() => null);
72
- if (listData && Array.isArray(listData.items)) {
73
- const keyToDelete = listData.items.find((item: Record<string, unknown>) =>
74
- item.name === keyName,
75
- );
76
- if (keyToDelete && typeof keyToDelete.id === 'string') {
77
- await apiRequest(request, 'DELETE', `/api/auth/api-keys?id=${keyToDelete.id}`, { token }).catch(() => {});
78
- }
79
- }
80
- }
81
- }
82
- });
83
- });
@@ -1,50 +0,0 @@
1
- import { test, expect } from '@playwright/test';
2
- import { login } from '@open-mercato/core/modules/core/__integration__/helpers/auth';
3
-
4
- /**
5
- * TC-ADMIN-003: View and Filter Audit Logs
6
- * Source: .ai/qa/scenarios/TC-ADMIN-003-audit-log-viewing.md
7
- *
8
- * Verifies that audit logs are accessible via the Security sidebar section,
9
- * display action and access log tabs, and show log entries with details.
10
- *
11
- * Navigation: Main sidebar → Security → Audit Logs
12
- */
13
- test.describe('TC-ADMIN-003: View and Filter Audit Logs', () => {
14
- test('should display audit log tabs with action log entries', async ({ page }) => {
15
- await login(page, 'admin');
16
- await page.goto('/backend/audit-logs');
17
-
18
- // Verify Action Log tab is selected by default
19
- const actionLogTab = page.getByRole('tab', { name: 'Action Log' });
20
- await expect(actionLogTab).toBeVisible();
21
- await expect(actionLogTab).toHaveAttribute('aria-selected', 'true');
22
-
23
- // Verify Access Log tab exists
24
- await expect(page.getByRole('tab', { name: 'Access Log' })).toBeVisible();
25
-
26
- // Verify Action Log heading
27
- await expect(page.getByRole('heading', { name: 'Action Log', level: 2 })).toBeVisible();
28
-
29
- // Verify the undoable only filter
30
- await expect(page.getByRole('checkbox', { name: 'Undoable only' })).toBeVisible();
31
-
32
- // Wait for table to load
33
- await page.getByText('Loading data...').waitFor({ state: 'hidden', timeout: 10_000 }).catch(() => {});
34
-
35
- // Verify table columns
36
- await expect(page.getByRole('columnheader', { name: 'Action' })).toBeVisible();
37
- await expect(page.getByRole('columnheader', { name: 'Resource' })).toBeVisible();
38
- await expect(page.getByRole('columnheader', { name: 'User' })).toBeVisible();
39
- await expect(page.getByRole('columnheader', { name: 'When' })).toBeVisible();
40
- await expect(page.getByRole('columnheader', { name: 'Status' })).toBeVisible();
41
-
42
- // Verify audit log entries exist (since we just logged in, there should be entries)
43
- const rows = page.locator('table tbody tr');
44
- await expect(rows.first()).toBeVisible();
45
-
46
- // Switch to Access Log tab
47
- await page.getByRole('tab', { name: 'Access Log' }).click();
48
- await expect(page.getByRole('heading', { name: 'Access Log', level: 2 })).toBeVisible();
49
- });
50
- });