@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,77 +0,0 @@
1
- import { test, expect } from '@playwright/test';
2
- import { login } from '@open-mercato/core/modules/core/__integration__/helpers/auth';
3
- import { apiRequest, getAuthToken } from '@open-mercato/core/modules/core/__integration__/helpers/api';
4
-
5
- /**
6
- * TC-ADMIN-004: Manage Dictionary Entries
7
- * Source: .ai/qa/scenarios/TC-ADMIN-004-dictionary-management.md
8
- *
9
- * Verifies that the dictionaries page loads, shows existing dictionaries
10
- * with their entries, and allows creating a new dictionary.
11
- *
12
- * Navigation: Settings → Module Configuration → Dictionaries
13
- */
14
- test.describe('TC-ADMIN-004: Dictionary Management', () => {
15
- test('should display dictionaries and allow creating a new one', async ({ page, request }) => {
16
- let token: string | null = null;
17
- let dictionaryId: string | null = null;
18
- let dictionaryKey: string | null = null;
19
-
20
- try {
21
- token = await getAuthToken(request);
22
- await login(page, 'admin');
23
- await page.goto('/backend/config/dictionaries');
24
-
25
- // Verify page heading
26
- await expect(page.getByRole('heading', { name: 'Dictionaries', level: 2 })).toBeVisible();
27
-
28
- // Wait for loading
29
- await page.getByText('Loading dictionaries').waitFor({ state: 'hidden', timeout: 10_000 }).catch(() => {});
30
-
31
- // Verify the "New dictionary" button is available
32
- await expect(page.getByRole('button', { name: 'New dictionary' })).toBeVisible();
33
-
34
- // The first dictionary should be auto-selected — verify its details panel
35
- await expect(page.getByText('Manage reusable values and appearance')).toBeVisible({ timeout: 5_000 });
36
- await expect(page.getByRole('button', { name: 'Refresh' })).toBeVisible();
37
- await expect(page.getByRole('button', { name: 'Add entry' })).toBeVisible();
38
-
39
- // Verify the entries table columns
40
- await expect(page.getByRole('columnheader', { name: 'Value' })).toBeVisible();
41
- await expect(page.getByRole('columnheader', { name: 'Label' })).toBeVisible();
42
-
43
- // Create a new dictionary
44
- await page.getByRole('button', { name: 'New dictionary' }).click();
45
-
46
- // Verify the dialog appears
47
- await expect(page.getByRole('heading', { name: 'Create dictionary', level: 2 })).toBeVisible({ timeout: 5_000 });
48
-
49
- // Fill in the Key field (slug)
50
- const timestamp = Date.now();
51
- const dictKey = `qa_tc_admin_004_${timestamp}`;
52
- const dictName = `QA TC-ADMIN-004 ${timestamp}`;
53
- dictionaryKey = dictKey;
54
- await page.getByRole('textbox', { name: 'slug_name' }).fill(dictKey);
55
-
56
- // Fill in the Name field
57
- await page.getByRole('textbox', { name: 'Display name' }).fill(dictName);
58
-
59
- // Submit
60
- await page.getByRole('button', { name: 'Save' }).click();
61
-
62
- // Verify the new dictionary appears in the sidebar list
63
- await expect(page.getByText(dictName)).toBeVisible({ timeout: 5_000 });
64
- } finally {
65
- if (token && dictionaryKey) {
66
- const listResponse = await apiRequest(request, 'GET', '/api/dictionaries', { token }).catch(() => null);
67
- if (listResponse && listResponse.ok()) {
68
- const listData = (await listResponse.json().catch(() => null)) as { items?: Array<{ id?: string; key?: string }> } | null;
69
- dictionaryId = listData?.items?.find((item) => item.key === dictionaryKey)?.id ?? null;
70
- }
71
- }
72
- if (token && dictionaryId) {
73
- await apiRequest(request, 'DELETE', `/api/dictionaries/${encodeURIComponent(dictionaryId)}`, { token }).catch(() => {});
74
- }
75
- }
76
- });
77
- });
@@ -1,49 +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-005: Feature Toggles Management
6
- * Source: .ai/qa/scenarios/TC-ADMIN-005-feature-toggle-create.md
7
- *
8
- * Verifies that the feature toggles page is accessible to superadmins,
9
- * displays existing toggles with proper columns, and has a working
10
- * create form with all expected fields.
11
- *
12
- * Navigation: Settings → Feature Toggles → Global
13
- */
14
- test.describe('TC-ADMIN-005: Feature Toggles Management', () => {
15
- test('should display feature toggles list and create form for superadmin', async ({ page }) => {
16
- await login(page, 'superadmin');
17
-
18
- await page.goto('/backend/feature-toggles/global');
19
- await expect(page.getByRole('heading', { name: /Feature Toggles/i })).toBeVisible();
20
- await page.getByText('Loading data...').waitFor({ state: 'hidden', timeout: 10_000 }).catch(() => {});
21
-
22
- await expect(page.getByRole('columnheader', { name: 'Category' })).toBeVisible();
23
- await expect(page.getByRole('columnheader', { name: 'Identifier' })).toBeVisible();
24
- await expect(page.getByRole('columnheader', { name: 'Name' })).toBeVisible();
25
- await expect(page.getByRole('columnheader', { name: 'Type' })).toBeVisible();
26
-
27
- const createLink = page.getByRole('link', { name: /^Create$/i }).first();
28
- if (await createLink.isVisible().catch(() => false)) {
29
- await createLink.click();
30
- } else {
31
- await page.getByRole('button', { name: /^Create$/i }).first().click();
32
- }
33
- await expect(page).toHaveURL(/\/backend\/feature-toggles\/global\/create(?:\?.*)?$/);
34
- await expect(page.locator('main').getByText('Create Feature Toggle', { exact: true })).toBeVisible();
35
-
36
- await expect(page.getByText('Basic Information')).toBeVisible();
37
- await expect(page.getByText('Type Configuration')).toBeVisible();
38
- await expect(page.getByText('Default Value', { exact: true })).toBeVisible();
39
-
40
- const textboxes = page.locator('main').getByRole('textbox');
41
- expect(await textboxes.count()).toBeGreaterThanOrEqual(3);
42
-
43
- const comboboxes = page.locator('main').getByRole('combobox');
44
- expect(await comboboxes.count()).toBeGreaterThan(0);
45
-
46
- await expect(page.getByRole('button', { name: 'Save' }).first()).toBeVisible();
47
- await expect(page.getByRole('link', { name: /Back/i }).first()).toBeVisible();
48
- });
49
- });
@@ -1,59 +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-006: Feature Toggle Overrides
6
- * Source: .ai/qa/scenarios/TC-ADMIN-006-feature-toggle-override.md
7
- *
8
- * Verifies that the feature toggle overrides page displays per-tenant
9
- * overrides with proper columns, and that clicking an override shows
10
- * the detail view with enable/disable controls.
11
- *
12
- * Navigation: Settings → Feature Toggles → Overrides
13
- */
14
- test.describe('TC-ADMIN-006: Feature Toggle Overrides', () => {
15
- test('should display overrides list and allow viewing override details', async ({ page }) => {
16
- await login(page, 'superadmin');
17
-
18
- // Navigate to overrides page
19
- await page.goto('/backend/feature-toggles/overrides');
20
- await expect(page.getByRole('heading', { name: 'Feature Toggle Overrides', level: 2 })).toBeVisible();
21
- await page.getByText('Loading data...').waitFor({ state: 'hidden', timeout: 10_000 }).catch(() => {});
22
-
23
- // Verify table columns
24
- await expect(page.getByRole('columnheader', { name: 'Tenant' })).toBeVisible();
25
- await expect(page.getByRole('columnheader', { name: 'Identifier' })).toBeVisible();
26
- await expect(page.getByRole('columnheader', { name: 'Name' })).toBeVisible();
27
- await expect(page.getByRole('columnheader', { name: 'Category' })).toBeVisible();
28
- await expect(page.getByRole('columnheader', { name: 'Override State' })).toBeVisible();
29
-
30
- // Verify Refresh button
31
- await expect(page.getByRole('button', { name: 'Refresh' })).toBeVisible();
32
-
33
- // Verify at least one override row exists
34
- const rows = page.locator('table tbody tr');
35
- await expect(rows.first()).toBeVisible();
36
-
37
- // Click the first override row to see detail view
38
- await rows.first().click();
39
-
40
- // Verify detail page loads with expected sections
41
- await expect(page.getByRole('heading', { name: 'Details', level: 2 })).toBeVisible();
42
- await expect(page.getByRole('heading', { name: 'Description', level: 2 })).toBeVisible();
43
- await expect(page.getByRole('heading', { name: 'Default Value', level: 2 })).toBeVisible();
44
-
45
- // Verify override section
46
- await expect(page.getByText('Override', { exact: true })).toBeVisible();
47
- await expect(page.getByText('Override Mode')).toBeVisible();
48
-
49
- // Verify Enable Override checkbox
50
- await expect(page.getByRole('checkbox', { name: 'Enable Override' })).toBeVisible();
51
-
52
- // Verify Save Override button
53
- await expect(page.getByRole('button', { name: 'Save Override' })).toBeVisible();
54
-
55
- // Verify toggle detail fields
56
- await expect(page.getByText('Name')).toBeVisible();
57
- await expect(page.getByText('Identifier')).toBeVisible();
58
- });
59
- });
@@ -1,68 +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-007: Custom Entity Creation
6
- * Source: .ai/qa/scenarios/TC-ADMIN-007-custom-entity-creation.md
7
- *
8
- * Verifies that the User Entities page displays existing entities,
9
- * and that the create form has all expected fields.
10
- *
11
- * Navigation: Settings → Data Designer → User Entities
12
- */
13
- test.describe('TC-ADMIN-007: Custom Entity Creation', () => {
14
- test('should display user entities list and create form', async ({ page }) => {
15
- await login(page, 'superadmin');
16
-
17
- // Navigate to User Entities
18
- await page.goto('/backend/entities/user');
19
- await expect(page.getByRole('heading', { name: 'User Entities', level: 2 })).toBeVisible();
20
- await page.getByText('Loading data...').waitFor({ state: 'hidden', timeout: 10_000 }).catch(() => {});
21
-
22
- // Verify table columns
23
- await expect(page.getByRole('columnheader', { name: /Entity/ })).toBeVisible();
24
- await expect(page.getByRole('columnheader', { name: 'Label' })).toBeVisible();
25
- await expect(page.getByRole('columnheader', { name: 'Source' })).toBeVisible();
26
- await expect(page.getByRole('columnheader', { name: 'Fields' })).toBeVisible();
27
- await expect(page.getByRole('columnheader', { name: 'In Sidebar' })).toBeVisible();
28
-
29
- // Verify at least one entity row exists
30
- const rows = page.locator('table tbody tr');
31
- await expect(rows.first()).toBeVisible();
32
-
33
- // Verify Export and Create buttons
34
- await expect(page.getByRole('button', { name: 'Export' })).toBeVisible();
35
- await expect(page.getByRole('link', { name: 'Create' })).toBeVisible();
36
-
37
- // Verify Search box
38
- await expect(page.getByRole('textbox', { name: 'Search' })).toBeVisible();
39
-
40
- // Navigate to Create form
41
- await page.getByRole('link', { name: 'Create' }).click();
42
- await expect(page).toHaveURL(/\/backend\/entities\/user\/create$/);
43
- await expect(page.getByText('Create Entity')).toBeVisible();
44
-
45
- // Verify form fields
46
- await expect(page.getByText('Entity ID', { exact: false })).toBeVisible();
47
- await expect(page.getByText('Label', { exact: false })).toBeVisible();
48
- await expect(page.getByText('Description')).toBeVisible();
49
-
50
- // Verify Entity ID default placeholder value
51
- const entityIdField = page.getByRole('textbox', { name: 'module_name:entity_id' });
52
- await expect(entityIdField).toBeVisible();
53
- await expect(entityIdField).toHaveValue('user:your_entity');
54
-
55
- // Verify Default Editor combobox
56
- await expect(page.locator('main').getByRole('combobox')).toBeVisible();
57
-
58
- // Verify Show in sidebar checkbox
59
- await expect(page.getByRole('checkbox', { name: 'Show in sidebar' })).toBeVisible();
60
-
61
- // Verify Create and Cancel buttons
62
- await expect(page.getByRole('button', { name: 'Create' }).first()).toBeVisible();
63
- await expect(page.getByRole('link', { name: 'Cancel' }).first()).toBeVisible();
64
-
65
- // Verify Back link
66
- await expect(page.getByRole('link', { name: '← Back' })).toBeVisible();
67
- });
68
- });
@@ -1,127 +0,0 @@
1
- import { expect, test } from '@playwright/test';
2
- import { login } from '@open-mercato/core/modules/core/__integration__/helpers/auth';
3
- import { apiRequest, getAuthToken } from '@open-mercato/core/modules/core/__integration__/helpers/api';
4
-
5
- function escapeRegExp(value: string): string {
6
- return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
7
- }
8
-
9
- /**
10
- * TC-ADMIN-008: Create Custom Entity Record
11
- * Source: .ai/qa/scenarios/TC-ADMIN-008-custom-entity-record.md
12
- */
13
- test.describe('TC-ADMIN-008: Create Custom Entity Record', () => {
14
- test('should create and edit a record for a custom entity', async ({ page, request }) => {
15
- const stamp = Date.now();
16
- const entityId = `user:qa_admin_008_${stamp}`;
17
- const location = `QA Location ${stamp}`;
18
- const title = `QA Title ${stamp}`;
19
- const updatedTitle = `${title} Updated`;
20
- let token: string | null = null;
21
- let recordId: string | null = null;
22
-
23
- const fillField = async (label: string, fallbackIndex: number, value: string): Promise<void> => {
24
- const namedInput = page
25
- .getByRole('textbox', { name: new RegExp(`^${escapeRegExp(label)}$`, 'i') })
26
- .first();
27
- if ((await namedInput.count()) > 0) {
28
- await namedInput.fill(value);
29
- return;
30
- }
31
-
32
- const textboxes = page.locator('main').getByRole('textbox');
33
- await expect(textboxes.nth(fallbackIndex)).toBeVisible();
34
- await textboxes.nth(fallbackIndex).fill(value);
35
- };
36
-
37
- try {
38
- token = await getAuthToken(request, 'superadmin');
39
- const entityCreateResponse = await apiRequest(request, 'POST', '/api/entities/entities', {
40
- token,
41
- data: {
42
- entityId,
43
- label: `QA Admin 008 ${stamp}`,
44
- description: 'Temporary QA entity',
45
- showInSidebar: false,
46
- },
47
- });
48
- expect(entityCreateResponse.ok()).toBeTruthy();
49
-
50
- const fieldDefinitions = [
51
- { key: 'location', label: 'Location' },
52
- { key: 'title', label: 'Title' },
53
- { key: 'event_date', label: 'Event Date' },
54
- ];
55
- for (const field of fieldDefinitions) {
56
- const definitionResponse = await apiRequest(request, 'POST', '/api/entities/definitions', {
57
- token,
58
- data: {
59
- entityId,
60
- key: field.key,
61
- kind: 'text',
62
- configJson: {
63
- label: field.label,
64
- priority: 10,
65
- },
66
- },
67
- });
68
- expect(definitionResponse.ok()).toBeTruthy();
69
- }
70
-
71
- await login(page, 'superadmin');
72
- await page.goto(`/backend/entities/user/${encodeURIComponent(entityId)}/records`);
73
- await page.getByText('Loading data...').waitFor({ state: 'hidden', timeout: 10_000 }).catch(() => {});
74
-
75
- await expect(page.getByRole('heading', { name: new RegExp(`Records:\\s*${entityId}`, 'i') })).toBeVisible();
76
- await page.getByRole('link', { name: 'Create' }).click();
77
-
78
- await expect(page).toHaveURL(new RegExp(`/backend/entities/user/${encodeURIComponent(entityId)}/records/create$`, 'i'));
79
- await fillField('Location', 0, location);
80
- await fillField('Title', 1, title);
81
- await fillField('Event Date', 2, '2026-02-14');
82
- await page.getByRole('button', { name: 'Save' }).first().click();
83
-
84
- await expect(page).toHaveURL(new RegExp(`/backend/entities/user/${encodeURIComponent(entityId)}/records$`, 'i'));
85
- await expect(page.getByRole('row', { name: new RegExp(location, 'i') })).toBeVisible();
86
-
87
- await page.getByRole('row', { name: new RegExp(location, 'i') }).click();
88
- await expect(page).toHaveURL(new RegExp(`/backend/entities/user/${encodeURIComponent(entityId)}/records/[^/]+$`, 'i'));
89
- recordId =
90
- page.url().match(new RegExp(`/backend/entities/user/${encodeURIComponent(entityId)}/records/([^/?#]+)$`, 'i'))?.[1] ??
91
- null;
92
-
93
- await fillField('Title', 1, updatedTitle);
94
- await page.getByRole('button', { name: 'Save' }).first().click();
95
-
96
- await expect(page).toHaveURL(new RegExp(`/backend/entities/user/${encodeURIComponent(entityId)}/records$`, 'i'));
97
- await expect(page.getByRole('row', { name: new RegExp(updatedTitle, 'i') })).toBeVisible();
98
- } finally {
99
- if (token && recordId) {
100
- await apiRequest(
101
- request,
102
- 'DELETE',
103
- `/api/entities/records?entityId=${encodeURIComponent(entityId)}&recordId=${encodeURIComponent(recordId)}`,
104
- { token },
105
- ).catch(() => {});
106
- }
107
- if (token) {
108
- await apiRequest(request, 'DELETE', '/api/entities/definitions', {
109
- token,
110
- data: { entityId, key: 'event_date' },
111
- }).catch(() => {});
112
- await apiRequest(request, 'DELETE', '/api/entities/definitions', {
113
- token,
114
- data: { entityId, key: 'title' },
115
- }).catch(() => {});
116
- await apiRequest(request, 'DELETE', '/api/entities/definitions', {
117
- token,
118
- data: { entityId, key: 'location' },
119
- }).catch(() => {});
120
- await apiRequest(request, 'DELETE', '/api/entities/entities', {
121
- token,
122
- data: { entityId },
123
- }).catch(() => {});
124
- }
125
- }
126
- });
127
- });
@@ -1,48 +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-009: View System Status Dashboard
6
- * Source: .ai/qa/scenarios/TC-ADMIN-009-system-status-view.md
7
- *
8
- * Verifies that the system status page displays environment variable
9
- * configuration sections for profiling, logging, security, caching,
10
- * query index, and entities.
11
- *
12
- * Navigation: Settings → System → System status
13
- */
14
- test.describe('TC-ADMIN-009: View System Status Dashboard', () => {
15
- test('should display system status sections with environment variable details', async ({ page }) => {
16
- await login(page, 'admin');
17
- await page.goto('/backend/config/system-status');
18
-
19
- // Wait for the page to load
20
- await expect(page.getByRole('heading', { name: 'System status', level: 2 })).toBeVisible();
21
- await expect(page.getByText('Review debugging, cache, and logging flags')).toBeVisible();
22
-
23
- // Wait for loading to finish
24
- await page.getByText('Loading status snapshot').waitFor({ state: 'hidden', timeout: 10_000 }).catch(() => {});
25
-
26
- // Verify runtime mode is shown
27
- await expect(page.getByText(/Runtime mode:/)).toBeVisible();
28
-
29
- // Verify key sections are present
30
- await expect(page.getByRole('heading', { name: 'Profiling', level: 3 })).toBeVisible();
31
- await expect(page.getByRole('heading', { name: 'Logging', level: 3 })).toBeVisible();
32
- await expect(page.getByRole('heading', { name: 'Security', level: 3 })).toBeVisible();
33
- await expect(page.getByRole('heading', { name: 'Caching', level: 3 })).toBeVisible();
34
- await expect(page.getByRole('heading', { name: 'Query index', level: 3 })).toBeVisible();
35
-
36
- // Verify at least one env var card shows Current value and Default
37
- await expect(page.getByText('Current value').first()).toBeVisible();
38
- await expect(page.getByText('Default').first()).toBeVisible();
39
-
40
- // Verify specific env var cards exist
41
- await expect(page.getByRole('heading', { name: 'Cache strategy', level: 4 })).toBeVisible();
42
- await expect(page.getByRole('heading', { name: 'Password min length', level: 4 })).toBeVisible();
43
-
44
- // Verify the page is accessible via Settings sidebar
45
- await expect(page.getByRole('link', { name: 'System status' })).toBeVisible();
46
- await expect(page.getByRole('link', { name: 'Cache' })).toBeVisible();
47
- });
48
- });
@@ -1,57 +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-010: Cache Management
6
- * Source: .ai/qa/scenarios/TC-ADMIN-010-cache-management.md
7
- *
8
- * Verifies that the cache overview page displays cache statistics,
9
- * segments with purge controls, and a global purge button.
10
- *
11
- * Navigation: Settings → System → Cache
12
- */
13
- test.describe('TC-ADMIN-010: Cache Management', () => {
14
- test('should display cache statistics and allow purging', async ({ page }) => {
15
- await login(page, 'superadmin');
16
-
17
- // First visit a CRUD page to ensure some cache entries exist
18
- await page.goto('/backend/customers/companies');
19
- await page.getByText('Loading data...').waitFor({ state: 'hidden', timeout: 10_000 }).catch(() => {});
20
-
21
- // Navigate to cache management
22
- await page.goto('/backend/config/cache');
23
-
24
- // Verify page heading
25
- await expect(page.getByRole('heading', { name: 'Cache overview', level: 2 })).toBeVisible();
26
- await expect(page.getByText('Inspect cached responses and clear segments')).toBeVisible();
27
-
28
- // Wait for loading
29
- await page.getByText('Loading cache statistics').waitFor({ state: 'hidden', timeout: 10_000 }).catch(() => {});
30
-
31
- // Verify stats are displayed
32
- await expect(page.getByText(/\d+ cached entr/)).toBeVisible();
33
- await expect(page.getByText(/Stats generated/)).toBeVisible();
34
-
35
- // Verify control buttons
36
- await expect(page.getByRole('button', { name: 'Refresh' })).toBeVisible();
37
- const purgeAllButton = page.getByRole('button', { name: 'Purge all cache' }).first();
38
- if (await purgeAllButton.isVisible().catch(() => false)) {
39
- await expect(purgeAllButton).toBeVisible();
40
- }
41
-
42
- // Verify table structure + purge flow only when segments are present
43
- const hasEmptyState = await page.getByText(/No cached responses for this tenant\./).isVisible().catch(() => false);
44
- if (!hasEmptyState) {
45
- await expect(page.getByRole('columnheader', { name: 'Segment' })).toBeVisible();
46
- await expect(page.getByRole('columnheader', { name: 'Path' })).toBeVisible();
47
- await expect(page.getByRole('columnheader', { name: 'Method' })).toBeVisible();
48
- await expect(page.getByRole('columnheader', { name: 'Cached keys' })).toBeVisible();
49
-
50
- const firstPurgeButton = page.getByRole('button', { name: 'Purge segment' }).first();
51
- await firstPurgeButton.click();
52
- await expect(page.getByText(/Stats generated/)).toBeVisible();
53
- } else {
54
- await expect(page.getByText(/No cached responses for this tenant\./)).toBeVisible();
55
- }
56
- });
57
- });
@@ -1,84 +0,0 @@
1
- import { type APIRequestContext } from '@playwright/test';
2
- import { DEFAULT_CREDENTIALS, type Role } from './auth';
3
-
4
- const BASE_URL = process.env.BASE_URL || 'http://localhost:3000';
5
-
6
- export async function getAuthToken(
7
- request: APIRequestContext,
8
- roleOrEmail: Role | string = 'admin',
9
- password?: string,
10
- ): Promise<string> {
11
- const role = roleOrEmail in DEFAULT_CREDENTIALS ? (roleOrEmail as Role) : null;
12
- const credentialAttempts: Array<{ email: string; password: string }> = [];
13
-
14
- if (role) {
15
- const configured = DEFAULT_CREDENTIALS[role];
16
- credentialAttempts.push({ email: configured.email, password: password ?? configured.password });
17
- if (!password) {
18
- credentialAttempts.push({ email: `${role}@acme.com`, password: 'secret' });
19
- }
20
- } else {
21
- credentialAttempts.push({ email: roleOrEmail, password: password ?? 'secret' });
22
- }
23
-
24
- let lastStatus = 0;
25
-
26
- for (const attempt of credentialAttempts) {
27
- const form = new URLSearchParams();
28
- form.set('email', attempt.email);
29
- form.set('password', attempt.password);
30
-
31
- const response = await request.post(`${BASE_URL}/api/auth/login`, {
32
- headers: {
33
- 'content-type': 'application/x-www-form-urlencoded',
34
- },
35
- data: form.toString(),
36
- });
37
-
38
- const raw = await response.text();
39
- let body: Record<string, unknown> | null = null;
40
- try {
41
- body = raw ? (JSON.parse(raw) as Record<string, unknown>) : null;
42
- } catch {
43
- body = null;
44
- }
45
-
46
- lastStatus = response.status();
47
- if (response.ok() && body && typeof body.token === 'string' && body.token) {
48
- return body.token;
49
- }
50
- }
51
-
52
- throw new Error(`Failed to obtain auth token (status ${lastStatus})`);
53
- }
54
-
55
- export async function apiRequest(
56
- request: APIRequestContext,
57
- method: string,
58
- path: string,
59
- options: { token: string; data?: unknown },
60
- ) {
61
- const url = `${BASE_URL}${path}`;
62
- const headers = {
63
- Authorization: `Bearer ${options.token}`,
64
- 'Content-Type': 'application/json',
65
- };
66
- return request.fetch(url, { method, headers, data: options.data });
67
- }
68
-
69
- export async function postForm(
70
- request: APIRequestContext,
71
- path: string,
72
- data: Record<string, string>,
73
- options?: { headers?: Record<string, string> },
74
- ) {
75
- const form = new URLSearchParams();
76
- for (const [key, value] of Object.entries(data)) form.set(key, value);
77
- return request.post(`${BASE_URL}${path}`, {
78
- headers: {
79
- 'content-type': 'application/x-www-form-urlencoded',
80
- ...(options?.headers ?? {}),
81
- },
82
- data: form.toString(),
83
- });
84
- }