@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,215 +0,0 @@
1
- import {
2
- formatFieldLabel,
3
- formatEntityLabel,
4
- buildEntityListUrl,
5
- getRecordLabel,
6
- resolveBaseValue,
7
- } from '../helpers'
8
-
9
- describe('translation helpers', () => {
10
- describe('formatFieldLabel', () => {
11
- it('converts snake_case to Title Case', () => {
12
- expect(formatFieldLabel('product_name')).toBe('Product Name')
13
- })
14
-
15
- it('capitalizes single word', () => {
16
- expect(formatFieldLabel('title')).toBe('Title')
17
- })
18
-
19
- it('formats option dot-path as "Value (option)"', () => {
20
- expect(formatFieldLabel('options.red.label')).toBe('Red (option)')
21
- })
22
-
23
- it('formats option dot-path with lowercase value', () => {
24
- expect(formatFieldLabel('options.blue.label')).toBe('Blue (option)')
25
- })
26
-
27
- it('formats generic dot-path with " > " separator', () => {
28
- expect(formatFieldLabel('a.b.c')).toBe('A > B > C')
29
- })
30
-
31
- it('handles "description"', () => {
32
- expect(formatFieldLabel('description')).toBe('Description')
33
- })
34
-
35
- it('returns original for empty string', () => {
36
- expect(formatFieldLabel('')).toBe('')
37
- })
38
-
39
- it('handles multiple underscores', () => {
40
- expect(formatFieldLabel('long_field_name_here')).toBe('Long Field Name Here')
41
- })
42
-
43
- it('handles dot-path with two segments', () => {
44
- expect(formatFieldLabel('section.title')).toBe('Section > Title')
45
- })
46
-
47
- it('does not treat 4-segment option path as option', () => {
48
- expect(formatFieldLabel('options.red.label.extra')).toBe('Options > Red > Label > Extra')
49
- })
50
- })
51
-
52
- describe('formatEntityLabel', () => {
53
- it('returns provided label when different from entityId', () => {
54
- expect(formatEntityLabel('catalog:product', 'Product')).toBe('Product')
55
- })
56
-
57
- it('falls back to formatted name when label equals entityId', () => {
58
- expect(formatEntityLabel('catalog:product', 'catalog:product')).toBe('Product')
59
- })
60
-
61
- it('falls back to formatted name when no label provided', () => {
62
- expect(formatEntityLabel('catalog:catalog_product')).toBe('Catalog Product')
63
- })
64
-
65
- it('formats single-part entityId (no colon)', () => {
66
- expect(formatEntityLabel('product')).toBe('Product')
67
- })
68
-
69
- it('falls back when label is undefined', () => {
70
- expect(formatEntityLabel('catalog:offer', undefined)).toBe('Offer')
71
- })
72
-
73
- it('falls back when label is empty string', () => {
74
- expect(formatEntityLabel('catalog:item', '')).toBe('Item')
75
- })
76
- })
77
-
78
- describe('buildEntityListUrl', () => {
79
- it('builds URL for standard entity type', () => {
80
- expect(buildEntityListUrl('catalog:catalog_product')).toBe('/api/catalog/products')
81
- })
82
-
83
- it('builds URL when entity does not have module prefix', () => {
84
- expect(buildEntityListUrl('catalog:offer')).toBe('/api/catalog/offers')
85
- })
86
-
87
- it('does not double-pluralize already-plural entity', () => {
88
- expect(buildEntityListUrl('catalog:products')).toBe('/api/catalog/products')
89
- })
90
-
91
- it('returns null when no entity part after colon', () => {
92
- expect(buildEntityListUrl('catalog:')).toBeNull()
93
- })
94
-
95
- it('returns null when no colon present', () => {
96
- expect(buildEntityListUrl('catalog')).toBeNull()
97
- })
98
-
99
- it('returns null for empty string', () => {
100
- expect(buildEntityListUrl('')).toBeNull()
101
- })
102
-
103
- it('strips module prefix from entity name', () => {
104
- expect(buildEntityListUrl('sales:sales_order')).toBe('/api/sales/orders')
105
- })
106
-
107
- it('correctly pluralizes category', () => {
108
- expect(buildEntityListUrl('catalog:category')).toBe('/api/catalog/categories')
109
- })
110
-
111
- it('correctly pluralizes entity ending in y after consonant', () => {
112
- expect(buildEntityListUrl('catalog:catalog_company')).toBe('/api/catalog/companies')
113
- })
114
-
115
- it('correctly pluralizes entity ending in x', () => {
116
- expect(buildEntityListUrl('catalog:catalog_box')).toBe('/api/catalog/boxes')
117
- })
118
-
119
- it('correctly pluralizes entity ending in sh', () => {
120
- expect(buildEntityListUrl('catalog:catalog_dish')).toBe('/api/catalog/dishes')
121
- })
122
-
123
- it('correctly pluralizes entity ending in ch', () => {
124
- expect(buildEntityListUrl('catalog:catalog_match')).toBe('/api/catalog/matches')
125
- })
126
-
127
- it('replaces underscores with hyphens in multi-word resource names', () => {
128
- expect(buildEntityListUrl('resources:resource_type')).toBe('/api/resources/resource-types')
129
- })
130
-
131
- it('replaces underscores with hyphens after prefix stripping', () => {
132
- expect(buildEntityListUrl('catalog:catalog_product_category')).toBe('/api/catalog/product-categories')
133
- })
134
-
135
- it('handles entity with underscores and plural exception', () => {
136
- expect(buildEntityListUrl('dictionaries:dictionary_entry')).toBe('/api/dictionaries/dictionary-entries')
137
- })
138
- })
139
-
140
- describe('getRecordLabel', () => {
141
- it('returns title when present', () => {
142
- expect(getRecordLabel({ title: 'Foo' })).toBe('Foo')
143
- })
144
-
145
- it('falls back to name when no title', () => {
146
- expect(getRecordLabel({ name: 'Bar' })).toBe('Bar')
147
- })
148
-
149
- it('falls back to label when no title or name', () => {
150
- expect(getRecordLabel({ label: 'Baz' })).toBe('Baz')
151
- })
152
-
153
- it('falls back to display_name', () => {
154
- expect(getRecordLabel({ display_name: 'Display' })).toBe('Display')
155
- })
156
-
157
- it('falls back to id', () => {
158
- expect(getRecordLabel({ id: '123' })).toBe('123')
159
- })
160
-
161
- it('returns empty string for empty object', () => {
162
- expect(getRecordLabel({})).toBe('')
163
- })
164
-
165
- it('title takes priority over name', () => {
166
- expect(getRecordLabel({ title: 'A', name: 'B' })).toBe('A')
167
- })
168
-
169
- it('name takes priority over label', () => {
170
- expect(getRecordLabel({ name: 'N', label: 'L', id: 'X' })).toBe('N')
171
- })
172
-
173
- it('converts non-string values to string', () => {
174
- expect(getRecordLabel({ id: 42 })).toBe('42')
175
- })
176
- })
177
-
178
- describe('resolveBaseValue', () => {
179
- it('returns direct field value', () => {
180
- expect(resolveBaseValue({ name: 'Foo' }, 'name')).toBe('Foo')
181
- })
182
-
183
- it('falls back to cf_ prefixed field', () => {
184
- expect(resolveBaseValue({ cf_priority: 'High' }, 'priority')).toBe('High')
185
- })
186
-
187
- it('prefers direct match over cf_ prefixed', () => {
188
- expect(resolveBaseValue({ name: 'Direct', cf_name: 'Custom' }, 'name')).toBe('Direct')
189
- })
190
-
191
- it('returns empty string for missing field', () => {
192
- expect(resolveBaseValue({ other: 'val' }, 'name')).toBe('')
193
- })
194
-
195
- it('returns empty string for null baseValues', () => {
196
- expect(resolveBaseValue(null, 'name')).toBe('')
197
- })
198
-
199
- it('returns empty string for undefined baseValues', () => {
200
- expect(resolveBaseValue(undefined, 'name')).toBe('')
201
- })
202
-
203
- it('returns empty string for null field value', () => {
204
- expect(resolveBaseValue({ description: null }, 'description')).toBe('')
205
- })
206
-
207
- it('converts numeric value to string', () => {
208
- expect(resolveBaseValue({ cf_mileage: 22610 }, 'mileage')).toBe('22610')
209
- })
210
-
211
- it('converts boolean value to string', () => {
212
- expect(resolveBaseValue({ cf_active: true }, 'active')).toBe('true')
213
- })
214
- })
215
- })
@@ -1,115 +0,0 @@
1
- import { resolveLocaleFromRequest } from '../locale'
2
-
3
- function makeRequest(url: string, headers: Record<string, string> = {}): Request {
4
- return new Request(url, { headers })
5
- }
6
-
7
- describe('resolveLocaleFromRequest', () => {
8
- describe('query parameter', () => {
9
- it('returns locale from ?locale= query param', () => {
10
- const req = makeRequest('https://example.com/api/products?locale=de')
11
- expect(resolveLocaleFromRequest(req)).toBe('de')
12
- })
13
-
14
- it('returns locale from query param with other params', () => {
15
- const req = makeRequest('https://example.com/api/products?page=1&locale=fr&pageSize=10')
16
- expect(resolveLocaleFromRequest(req)).toBe('fr')
17
- })
18
-
19
- it('ignores query param shorter than 2 chars', () => {
20
- const req = makeRequest('https://example.com/api/products?locale=x')
21
- expect(resolveLocaleFromRequest(req)).toBeNull()
22
- })
23
-
24
- it('ignores query param longer than 10 chars', () => {
25
- const req = makeRequest('https://example.com/api/products?locale=abcdefghijk')
26
- expect(resolveLocaleFromRequest(req)).toBeNull()
27
- })
28
- })
29
-
30
- describe('X-Locale header', () => {
31
- it('returns locale from X-Locale header', () => {
32
- const req = makeRequest('https://example.com/api/products', { 'x-locale': 'es' })
33
- expect(resolveLocaleFromRequest(req)).toBe('es')
34
- })
35
-
36
- it('ignores X-Locale header shorter than 2 chars', () => {
37
- const req = makeRequest('https://example.com/api/products', { 'x-locale': 'a' })
38
- expect(resolveLocaleFromRequest(req)).toBeNull()
39
- })
40
-
41
- it('ignores X-Locale header longer than 10 chars', () => {
42
- const req = makeRequest('https://example.com/api/products', { 'x-locale': 'abcdefghijk' })
43
- expect(resolveLocaleFromRequest(req)).toBeNull()
44
- })
45
- })
46
-
47
- describe('cookie', () => {
48
- it('returns locale from cookie', () => {
49
- const req = makeRequest('https://example.com/api/products', { cookie: 'locale=pl' })
50
- expect(resolveLocaleFromRequest(req)).toBe('pl')
51
- })
52
-
53
- it('extracts locale from cookie among other cookies', () => {
54
- const req = makeRequest('https://example.com/api/products', { cookie: 'session=abc; locale=de; theme=dark' })
55
- expect(resolveLocaleFromRequest(req)).toBe('de')
56
- })
57
-
58
- it('ignores cookie value shorter than 2 chars', () => {
59
- const req = makeRequest('https://example.com/api/products', { cookie: 'locale=x' })
60
- expect(resolveLocaleFromRequest(req)).toBeNull()
61
- })
62
- })
63
-
64
- describe('Accept-Language header', () => {
65
- it('returns matching locale from Accept-Language (single supported)', () => {
66
- const req = makeRequest('https://example.com/api/products', { 'accept-language': 'pl;q=1.0' })
67
- expect(resolveLocaleFromRequest(req)).toBe('pl')
68
- })
69
-
70
- it('matches first supported locale found in Accept-Language', () => {
71
- // locales array is ['en', 'pl', 'es', 'de'] — en is checked first
72
- const req = makeRequest('https://example.com/api/products', { 'accept-language': 'de-DE,de;q=0.9,en;q=0.8' })
73
- expect(resolveLocaleFromRequest(req)).toBe('en')
74
- })
75
-
76
- it('returns de when Accept-Language only contains de', () => {
77
- const req = makeRequest('https://example.com/api/products', { 'accept-language': 'de-DE,de;q=0.9' })
78
- expect(resolveLocaleFromRequest(req)).toBe('de')
79
- })
80
-
81
- it('returns null when Accept-Language has no matching locale', () => {
82
- const req = makeRequest('https://example.com/api/products', { 'accept-language': 'ja,zh;q=0.9' })
83
- expect(resolveLocaleFromRequest(req)).toBeNull()
84
- })
85
- })
86
-
87
- describe('priority ordering', () => {
88
- it('query param takes priority over header', () => {
89
- const req = makeRequest('https://example.com/api/products?locale=de', { 'x-locale': 'fr' })
90
- expect(resolveLocaleFromRequest(req)).toBe('de')
91
- })
92
-
93
- it('X-Locale header takes priority over cookie', () => {
94
- const req = makeRequest('https://example.com/api/products', { 'x-locale': 'es', cookie: 'locale=pl' })
95
- expect(resolveLocaleFromRequest(req)).toBe('es')
96
- })
97
-
98
- it('cookie takes priority over Accept-Language', () => {
99
- const req = makeRequest('https://example.com/api/products', { cookie: 'locale=de', 'accept-language': 'en,pl;q=0.9' })
100
- expect(resolveLocaleFromRequest(req)).toBe('de')
101
- })
102
- })
103
-
104
- describe('fallback', () => {
105
- it('returns null when no locale source is present', () => {
106
- const req = makeRequest('https://example.com/api/products')
107
- expect(resolveLocaleFromRequest(req)).toBeNull()
108
- })
109
-
110
- it('returns null when all sources are empty', () => {
111
- const req = makeRequest('https://example.com/api/products', { cookie: 'session=abc' })
112
- expect(resolveLocaleFromRequest(req)).toBeNull()
113
- })
114
- })
115
- })
@@ -1,176 +0,0 @@
1
- import { registerTranslatableFields } from '@open-mercato/shared/lib/localization/translatable-fields'
2
-
3
- jest.mock('#generated/entity-fields-registry', () => ({
4
- getEntityFields: jest.fn(),
5
- }))
6
-
7
- import { getEntityFields } from '#generated/entity-fields-registry'
8
- import { resolveFieldList } from '../resolve-field-list'
9
-
10
- const mockedGetEntityFields = getEntityFields as jest.MockedFunction<typeof getEntityFields>
11
-
12
- beforeEach(() => {
13
- mockedGetEntityFields.mockReset()
14
- })
15
-
16
- describe('resolveFieldList', () => {
17
- describe('explicit fields', () => {
18
- it('returns explicit fields when provided', () => {
19
- const result = resolveFieldList('catalog:product', ['title', 'description'], [])
20
- expect(result).toEqual([
21
- { key: 'title', label: 'Title', multiline: false },
22
- { key: 'description', label: 'Description', multiline: true },
23
- ])
24
- })
25
-
26
- it('marks content fields as multiline', () => {
27
- const result = resolveFieldList('catalog:product', ['content', 'short_description'], [])
28
- expect(result).toEqual([
29
- { key: 'content', label: 'Content', multiline: true },
30
- { key: 'short_description', label: 'Short Description', multiline: true },
31
- ])
32
- })
33
-
34
- it('ignores registry and entity fields when explicit fields given', () => {
35
- registerTranslatableFields({ 'test:explicit_priority': ['name', 'description'] })
36
- const result = resolveFieldList('test:explicit_priority', ['title'], [])
37
- expect(result).toHaveLength(1)
38
- expect(result[0].key).toBe('title')
39
- })
40
-
41
- it('ignores custom field defs when explicit fields given', () => {
42
- const result = resolveFieldList('catalog:product', ['title'], [
43
- { key: 'custom_note', kind: 'text' },
44
- ])
45
- expect(result).toHaveLength(1)
46
- expect(result[0].key).toBe('title')
47
- })
48
- })
49
-
50
- describe('registered translatable fields', () => {
51
- it('uses registered fields when no explicit fields', () => {
52
- registerTranslatableFields({ 'test:registered': ['name', 'description', 'content'] })
53
- const result = resolveFieldList('test:registered', undefined, [])
54
- expect(result).toEqual([
55
- { key: 'name', label: 'Name', multiline: false },
56
- { key: 'description', label: 'Description', multiline: true },
57
- { key: 'content', label: 'Content', multiline: true },
58
- ])
59
- })
60
-
61
- it('does not call getEntityFields when registered fields exist', () => {
62
- registerTranslatableFields({ 'test:no_entity_lookup': ['title'] })
63
- resolveFieldList('test:no_entity_lookup', undefined, [])
64
- expect(mockedGetEntityFields).not.toHaveBeenCalled()
65
- })
66
- })
67
-
68
- describe('auto-detect via getEntityFields', () => {
69
- it('auto-detects translatable fields from entity fields', () => {
70
- mockedGetEntityFields.mockReturnValue({
71
- field1: 'title',
72
- field2: 'name',
73
- field3: 'id',
74
- field4: 'created_at',
75
- field5: 'sku',
76
- })
77
- const result = resolveFieldList('unknown:my_entity', undefined, [])
78
- expect(mockedGetEntityFields).toHaveBeenCalledWith('my_entity')
79
- expect(result.map((f) => f.key)).toEqual(['title', 'name'])
80
- })
81
-
82
- it('skips non-string and empty values', () => {
83
- mockedGetEntityFields.mockReturnValue({
84
- field1: 'title',
85
- field2: '',
86
- field3: ' ',
87
- field4: null as unknown as string,
88
- })
89
- const result = resolveFieldList('unknown:test_entity', undefined, [])
90
- expect(result).toHaveLength(1)
91
- expect(result[0].key).toBe('title')
92
- })
93
-
94
- it('deduplicates fields', () => {
95
- mockedGetEntityFields.mockReturnValue({
96
- field1: 'title',
97
- field2: 'title',
98
- })
99
- const result = resolveFieldList('unknown:dup_entity', undefined, [])
100
- expect(result).toHaveLength(1)
101
- })
102
-
103
- it('returns empty when entity slug is missing', () => {
104
- const result = resolveFieldList('nocolon', undefined, [])
105
- expect(result).toEqual([])
106
- })
107
-
108
- it('returns empty when getEntityFields returns null', () => {
109
- mockedGetEntityFields.mockReturnValue(null)
110
- const result = resolveFieldList('unknown:missing_entity', undefined, [])
111
- expect(result).toEqual([])
112
- })
113
- })
114
-
115
- describe('custom field defs augmentation', () => {
116
- it('appends text custom fields', () => {
117
- registerTranslatableFields({ 'test:with_cf': ['title'] })
118
- const result = resolveFieldList('test:with_cf', undefined, [
119
- { key: 'custom_note', kind: 'text', label: 'Custom Note' },
120
- ])
121
- expect(result).toHaveLength(2)
122
- expect(result[1]).toEqual({ key: 'custom_note', label: 'Custom Note', multiline: false })
123
- })
124
-
125
- it('appends multiline custom fields as multiline', () => {
126
- registerTranslatableFields({ 'test:with_multiline_cf': ['title'] })
127
- const result = resolveFieldList('test:with_multiline_cf', undefined, [
128
- { key: 'long_text', kind: 'multiline' },
129
- ])
130
- expect(result[1].multiline).toBe(true)
131
- })
132
-
133
- it('appends richtext custom fields as multiline', () => {
134
- registerTranslatableFields({ 'test:with_richtext_cf': ['title'] })
135
- const result = resolveFieldList('test:with_richtext_cf', undefined, [
136
- { key: 'rich_content', kind: 'richtext' },
137
- ])
138
- expect(result[1].multiline).toBe(true)
139
- })
140
-
141
- it('skips non-text kinds (number, boolean, etc.)', () => {
142
- registerTranslatableFields({ 'test:skip_cf': ['title'] })
143
- const result = resolveFieldList('test:skip_cf', undefined, [
144
- { key: 'quantity', kind: 'number' },
145
- { key: 'is_active', kind: 'boolean' },
146
- { key: 'created_at', kind: 'date' },
147
- ])
148
- expect(result).toHaveLength(1)
149
- })
150
-
151
- it('does not duplicate fields already in the list', () => {
152
- registerTranslatableFields({ 'test:no_dup_cf': ['title'] })
153
- const result = resolveFieldList('test:no_dup_cf', undefined, [
154
- { key: 'title', kind: 'text' },
155
- ])
156
- expect(result).toHaveLength(1)
157
- })
158
-
159
- it('uses formatFieldLabel when custom field has no label', () => {
160
- registerTranslatableFields({ 'test:cf_no_label': ['title'] })
161
- const result = resolveFieldList('test:cf_no_label', undefined, [
162
- { key: 'product_note', kind: 'text' },
163
- ])
164
- expect(result[1].label).toBe('Product Note')
165
- })
166
-
167
- it('skips custom fields with empty key', () => {
168
- registerTranslatableFields({ 'test:cf_empty_key': ['title'] })
169
- const result = resolveFieldList('test:cf_empty_key', undefined, [
170
- { key: '', kind: 'text' },
171
- { key: ' ', kind: 'text' },
172
- ])
173
- expect(result).toHaveLength(1)
174
- })
175
- })
176
- })
@@ -1,79 +0,0 @@
1
- import { isTranslatableField } from '../translatable-fields'
2
-
3
- describe('isTranslatableField', () => {
4
- describe('translatable fields (returns true)', () => {
5
- it.each([
6
- 'title',
7
- 'name',
8
- 'description',
9
- 'content',
10
- 'short_description',
11
- 'style_code',
12
- 'summary',
13
- 'bio',
14
- 'notes',
15
- ])('"%s" is translatable', (field) => {
16
- expect(isTranslatableField(field)).toBe(true)
17
- })
18
- })
19
-
20
- describe('exact blacklist (returns false)', () => {
21
- it.each([
22
- 'id',
23
- 'created_at',
24
- 'updated_at',
25
- 'deleted_at',
26
- 'tenant_id',
27
- 'organization_id',
28
- 'is_active',
29
- 'sort_order',
30
- 'position',
31
- 'slug',
32
- 'sku',
33
- 'barcode',
34
- 'price',
35
- 'quantity',
36
- 'weight',
37
- 'width',
38
- 'height',
39
- 'depth',
40
- 'metadata',
41
- 'config',
42
- 'settings',
43
- 'options',
44
- ])('"%s" is not translatable (exact blacklist)', (field) => {
45
- expect(isTranslatableField(field)).toBe(false)
46
- })
47
- })
48
-
49
- describe('suffix blacklist (returns false)', () => {
50
- it.each([
51
- ['product_id', '_id'],
52
- ['category_id', '_id'],
53
- ['updated_at', '_at'],
54
- ['expires_at', '_at'],
55
- ['password_hash', '_hash'],
56
- ['token_hash', '_hash'],
57
- ])('"%s" is not translatable (suffix %s)', (field) => {
58
- expect(isTranslatableField(field)).toBe(false)
59
- })
60
- })
61
-
62
- describe('case insensitivity', () => {
63
- it('rejects uppercase "ID"', () => {
64
- expect(isTranslatableField('ID')).toBe(false)
65
- })
66
-
67
- it('rejects mixed case "Created_At"', () => {
68
- expect(isTranslatableField('Created_At')).toBe(false)
69
- })
70
-
71
- it('rejects uppercase "SKU"', () => {
72
- expect(isTranslatableField('SKU')).toBe(false)
73
- })
74
-
75
- it('rejects "METADATA"', () => {
76
- expect(isTranslatableField('METADATA')).toBe(false)
77
- })
78
- })
79
- })
@@ -1,83 +0,0 @@
1
- import { injectionTable } from '../injection-table'
2
- import { translatableFields as catalogFields } from '../../../catalog/translations'
3
- import { translatableFields as dictionaryFields } from '../../../dictionaries/translations'
4
- import { translatableFields as entitiesFields } from '../../../entities/translations'
5
- import { translatableFields as resourcesFields } from '../../../resources/translations'
6
-
7
- const allExpectedEntityTypes = [
8
- ...Object.keys(catalogFields),
9
- ...Object.keys(dictionaryFields),
10
- ...Object.keys(entitiesFields),
11
- ...Object.keys(resourcesFields),
12
- ]
13
-
14
- describe('translations injection-table', () => {
15
- it('generates a full-form entry for every translatable entity type', () => {
16
- for (const entityType of allExpectedEntityTypes) {
17
- const spotId = `crud-form:${entityType.replace(/:/g, '.')}`
18
- expect(injectionTable[spotId]).toBeDefined()
19
- }
20
- })
21
-
22
- it('generates short-form entries for entity types with module prefix', () => {
23
- // catalog:catalog_product → short form: crud-form:catalog.product
24
- expect(injectionTable['crud-form:catalog.product']).toBeDefined()
25
- expect(injectionTable['crud-form:catalog.product_variant']).toBeDefined()
26
- expect(injectionTable['crud-form:catalog.offer']).toBeDefined()
27
- expect(injectionTable['crud-form:catalog.product_category']).toBeDefined()
28
- expect(injectionTable['crud-form:catalog.product_tag']).toBeDefined()
29
- expect(injectionTable['crud-form:catalog.option_schema_template']).toBeDefined()
30
- })
31
-
32
- it('does not generate short-form for entries without module prefix', () => {
33
- // dictionaries:dictionary_entry → prefix is "dictionaries_", slug is "dictionary_entry"
34
- // "dictionary_entry" does NOT start with "dictionaries_", so no short form
35
- expect(injectionTable['crud-form:dictionaries.dictionary_entry']).toBeDefined()
36
- })
37
-
38
- it('uses the correct widget ID for all entries', () => {
39
- const widgetId = 'translations.injection.translation-manager'
40
- for (const slots of Object.values(injectionTable)) {
41
- const slotsArray = Array.isArray(slots) ? slots : [slots]
42
- for (const slot of slotsArray) {
43
- const resolved = typeof slot === 'string' ? slot : slot.widgetId
44
- expect(resolved).toBe(widgetId)
45
- }
46
- }
47
- })
48
-
49
- it('places all widgets in column 2 with kind=group', () => {
50
- for (const slots of Object.values(injectionTable)) {
51
- const slotsArray = Array.isArray(slots) ? slots : [slots]
52
- for (const slot of slotsArray) {
53
- if (typeof slot !== 'string') {
54
- expect(slot.column).toBe(2)
55
- expect(slot.kind).toBe('group')
56
- }
57
- }
58
- }
59
- })
60
-
61
- it('includes catalog:catalog_product in both full and short form', () => {
62
- expect(injectionTable['crud-form:catalog.catalog_product']).toBeDefined()
63
- expect(injectionTable['crud-form:catalog.product']).toBeDefined()
64
- })
65
-
66
- it('includes dictionaries:dictionary_entry spot', () => {
67
- expect(injectionTable['crud-form:dictionaries.dictionary_entry']).toBeDefined()
68
- })
69
-
70
- it('includes entities:custom_field_def spot', () => {
71
- expect(injectionTable['crud-form:entities.custom_field_def']).toBeDefined()
72
- })
73
-
74
- it('includes resources:resources_resource in both full and short form', () => {
75
- expect(injectionTable['crud-form:resources.resources_resource']).toBeDefined()
76
- expect(injectionTable['crud-form:resources.resource']).toBeDefined()
77
- })
78
-
79
- it('includes resources:resources_resource_type in both full and short form', () => {
80
- expect(injectionTable['crud-form:resources.resources_resource_type']).toBeDefined()
81
- expect(injectionTable['crud-form:resources.resource_type']).toBeDefined()
82
- })
83
- })