@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,934 +0,0 @@
1
- /**
2
- * Sub-Workflow Tests (Phase 8, Step 8.1)
3
- *
4
- * Tests for sub-workflow execution functionality including:
5
- * - Basic sub-workflow invocation
6
- * - Input/output data mapping
7
- * - Error propagation
8
- * - Multi-tenant isolation
9
- * - Event logging
10
- */
11
-
12
- import { describe, test, expect, jest, beforeEach } from '@jest/globals'
13
- import type { EntityManager } from '@mikro-orm/core'
14
- import type { AwilixContainer } from 'awilix'
15
- import * as stepHandler from '../step-handler'
16
- import * as workflowExecutor from '../workflow-executor'
17
- import type {
18
- WorkflowDefinition,
19
- WorkflowInstance,
20
- StepInstance,
21
- WorkflowEvent,
22
- } from '../../data/entities'
23
-
24
- describe('Sub-Workflow Execution (Phase 8)', () => {
25
- let mockEm: jest.Mocked<EntityManager>
26
- let mockContainer: jest.Mocked<AwilixContainer>
27
-
28
- const testTenantId = '00000000-0000-4000-8000-000000000001'
29
- const testOrgId = '00000000-0000-4000-8000-000000000002'
30
- const parentDefinitionId = '00000000-0000-4000-8000-000000000003'
31
- const parentInstanceId = '00000000-0000-4000-8000-000000000004'
32
- const childDefinitionId = '00000000-0000-4000-8000-000000000005'
33
- const childInstanceId = '00000000-0000-4000-8000-000000000006'
34
- const stepInstanceId = '00000000-0000-4000-8000-000000000007'
35
-
36
- // Parent workflow definition with SUB_WORKFLOW step
37
- const parentDefinition: Partial<WorkflowDefinition> = {
38
- id: parentDefinitionId,
39
- workflowId: 'parent-workflow',
40
- workflowName: 'Parent Workflow',
41
- version: 1,
42
- enabled: true,
43
- definition: {
44
- steps: [
45
- {
46
- stepId: 'start',
47
- stepName: 'Start',
48
- stepType: 'START',
49
- },
50
- {
51
- stepId: 'invoke-child',
52
- stepName: 'Invoke Child Workflow',
53
- stepType: 'SUB_WORKFLOW',
54
- config: {
55
- subWorkflowId: 'child-workflow',
56
- version: 1,
57
- inputMapping: {
58
- childOrderId: 'orderId',
59
- childAmount: 'amount',
60
- },
61
- outputMapping: {
62
- result: 'status',
63
- timestamp: 'completedAt',
64
- },
65
- },
66
- },
67
- {
68
- stepId: 'end',
69
- stepName: 'End',
70
- stepType: 'END',
71
- },
72
- ],
73
- transitions: [],
74
- },
75
- tenantId: testTenantId,
76
- organizationId: testOrgId,
77
- }
78
-
79
- // Child workflow definition
80
- const childDefinition: Partial<WorkflowDefinition> = {
81
- id: childDefinitionId,
82
- workflowId: 'child-workflow',
83
- workflowName: 'Child Workflow',
84
- version: 1,
85
- enabled: true,
86
- definition: {
87
- steps: [
88
- {
89
- stepId: 'start',
90
- stepName: 'Start',
91
- stepType: 'START',
92
- },
93
- {
94
- stepId: 'process',
95
- stepName: 'Process',
96
- stepType: 'AUTOMATED',
97
- },
98
- {
99
- stepId: 'end',
100
- stepName: 'End',
101
- stepType: 'END',
102
- },
103
- ],
104
- transitions: [],
105
- },
106
- tenantId: testTenantId,
107
- organizationId: testOrgId,
108
- }
109
-
110
- const parentInstance: Partial<WorkflowInstance> = {
111
- id: parentInstanceId,
112
- definitionId: parentDefinitionId,
113
- workflowId: 'parent-workflow',
114
- version: 1,
115
- status: 'RUNNING',
116
- currentStepId: 'invoke-child',
117
- context: {
118
- orderId: '12345',
119
- amount: 100,
120
- customerEmail: 'test@example.com',
121
- },
122
- tenantId: testTenantId,
123
- organizationId: testOrgId,
124
- startedAt: new Date(),
125
- }
126
-
127
- const childInstance: Partial<WorkflowInstance> = {
128
- id: childInstanceId,
129
- definitionId: childDefinitionId,
130
- workflowId: 'child-workflow',
131
- version: 1,
132
- status: 'COMPLETED',
133
- currentStepId: 'end',
134
- context: {
135
- childOrderId: '12345',
136
- childAmount: 100,
137
- status: 'SUCCESS',
138
- completedAt: '2024-01-08T12:00:00Z',
139
- },
140
- tenantId: testTenantId,
141
- organizationId: testOrgId,
142
- startedAt: new Date(),
143
- completedAt: new Date(),
144
- }
145
-
146
- const stepInstance: Partial<StepInstance> = {
147
- id: stepInstanceId,
148
- workflowInstanceId: parentInstanceId,
149
- stepId: 'invoke-child',
150
- stepName: 'Invoke Child Workflow',
151
- stepType: 'SUB_WORKFLOW',
152
- status: 'ACTIVE',
153
- tenantId: testTenantId,
154
- organizationId: testOrgId,
155
- }
156
-
157
- beforeEach(() => {
158
- // Create mock EntityManager
159
- mockEm = {
160
- findOne: jest.fn(),
161
- findOneOrFail: jest.fn(),
162
- find: jest.fn(),
163
- create: jest.fn(),
164
- persistAndFlush: jest.fn(),
165
- flush: jest.fn(),
166
- } as any
167
-
168
- // Create mock container
169
- mockContainer = {} as any
170
-
171
- // Reset all mocks
172
- jest.clearAllMocks()
173
-
174
- // Setup default mock implementations
175
- mockEm.create.mockImplementation((entity: any, data: any) => ({ ...data, id: childInstanceId } as any))
176
- mockEm.persistAndFlush.mockResolvedValue(undefined as any)
177
- mockEm.flush.mockResolvedValue(undefined as any)
178
- })
179
-
180
- // ============================================================================
181
- // Basic Functionality Tests
182
- // ============================================================================
183
-
184
- describe('Basic Sub-Workflow Execution', () => {
185
- test('should start sub-workflow from parent', async () => {
186
- const startWorkflowSpy = jest.spyOn(workflowExecutor, 'startWorkflow')
187
- const executeWorkflowSpy = jest.spyOn(workflowExecutor, 'executeWorkflow')
188
-
189
- startWorkflowSpy.mockResolvedValue(childInstance as WorkflowInstance)
190
- executeWorkflowSpy.mockResolvedValue({
191
- status: 'COMPLETED',
192
- currentStep: 'end',
193
- context: childInstance.context!,
194
- events: [],
195
- executionTime: 100,
196
- })
197
-
198
- mockEm.findOne.mockResolvedValue(parentDefinition as WorkflowDefinition)
199
-
200
- const result = await stepHandler.executeStep(
201
- mockEm,
202
- parentInstance as WorkflowInstance,
203
- 'invoke-child',
204
- {
205
- workflowContext: parentInstance.context!,
206
- },
207
- mockContainer
208
- )
209
-
210
- expect(startWorkflowSpy).toHaveBeenCalledWith(
211
- mockEm,
212
- expect.objectContaining({
213
- workflowId: 'child-workflow',
214
- version: 1,
215
- tenantId: testTenantId,
216
- organizationId: testOrgId,
217
- })
218
- )
219
- expect(executeWorkflowSpy).toHaveBeenCalledWith(mockEm, mockContainer, childInstanceId, expect.any(Object))
220
- expect(result.status).toBe('COMPLETED')
221
-
222
- startWorkflowSpy.mockRestore()
223
- executeWorkflowSpy.mockRestore()
224
- })
225
-
226
- test('should pass input data to sub-workflow with mapping', async () => {
227
- const startWorkflowSpy = jest.spyOn(workflowExecutor, 'startWorkflow')
228
- const executeWorkflowSpy = jest.spyOn(workflowExecutor, 'executeWorkflow')
229
-
230
- startWorkflowSpy.mockResolvedValue(childInstance as WorkflowInstance)
231
- executeWorkflowSpy.mockResolvedValue({
232
- status: 'COMPLETED',
233
- currentStep: 'end',
234
- context: childInstance.context!,
235
- events: [],
236
- executionTime: 100,
237
- })
238
-
239
- mockEm.findOne.mockResolvedValue(parentDefinition as WorkflowDefinition)
240
-
241
- await stepHandler.executeStep(
242
- mockEm,
243
- parentInstance as WorkflowInstance,
244
- 'invoke-child',
245
- {
246
- workflowContext: parentInstance.context!,
247
- },
248
- mockContainer
249
- )
250
-
251
- const startCall = startWorkflowSpy.mock.calls[0]
252
- const initialContext = startCall[1].initialContext
253
-
254
- expect(initialContext).toEqual({
255
- childOrderId: '12345',
256
- childAmount: 100,
257
- })
258
-
259
- startWorkflowSpy.mockRestore()
260
- executeWorkflowSpy.mockRestore()
261
- })
262
-
263
- test('should return output data to parent with mapping', async () => {
264
- const startWorkflowSpy = jest.spyOn(workflowExecutor, 'startWorkflow')
265
- const executeWorkflowSpy = jest.spyOn(workflowExecutor, 'executeWorkflow')
266
-
267
- startWorkflowSpy.mockResolvedValue(childInstance as WorkflowInstance)
268
- executeWorkflowSpy.mockResolvedValue({
269
- status: 'COMPLETED',
270
- currentStep: 'end',
271
- context: childInstance.context!,
272
- events: [],
273
- executionTime: 100,
274
- })
275
-
276
- mockEm.findOne.mockResolvedValue(parentDefinition as WorkflowDefinition)
277
-
278
- const result = await stepHandler.executeStep(
279
- mockEm,
280
- parentInstance as WorkflowInstance,
281
- 'invoke-child',
282
- {
283
- workflowContext: parentInstance.context!,
284
- },
285
- mockContainer
286
- )
287
-
288
- expect(result.status).toBe('COMPLETED')
289
- expect(result.outputData).toEqual({
290
- result: 'SUCCESS',
291
- timestamp: '2024-01-08T12:00:00Z',
292
- })
293
-
294
- startWorkflowSpy.mockRestore()
295
- executeWorkflowSpy.mockRestore()
296
- })
297
-
298
- test('should complete parent step after child workflow completes', async () => {
299
- const startWorkflowSpy = jest.spyOn(workflowExecutor, 'startWorkflow')
300
- const executeWorkflowSpy = jest.spyOn(workflowExecutor, 'executeWorkflow')
301
-
302
- startWorkflowSpy.mockResolvedValue(childInstance as WorkflowInstance)
303
- executeWorkflowSpy.mockResolvedValue({
304
- status: 'COMPLETED',
305
- currentStep: 'end',
306
- context: childInstance.context!,
307
- events: [],
308
- executionTime: 100,
309
- })
310
-
311
- mockEm.findOne.mockResolvedValue(parentDefinition as WorkflowDefinition)
312
-
313
- const result = await stepHandler.executeStep(
314
- mockEm,
315
- parentInstance as WorkflowInstance,
316
- 'invoke-child',
317
- {
318
- workflowContext: parentInstance.context!,
319
- },
320
- mockContainer
321
- )
322
-
323
- expect(result.status).toBe('COMPLETED')
324
- expect(result.outputData).toBeDefined()
325
-
326
- startWorkflowSpy.mockRestore()
327
- executeWorkflowSpy.mockRestore()
328
- })
329
- })
330
-
331
- // ============================================================================
332
- // Data Mapping Tests
333
- // ============================================================================
334
-
335
- describe('Data Mapping', () => {
336
- test('should map input data using dot notation', async () => {
337
- const nestedParentDef = {
338
- ...parentDefinition,
339
- definition: {
340
- ...parentDefinition.definition,
341
- steps: [
342
- ...parentDefinition.definition!.steps.slice(0, 1),
343
- {
344
- stepId: 'invoke-child',
345
- stepName: 'Invoke Child Workflow',
346
- stepType: 'SUB_WORKFLOW',
347
- config: {
348
- subWorkflowId: 'child-workflow',
349
- inputMapping: {
350
- 'order.id': 'customer.order.id',
351
- 'order.total': 'customer.order.total',
352
- },
353
- },
354
- },
355
- ...parentDefinition.definition!.steps.slice(2),
356
- ],
357
- },
358
- }
359
-
360
- const nestedParentInstance = {
361
- ...parentInstance,
362
- context: {
363
- customer: {
364
- order: {
365
- id: '12345',
366
- total: 250.50,
367
- },
368
- },
369
- },
370
- }
371
-
372
- const startWorkflowSpy = jest.spyOn(workflowExecutor, 'startWorkflow')
373
- const executeWorkflowSpy = jest.spyOn(workflowExecutor, 'executeWorkflow')
374
-
375
- startWorkflowSpy.mockResolvedValue(childInstance as WorkflowInstance)
376
- executeWorkflowSpy.mockResolvedValue({
377
- status: 'COMPLETED',
378
- currentStep: 'end',
379
- context: {},
380
- events: [],
381
- executionTime: 100,
382
- })
383
-
384
- mockEm.findOne.mockResolvedValue(nestedParentDef as WorkflowDefinition)
385
-
386
- await stepHandler.executeStep(
387
- mockEm,
388
- nestedParentInstance as WorkflowInstance,
389
- 'invoke-child',
390
- {
391
- workflowContext: nestedParentInstance.context,
392
- },
393
- mockContainer
394
- )
395
-
396
- const startCall = startWorkflowSpy.mock.calls[0]
397
- const initialContext = startCall[1].initialContext
398
-
399
- expect(initialContext).toEqual({
400
- order: {
401
- id: '12345',
402
- total: 250.50,
403
- },
404
- })
405
-
406
- startWorkflowSpy.mockRestore()
407
- executeWorkflowSpy.mockRestore()
408
- })
409
-
410
- test('should map output data using dot notation', async () => {
411
- const nestedChildContext = {
412
- processing: {
413
- result: {
414
- status: 'APPROVED',
415
- code: 200,
416
- },
417
- },
418
- }
419
-
420
- const nestedParentDef = {
421
- ...parentDefinition,
422
- definition: {
423
- ...parentDefinition.definition,
424
- steps: [
425
- ...parentDefinition.definition!.steps.slice(0, 1),
426
- {
427
- stepId: 'invoke-child',
428
- stepName: 'Invoke Child Workflow',
429
- stepType: 'SUB_WORKFLOW',
430
- config: {
431
- subWorkflowId: 'child-workflow',
432
- inputMapping: {},
433
- outputMapping: {
434
- 'approval.status': 'processing.result.status',
435
- 'approval.code': 'processing.result.code',
436
- },
437
- },
438
- },
439
- ...parentDefinition.definition!.steps.slice(2),
440
- ],
441
- },
442
- }
443
-
444
- const startWorkflowSpy = jest.spyOn(workflowExecutor, 'startWorkflow')
445
- const executeWorkflowSpy = jest.spyOn(workflowExecutor, 'executeWorkflow')
446
-
447
- startWorkflowSpy.mockResolvedValue(childInstance as WorkflowInstance)
448
- executeWorkflowSpy.mockResolvedValue({
449
- status: 'COMPLETED',
450
- currentStep: 'end',
451
- context: nestedChildContext,
452
- events: [],
453
- executionTime: 100,
454
- })
455
-
456
- mockEm.findOne.mockResolvedValue(nestedParentDef as WorkflowDefinition)
457
-
458
- const result = await stepHandler.executeStep(
459
- mockEm,
460
- parentInstance as WorkflowInstance,
461
- 'invoke-child',
462
- {
463
- workflowContext: parentInstance.context!,
464
- },
465
- mockContainer
466
- )
467
-
468
- expect(result.outputData).toEqual({
469
- approval: {
470
- status: 'APPROVED',
471
- code: 200,
472
- },
473
- })
474
-
475
- startWorkflowSpy.mockRestore()
476
- executeWorkflowSpy.mockRestore()
477
- })
478
-
479
- test('should pass entire context when no input mapping provided', async () => {
480
- const noMappingDef = {
481
- ...parentDefinition,
482
- definition: {
483
- ...parentDefinition.definition,
484
- steps: [
485
- ...parentDefinition.definition!.steps.slice(0, 1),
486
- {
487
- stepId: 'invoke-child',
488
- stepName: 'Invoke Child Workflow',
489
- stepType: 'SUB_WORKFLOW',
490
- config: {
491
- subWorkflowId: 'child-workflow',
492
- },
493
- },
494
- ...parentDefinition.definition!.steps.slice(2),
495
- ],
496
- },
497
- }
498
-
499
- const startWorkflowSpy = jest.spyOn(workflowExecutor, 'startWorkflow')
500
- const executeWorkflowSpy = jest.spyOn(workflowExecutor, 'executeWorkflow')
501
-
502
- startWorkflowSpy.mockResolvedValue(childInstance as WorkflowInstance)
503
- executeWorkflowSpy.mockResolvedValue({
504
- status: 'COMPLETED',
505
- currentStep: 'end',
506
- context: {},
507
- events: [],
508
- executionTime: 100,
509
- })
510
-
511
- mockEm.findOne.mockResolvedValue(noMappingDef as WorkflowDefinition)
512
-
513
- await stepHandler.executeStep(
514
- mockEm,
515
- parentInstance as WorkflowInstance,
516
- 'invoke-child',
517
- {
518
- workflowContext: parentInstance.context!,
519
- },
520
- mockContainer
521
- )
522
-
523
- const startCall = startWorkflowSpy.mock.calls[0]
524
- const initialContext = startCall[1].initialContext
525
-
526
- expect(initialContext).toEqual(parentInstance.context)
527
-
528
- startWorkflowSpy.mockRestore()
529
- executeWorkflowSpy.mockRestore()
530
- })
531
-
532
- test('should return entire child context when no output mapping provided', async () => {
533
- const noMappingDef = {
534
- ...parentDefinition,
535
- definition: {
536
- ...parentDefinition.definition,
537
- steps: [
538
- ...parentDefinition.definition!.steps.slice(0, 1),
539
- {
540
- stepId: 'invoke-child',
541
- stepName: 'Invoke Child Workflow',
542
- stepType: 'SUB_WORKFLOW',
543
- config: {
544
- subWorkflowId: 'child-workflow',
545
- },
546
- },
547
- ...parentDefinition.definition!.steps.slice(2),
548
- ],
549
- },
550
- }
551
-
552
- const startWorkflowSpy = jest.spyOn(workflowExecutor, 'startWorkflow')
553
- const executeWorkflowSpy = jest.spyOn(workflowExecutor, 'executeWorkflow')
554
-
555
- startWorkflowSpy.mockResolvedValue(childInstance as WorkflowInstance)
556
- executeWorkflowSpy.mockResolvedValue({
557
- status: 'COMPLETED',
558
- currentStep: 'end',
559
- context: childInstance.context!,
560
- events: [],
561
- executionTime: 100,
562
- })
563
-
564
- mockEm.findOne.mockResolvedValue(noMappingDef as WorkflowDefinition)
565
-
566
- const result = await stepHandler.executeStep(
567
- mockEm,
568
- parentInstance as WorkflowInstance,
569
- 'invoke-child',
570
- {
571
- workflowContext: parentInstance.context!,
572
- },
573
- mockContainer
574
- )
575
-
576
- expect(result.outputData).toEqual(childInstance.context)
577
-
578
- startWorkflowSpy.mockRestore()
579
- executeWorkflowSpy.mockRestore()
580
- })
581
- })
582
-
583
- // ============================================================================
584
- // Error Handling Tests
585
- // ============================================================================
586
-
587
- describe('Error Handling', () => {
588
- test('should fail when sub-workflow ID is missing', async () => {
589
- const noSubWorkflowDef = {
590
- ...parentDefinition,
591
- definition: {
592
- ...parentDefinition.definition,
593
- steps: [
594
- ...parentDefinition.definition!.steps.slice(0, 1),
595
- {
596
- stepId: 'invoke-child',
597
- stepName: 'Invoke Child Workflow',
598
- stepType: 'SUB_WORKFLOW',
599
- config: {},
600
- },
601
- ...parentDefinition.definition!.steps.slice(2),
602
- ],
603
- },
604
- }
605
-
606
- mockEm.findOne.mockResolvedValue(noSubWorkflowDef as WorkflowDefinition)
607
-
608
- const result = await stepHandler.executeStep(
609
- mockEm,
610
- parentInstance as WorkflowInstance,
611
- 'invoke-child',
612
- {
613
- workflowContext: parentInstance.context!,
614
- },
615
- mockContainer
616
- )
617
-
618
- expect(result.status).toBe('FAILED')
619
- expect(result.error).toContain('Sub-workflow ID not specified')
620
- })
621
-
622
- test('should propagate child workflow failure to parent', async () => {
623
- const startWorkflowSpy = jest.spyOn(workflowExecutor, 'startWorkflow')
624
- const executeWorkflowSpy = jest.spyOn(workflowExecutor, 'executeWorkflow')
625
-
626
- startWorkflowSpy.mockResolvedValue(childInstance as WorkflowInstance)
627
- executeWorkflowSpy.mockResolvedValue({
628
- status: 'FAILED',
629
- currentStep: 'process',
630
- context: {},
631
- events: [],
632
- errors: ['Processing failed: Invalid data'],
633
- executionTime: 50,
634
- })
635
-
636
- mockEm.findOne.mockResolvedValue(parentDefinition as WorkflowDefinition)
637
-
638
- const result = await stepHandler.executeStep(
639
- mockEm,
640
- parentInstance as WorkflowInstance,
641
- 'invoke-child',
642
- {
643
- workflowContext: parentInstance.context!,
644
- },
645
- mockContainer
646
- )
647
-
648
- expect(result.status).toBe('FAILED')
649
- expect(result.error).toContain('Sub-workflow failed')
650
- expect(result.error).toContain('Invalid data')
651
-
652
- startWorkflowSpy.mockRestore()
653
- executeWorkflowSpy.mockRestore()
654
- })
655
-
656
- test('should handle invalid sub-workflow ID error', async () => {
657
- const startWorkflowSpy = jest.spyOn(workflowExecutor, 'startWorkflow')
658
-
659
- startWorkflowSpy.mockRejectedValue(new Error('Workflow definition not found: invalid-workflow'))
660
-
661
- mockEm.findOne.mockResolvedValue(parentDefinition as WorkflowDefinition)
662
-
663
- const result = await stepHandler.executeStep(
664
- mockEm,
665
- parentInstance as WorkflowInstance,
666
- 'invoke-child',
667
- {
668
- workflowContext: parentInstance.context!,
669
- },
670
- mockContainer
671
- )
672
-
673
- expect(result.status).toBe('FAILED')
674
- expect(result.error).toContain('Sub-workflow execution failed')
675
-
676
- startWorkflowSpy.mockRestore()
677
- })
678
-
679
- test('should fail when child workflow ends in unexpected state', async () => {
680
- const startWorkflowSpy = jest.spyOn(workflowExecutor, 'startWorkflow')
681
- const executeWorkflowSpy = jest.spyOn(workflowExecutor, 'executeWorkflow')
682
-
683
- startWorkflowSpy.mockResolvedValue(childInstance as WorkflowInstance)
684
- executeWorkflowSpy.mockResolvedValue({
685
- status: 'PAUSED',
686
- currentStep: 'user-task',
687
- context: {},
688
- events: [],
689
- executionTime: 50,
690
- })
691
-
692
- mockEm.findOne.mockResolvedValue(parentDefinition as WorkflowDefinition)
693
-
694
- const result = await stepHandler.executeStep(
695
- mockEm,
696
- parentInstance as WorkflowInstance,
697
- 'invoke-child',
698
- {
699
- workflowContext: parentInstance.context!,
700
- },
701
- mockContainer
702
- )
703
-
704
- expect(result.status).toBe('FAILED')
705
- expect(result.error).toContain('Sub-workflow ended in unexpected state: PAUSED')
706
-
707
- startWorkflowSpy.mockRestore()
708
- executeWorkflowSpy.mockRestore()
709
- })
710
- })
711
-
712
- // ============================================================================
713
- // Multi-Tenant Isolation Tests
714
- // ============================================================================
715
-
716
- describe('Multi-Tenant Isolation', () => {
717
- test('should inherit tenant ID from parent workflow', async () => {
718
- const startWorkflowSpy = jest.spyOn(workflowExecutor, 'startWorkflow')
719
- const executeWorkflowSpy = jest.spyOn(workflowExecutor, 'executeWorkflow')
720
-
721
- startWorkflowSpy.mockResolvedValue(childInstance as WorkflowInstance)
722
- executeWorkflowSpy.mockResolvedValue({
723
- status: 'COMPLETED',
724
- currentStep: 'end',
725
- context: {},
726
- events: [],
727
- executionTime: 100,
728
- })
729
-
730
- mockEm.findOne.mockResolvedValue(parentDefinition as WorkflowDefinition)
731
-
732
- await stepHandler.executeStep(
733
- mockEm,
734
- parentInstance as WorkflowInstance,
735
- 'invoke-child',
736
- {
737
- workflowContext: parentInstance.context!,
738
- },
739
- mockContainer
740
- )
741
-
742
- const startCall = startWorkflowSpy.mock.calls[0]
743
- expect(startCall[1].tenantId).toBe(testTenantId)
744
-
745
- startWorkflowSpy.mockRestore()
746
- executeWorkflowSpy.mockRestore()
747
- })
748
-
749
- test('should inherit organization ID from parent workflow', async () => {
750
- const startWorkflowSpy = jest.spyOn(workflowExecutor, 'startWorkflow')
751
- const executeWorkflowSpy = jest.spyOn(workflowExecutor, 'executeWorkflow')
752
-
753
- startWorkflowSpy.mockResolvedValue(childInstance as WorkflowInstance)
754
- executeWorkflowSpy.mockResolvedValue({
755
- status: 'COMPLETED',
756
- currentStep: 'end',
757
- context: {},
758
- events: [],
759
- executionTime: 100,
760
- })
761
-
762
- mockEm.findOne.mockResolvedValue(parentDefinition as WorkflowDefinition)
763
-
764
- await stepHandler.executeStep(
765
- mockEm,
766
- parentInstance as WorkflowInstance,
767
- 'invoke-child',
768
- {
769
- workflowContext: parentInstance.context!,
770
- },
771
- mockContainer
772
- )
773
-
774
- const startCall = startWorkflowSpy.mock.calls[0]
775
- expect(startCall[1].organizationId).toBe(testOrgId)
776
-
777
- startWorkflowSpy.mockRestore()
778
- executeWorkflowSpy.mockRestore()
779
- })
780
-
781
- test('should store parent-child relationship in metadata', async () => {
782
- const startWorkflowSpy = jest.spyOn(workflowExecutor, 'startWorkflow')
783
- const executeWorkflowSpy = jest.spyOn(workflowExecutor, 'executeWorkflow')
784
-
785
- startWorkflowSpy.mockResolvedValue(childInstance as WorkflowInstance)
786
- executeWorkflowSpy.mockResolvedValue({
787
- status: 'COMPLETED',
788
- currentStep: 'end',
789
- context: {},
790
- events: [],
791
- executionTime: 100,
792
- })
793
-
794
- mockEm.findOne.mockResolvedValue(parentDefinition as WorkflowDefinition)
795
-
796
- await stepHandler.executeStep(
797
- mockEm,
798
- parentInstance as WorkflowInstance,
799
- 'invoke-child',
800
- {
801
- workflowContext: parentInstance.context!,
802
- },
803
- mockContainer
804
- )
805
-
806
- const startCall = startWorkflowSpy.mock.calls[0]
807
- const metadata = startCall[1].metadata
808
-
809
- expect(metadata?.labels?.parentInstanceId).toBe(parentInstanceId)
810
- expect(metadata?.labels?.parentStepId).toBe('invoke-child')
811
-
812
- startWorkflowSpy.mockRestore()
813
- executeWorkflowSpy.mockRestore()
814
- })
815
- })
816
-
817
- // ============================================================================
818
- // Event Logging Tests
819
- // ============================================================================
820
-
821
- describe('Event Logging', () => {
822
- test('should log SUB_WORKFLOW_STARTED event', async () => {
823
- const startWorkflowSpy = jest.spyOn(workflowExecutor, 'startWorkflow')
824
- const executeWorkflowSpy = jest.spyOn(workflowExecutor, 'executeWorkflow')
825
-
826
- startWorkflowSpy.mockResolvedValue(childInstance as WorkflowInstance)
827
- executeWorkflowSpy.mockResolvedValue({
828
- status: 'COMPLETED',
829
- currentStep: 'end',
830
- context: childInstance.context!,
831
- events: [],
832
- executionTime: 100,
833
- })
834
-
835
- mockEm.findOne.mockResolvedValue(parentDefinition as WorkflowDefinition)
836
-
837
- await stepHandler.executeStep(
838
- mockEm,
839
- parentInstance as WorkflowInstance,
840
- 'invoke-child',
841
- {
842
- workflowContext: parentInstance.context!,
843
- },
844
- mockContainer
845
- )
846
-
847
- const createCalls = mockEm.create.mock.calls
848
- const eventCalls = createCalls.filter((call: any) => call[0].name === 'WorkflowEvent')
849
-
850
- const startedEvent = eventCalls.find((call: any) => call[1].eventType === 'SUB_WORKFLOW_STARTED')
851
- expect(startedEvent).toBeDefined()
852
- expect((startedEvent![1] as any).eventData.subWorkflowId).toBe('child-workflow')
853
- expect((startedEvent![1] as any).eventData.childInstanceId).toBe(childInstanceId)
854
-
855
- startWorkflowSpy.mockRestore()
856
- executeWorkflowSpy.mockRestore()
857
- })
858
-
859
- test('should log SUB_WORKFLOW_COMPLETED event with output data', async () => {
860
- const startWorkflowSpy = jest.spyOn(workflowExecutor, 'startWorkflow')
861
- const executeWorkflowSpy = jest.spyOn(workflowExecutor, 'executeWorkflow')
862
-
863
- startWorkflowSpy.mockResolvedValue(childInstance as WorkflowInstance)
864
- executeWorkflowSpy.mockResolvedValue({
865
- status: 'COMPLETED',
866
- currentStep: 'end',
867
- context: childInstance.context!,
868
- events: [],
869
- executionTime: 100,
870
- })
871
-
872
- mockEm.findOne.mockResolvedValue(parentDefinition as WorkflowDefinition)
873
-
874
- await stepHandler.executeStep(
875
- mockEm,
876
- parentInstance as WorkflowInstance,
877
- 'invoke-child',
878
- {
879
- workflowContext: parentInstance.context!,
880
- },
881
- mockContainer
882
- )
883
-
884
- const createCalls = mockEm.create.mock.calls
885
- const eventCalls = createCalls.filter((call: any) => call[0].name === 'WorkflowEvent')
886
-
887
- const completedEvent = eventCalls.find((call: any) => call[1].eventType === 'SUB_WORKFLOW_COMPLETED')
888
- expect(completedEvent).toBeDefined()
889
- expect((completedEvent![1] as any).eventData.childInstanceId).toBe(childInstanceId)
890
- expect((completedEvent![1] as any).eventData.outputData).toBeDefined()
891
-
892
- startWorkflowSpy.mockRestore()
893
- executeWorkflowSpy.mockRestore()
894
- })
895
-
896
- test('should log SUB_WORKFLOW_FAILED event on error', async () => {
897
- const startWorkflowSpy = jest.spyOn(workflowExecutor, 'startWorkflow')
898
- const executeWorkflowSpy = jest.spyOn(workflowExecutor, 'executeWorkflow')
899
-
900
- startWorkflowSpy.mockResolvedValue(childInstance as WorkflowInstance)
901
- executeWorkflowSpy.mockResolvedValue({
902
- status: 'FAILED',
903
- currentStep: 'process',
904
- context: {},
905
- events: [],
906
- errors: ['Processing error'],
907
- executionTime: 50,
908
- })
909
-
910
- mockEm.findOne.mockResolvedValue(parentDefinition as WorkflowDefinition)
911
-
912
- await stepHandler.executeStep(
913
- mockEm,
914
- parentInstance as WorkflowInstance,
915
- 'invoke-child',
916
- {
917
- workflowContext: parentInstance.context!,
918
- },
919
- mockContainer
920
- )
921
-
922
- const createCalls = mockEm.create.mock.calls
923
- const eventCalls = createCalls.filter((call: any) => call[0].name === 'WorkflowEvent')
924
-
925
- const failedEvent = eventCalls.find((call: any) => call[1].eventType === 'SUB_WORKFLOW_FAILED')
926
- expect(failedEvent).toBeDefined()
927
- expect((failedEvent![1] as any).eventData.childInstanceId).toBe(childInstanceId)
928
- expect((failedEvent![1] as any).eventData.error).toContain('Processing error')
929
-
930
- startWorkflowSpy.mockRestore()
931
- executeWorkflowSpy.mockRestore()
932
- })
933
- })
934
- })