@webiny/app-website-builder-workflows 0.0.0-unstable.0156a4c312

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 (402) hide show
  1. package/Components/ContentReviews/WbContentReviews.d.ts +2 -0
  2. package/Components/ContentReviews/WbContentReviews.js +41 -0
  3. package/Components/ContentReviews/WbContentReviews.js.map +1 -0
  4. package/Components/ContentReviews/WbContentReviews.smoke.test.d.ts +1 -0
  5. package/Components/ContentReviews/WbContentReviews.smoke.test.js +59 -0
  6. package/Components/ContentReviews/WbContentReviews.smoke.test.js.map +1 -0
  7. package/Components/ContentReviews/WbContentReviews.test.d.ts +1 -0
  8. package/Components/ContentReviews/WbContentReviews.test.js +80 -0
  9. package/Components/ContentReviews/WbContentReviews.test.js.map +1 -0
  10. package/Components/ContentReviews/WbContentReviewsSidebarItem.d.ts +2 -0
  11. package/Components/ContentReviews/WbContentReviewsSidebarItem.js +18 -0
  12. package/Components/ContentReviews/WbContentReviewsSidebarItem.js.map +1 -0
  13. package/Components/ContentReviews/WbContentReviewsSidebarItem.test.d.ts +1 -0
  14. package/Components/ContentReviews/WbContentReviewsSidebarItem.test.js +67 -0
  15. package/Components/ContentReviews/WbContentReviewsSidebarItem.test.js.map +1 -0
  16. package/Components/PageEditor/DisabledPublishButton.d.ts +6 -0
  17. package/Components/PageEditor/DisabledPublishButton.js +17 -0
  18. package/Components/PageEditor/DisabledPublishButton.js.map +1 -0
  19. package/Components/PageEditor/DisabledPublishButton.test.d.ts +1 -0
  20. package/Components/PageEditor/DisabledPublishButton.test.js +67 -0
  21. package/Components/PageEditor/DisabledPublishButton.test.js.map +1 -0
  22. package/Components/PageEditor/PageBasePublishDecorator.d.ts +2 -0
  23. package/Components/PageEditor/PageBasePublishDecorator.js +23 -0
  24. package/Components/PageEditor/PageBasePublishDecorator.js.map +1 -0
  25. package/Components/PageEditor/PageEditorAutoSave.d.ts +2 -0
  26. package/Components/PageEditor/PageEditorAutoSave.js +23 -0
  27. package/Components/PageEditor/PageEditorAutoSave.js.map +1 -0
  28. package/Components/PageEditor/PageEditorAutoSave.test.d.ts +1 -0
  29. package/Components/PageEditor/PageEditorAutoSave.test.js +111 -0
  30. package/Components/PageEditor/PageEditorAutoSave.test.js.map +1 -0
  31. package/Components/PageEditor/PageEditorConfig.d.ts +2 -0
  32. package/Components/PageEditor/PageEditorConfig.js +13 -0
  33. package/Components/PageEditor/PageEditorConfig.js.map +1 -0
  34. package/Components/PageEditor/PageEditorLayout.d.ts +2 -0
  35. package/Components/PageEditor/PageEditorLayout.js +10 -0
  36. package/Components/PageEditor/PageEditorLayout.js.map +1 -0
  37. package/Components/PageEditor/PageEditorLayout.test.d.ts +1 -0
  38. package/Components/PageEditor/PageEditorLayout.test.js +121 -0
  39. package/Components/PageEditor/PageEditorLayout.test.js.map +1 -0
  40. package/Components/PageEditor/PageEditorTopBar.d.ts +2 -0
  41. package/Components/PageEditor/PageEditorTopBar.js +10 -0
  42. package/Components/PageEditor/PageEditorTopBar.js.map +1 -0
  43. package/Components/PageEditor/PageEditorTopBar.test.d.ts +1 -0
  44. package/Components/PageEditor/PageEditorTopBar.test.js +175 -0
  45. package/Components/PageEditor/PageEditorTopBar.test.js.map +1 -0
  46. package/Components/PageEditor/PageNewRevisionDecorator.d.ts +2 -0
  47. package/Components/PageEditor/PageNewRevisionDecorator.js +24 -0
  48. package/Components/PageEditor/PageNewRevisionDecorator.js.map +1 -0
  49. package/Components/PageEditor/PageNewRevisionDecorator.test.d.ts +1 -0
  50. package/Components/PageEditor/PageNewRevisionDecorator.test.js +107 -0
  51. package/Components/PageEditor/PageNewRevisionDecorator.test.js.map +1 -0
  52. package/Components/PageEditor/PageReadOnlySync.d.ts +3 -0
  53. package/Components/PageEditor/PageReadOnlySync.js +23 -0
  54. package/Components/PageEditor/PageReadOnlySync.js.map +1 -0
  55. package/Components/PageEditor/PageReviewBar.d.ts +4 -0
  56. package/Components/PageEditor/PageReviewBar.js +93 -0
  57. package/Components/PageEditor/PageReviewBar.js.map +1 -0
  58. package/Components/PageEditor/PageReviewBar.test.d.ts +1 -0
  59. package/Components/PageEditor/PageReviewBar.test.js +135 -0
  60. package/Components/PageEditor/PageReviewBar.test.js.map +1 -0
  61. package/Components/PageEditor/PageReviewPublishAction.d.ts +2 -0
  62. package/Components/PageEditor/PageReviewPublishAction.js +15 -0
  63. package/Components/PageEditor/PageReviewPublishAction.js.map +1 -0
  64. package/Components/PageEditor/PageReviewPublishButton.d.ts +4 -0
  65. package/Components/PageEditor/PageReviewPublishButton.js +23 -0
  66. package/Components/PageEditor/PageReviewPublishButton.js.map +1 -0
  67. package/Components/PageEditor/PageScheduleDecorator.d.ts +2 -0
  68. package/Components/PageEditor/PageScheduleDecorator.js +23 -0
  69. package/Components/PageEditor/PageScheduleDecorator.js.map +1 -0
  70. package/Components/PageEditor/PageScheduleDecorator.test.d.ts +1 -0
  71. package/Components/PageEditor/PageScheduleDecorator.test.js +75 -0
  72. package/Components/PageEditor/PageScheduleDecorator.test.js.map +1 -0
  73. package/Components/PageEditor/getPageReadOnlyReason.d.ts +4 -0
  74. package/Components/PageEditor/getPageReadOnlyReason.js +20 -0
  75. package/Components/PageEditor/getPageReadOnlyReason.js.map +1 -0
  76. package/Components/PageEditor/getPageReadOnlyReason.test.d.ts +1 -0
  77. package/Components/PageEditor/getPageReadOnlyReason.test.js +122 -0
  78. package/Components/PageEditor/getPageReadOnlyReason.test.js.map +1 -0
  79. package/Components/PageEditor/getPageReviewContext.d.ts +9 -0
  80. package/Components/PageEditor/getPageReviewContext.js +13 -0
  81. package/Components/PageEditor/getPageReviewContext.js.map +1 -0
  82. package/Components/PageEditor/getPageReviewContext.test.d.ts +1 -0
  83. package/Components/PageEditor/getPageReviewContext.test.js +42 -0
  84. package/Components/PageEditor/getPageReviewContext.test.js.map +1 -0
  85. package/Components/PageEditor/pageEditorDocument.d.ts +17 -0
  86. package/Components/PageEditor/pageEditorDocument.js +0 -0
  87. package/Components/PageEditor/pageReviewMatrix.test.d.ts +1 -0
  88. package/Components/PageEditor/pageReviewMatrix.test.js +223 -0
  89. package/Components/PageEditor/pageReviewMatrix.test.js.map +1 -0
  90. package/Components/PageEditor/publishMatrix.test.d.ts +1 -0
  91. package/Components/PageEditor/publishMatrix.test.js +313 -0
  92. package/Components/PageEditor/publishMatrix.test.js.map +1 -0
  93. package/Components/PagesList/PageListReviewGatedActions.d.ts +2 -0
  94. package/Components/PagesList/PageListReviewGatedActions.js +27 -0
  95. package/Components/PagesList/PageListReviewGatedActions.js.map +1 -0
  96. package/Components/PagesList/PageListReviewGatedActions.test.d.ts +1 -0
  97. package/Components/PagesList/PageListReviewGatedActions.test.js +94 -0
  98. package/Components/PagesList/PageListReviewGatedActions.test.js.map +1 -0
  99. package/Components/PagesList/PagesList.d.ts +2 -0
  100. package/Components/PagesList/PagesList.js +8 -0
  101. package/Components/PagesList/PagesList.js.map +1 -0
  102. package/Components/PagesList/PagesList.test.d.ts +1 -0
  103. package/Components/PagesList/PagesList.test.js +47 -0
  104. package/Components/PagesList/PagesList.test.js.map +1 -0
  105. package/Components/PagesList/index.d.ts +1 -0
  106. package/Components/PagesList/index.js +1 -0
  107. package/Components/index.d.ts +2 -0
  108. package/Components/index.js +2 -0
  109. package/LICENSE +21 -0
  110. package/README.md +11 -0
  111. package/Routes/WebsiteBuilderWorkflowsMenu.d.ts +2 -0
  112. package/Routes/WebsiteBuilderWorkflowsMenu.js +23 -0
  113. package/Routes/WebsiteBuilderWorkflowsMenu.js.map +1 -0
  114. package/Routes/WebsiteBuilderWorkflowsMenu.test.d.ts +1 -0
  115. package/Routes/WebsiteBuilderWorkflowsMenu.test.js +141 -0
  116. package/Routes/WebsiteBuilderWorkflowsMenu.test.js.map +1 -0
  117. package/Routes/index.d.ts +1 -0
  118. package/Routes/index.js +1 -0
  119. package/constants.d.ts +1 -0
  120. package/constants.js +4 -0
  121. package/constants.js.map +1 -0
  122. package/editorGlue.wiring.test.d.ts +1 -0
  123. package/editorGlue.wiring.test.js +128 -0
  124. package/editorGlue.wiring.test.js.map +1 -0
  125. package/features/cache/WbReviewCacheSyncHandler.d.ts +8 -0
  126. package/features/cache/WbReviewCacheSyncHandler.js +14 -0
  127. package/features/cache/WbReviewCacheSyncHandler.js.map +1 -0
  128. package/features/cache/WbReviewPageCacheWriter.d.ts +17 -0
  129. package/features/cache/WbReviewPageCacheWriter.js +39 -0
  130. package/features/cache/WbReviewPageCacheWriter.js.map +1 -0
  131. package/features/cache/WbReviewPageCacheWriter.test.d.ts +1 -0
  132. package/features/cache/WbReviewPageCacheWriter.test.js +115 -0
  133. package/features/cache/WbReviewPageCacheWriter.test.js.map +1 -0
  134. package/features/cache/abstractions.d.ts +5 -0
  135. package/features/cache/abstractions.js +5 -0
  136. package/features/cache/abstractions.js.map +1 -0
  137. package/features/cache/feature.d.ts +1 -0
  138. package/features/cache/feature.js +13 -0
  139. package/features/cache/feature.js.map +1 -0
  140. package/features/editorGateway/WbWorkflowEditorGateway/WbWorkflowEditorGateway.d.ts +25 -0
  141. package/features/editorGateway/WbWorkflowEditorGateway/WbWorkflowEditorGateway.js +112 -0
  142. package/features/editorGateway/WbWorkflowEditorGateway/WbWorkflowEditorGateway.js.map +1 -0
  143. package/features/editorGateway/WbWorkflowEditorGateway/WbWorkflowEditorGateway.test.d.ts +1 -0
  144. package/features/editorGateway/WbWorkflowEditorGateway/WbWorkflowEditorGateway.test.js +632 -0
  145. package/features/editorGateway/WbWorkflowEditorGateway/WbWorkflowEditorGateway.test.js.map +1 -0
  146. package/features/editorGateway/feature.d.ts +1 -0
  147. package/features/editorGateway/feature.js +11 -0
  148. package/features/editorGateway/feature.js.map +1 -0
  149. package/features/editorGateway/feature.test.d.ts +1 -0
  150. package/features/editorGateway/feature.test.js +244 -0
  151. package/features/editorGateway/feature.test.js.map +1 -0
  152. package/features/editorGateway/graphql/deleteWebsiteBuilderPageWorkflow.d.ts +1 -0
  153. package/features/editorGateway/graphql/deleteWebsiteBuilderPageWorkflow.js +19 -0
  154. package/features/editorGateway/graphql/deleteWebsiteBuilderPageWorkflow.js.map +1 -0
  155. package/features/editorGateway/graphql/getWebsiteBuilderPageWorkflow.d.ts +1 -0
  156. package/features/editorGateway/graphql/getWebsiteBuilderPageWorkflow.js +19 -0
  157. package/features/editorGateway/graphql/getWebsiteBuilderPageWorkflow.js.map +1 -0
  158. package/features/editorGateway/graphql/inspectWebsiteBuilderPageRouting.d.ts +1 -0
  159. package/features/editorGateway/graphql/inspectWebsiteBuilderPageRouting.js +19 -0
  160. package/features/editorGateway/graphql/inspectWebsiteBuilderPageRouting.js.map +1 -0
  161. package/features/editorGateway/graphql/listWebsiteBuilderPageWorkflowNames.d.ts +1 -0
  162. package/features/editorGateway/graphql/listWebsiteBuilderPageWorkflowNames.js +23 -0
  163. package/features/editorGateway/graphql/listWebsiteBuilderPageWorkflowNames.js.map +1 -0
  164. package/features/editorGateway/graphql/storeWebsiteBuilderPageWorkflow.d.ts +1 -0
  165. package/features/editorGateway/graphql/storeWebsiteBuilderPageWorkflow.js +19 -0
  166. package/features/editorGateway/graphql/storeWebsiteBuilderPageWorkflow.js.map +1 -0
  167. package/features/editorGateway/graphql/websiteBuilderPageFolderExists.d.ts +1 -0
  168. package/features/editorGateway/graphql/websiteBuilderPageFolderExists.js +16 -0
  169. package/features/editorGateway/graphql/websiteBuilderPageFolderExists.js.map +1 -0
  170. package/features/editorMounting/WbWorkflowEditorAppAdapter.d.ts +21 -0
  171. package/features/editorMounting/WbWorkflowEditorAppAdapter.js +45 -0
  172. package/features/editorMounting/WbWorkflowEditorAppAdapter.js.map +1 -0
  173. package/features/editorMounting/WbWorkflowEditorAppAdapter.test.d.ts +1 -0
  174. package/features/editorMounting/WbWorkflowEditorAppAdapter.test.js +115 -0
  175. package/features/editorMounting/WbWorkflowEditorAppAdapter.test.js.map +1 -0
  176. package/features/editorMounting/abstractions.d.ts +5 -0
  177. package/features/editorMounting/abstractions.js +5 -0
  178. package/features/editorMounting/abstractions.js.map +1 -0
  179. package/features/editorMounting/feature.d.ts +3 -0
  180. package/features/editorMounting/feature.js +19 -0
  181. package/features/editorMounting/feature.js.map +1 -0
  182. package/features/editorMounting/feature.test.d.ts +1 -0
  183. package/features/editorMounting/feature.test.js +93 -0
  184. package/features/editorMounting/feature.test.js.map +1 -0
  185. package/features/editorReview/WbPageContentReloader.d.ts +12 -0
  186. package/features/editorReview/WbPageContentReloader.js +40 -0
  187. package/features/editorReview/WbPageContentReloader.js.map +1 -0
  188. package/features/editorReview/WbPageContentReloader.test.d.ts +1 -0
  189. package/features/editorReview/WbPageContentReloader.test.js +222 -0
  190. package/features/editorReview/WbPageContentReloader.test.js.map +1 -0
  191. package/features/editorReview/WbPageReview.d.ts +8 -0
  192. package/features/editorReview/WbPageReview.js +14 -0
  193. package/features/editorReview/WbPageReview.js.map +1 -0
  194. package/features/editorReview/WbPageUnsavedChanges.d.ts +8 -0
  195. package/features/editorReview/WbPageUnsavedChanges.js +12 -0
  196. package/features/editorReview/WbPageUnsavedChanges.js.map +1 -0
  197. package/features/editorReview/WbPageUnsavedChanges.test.d.ts +1 -0
  198. package/features/editorReview/WbPageUnsavedChanges.test.js +33 -0
  199. package/features/editorReview/WbPageUnsavedChanges.test.js.map +1 -0
  200. package/features/editorReview/abstractions.d.ts +5 -0
  201. package/features/editorReview/abstractions.js +5 -0
  202. package/features/editorReview/abstractions.js.map +1 -0
  203. package/features/editorReview/feature.d.ts +3 -0
  204. package/features/editorReview/feature.js +17 -0
  205. package/features/editorReview/feature.js.map +1 -0
  206. package/features/gateway/WbReviewChangeMessageHandler.d.ts +8 -0
  207. package/features/gateway/WbReviewChangeMessageHandler.js +16 -0
  208. package/features/gateway/WbReviewChangeMessageHandler.js.map +1 -0
  209. package/features/gateway/WbReviewContentAdapter/WbReviewContentAdapter.d.ts +13 -0
  210. package/features/gateway/WbReviewContentAdapter/WbReviewContentAdapter.js +35 -0
  211. package/features/gateway/WbReviewContentAdapter/WbReviewContentAdapter.js.map +1 -0
  212. package/features/gateway/WbReviewContentAdapter/WbReviewContentAdapter.test.d.ts +1 -0
  213. package/features/gateway/WbReviewContentAdapter/WbReviewContentAdapter.test.js +47 -0
  214. package/features/gateway/WbReviewContentAdapter/WbReviewContentAdapter.test.js.map +1 -0
  215. package/features/gateway/WbReviewContentAdapter/abstractions.d.ts +5 -0
  216. package/features/gateway/WbReviewContentAdapter/abstractions.js +5 -0
  217. package/features/gateway/WbReviewContentAdapter/abstractions.js.map +1 -0
  218. package/features/gateway/WbReviewGateway/WbReviewGateway.d.ts +51 -0
  219. package/features/gateway/WbReviewGateway/WbReviewGateway.js +216 -0
  220. package/features/gateway/WbReviewGateway/WbReviewGateway.js.map +1 -0
  221. package/features/gateway/WbReviewGateway/WbReviewGateway.test.d.ts +1 -0
  222. package/features/gateway/WbReviewGateway/WbReviewGateway.test.js +647 -0
  223. package/features/gateway/WbReviewGateway/WbReviewGateway.test.js.map +1 -0
  224. package/features/gateway/WbReviewNotificationHandler.d.ts +8 -0
  225. package/features/gateway/WbReviewNotificationHandler.js +16 -0
  226. package/features/gateway/WbReviewNotificationHandler.js.map +1 -0
  227. package/features/gateway/WbReviewRowProvider/WbReviewRowProvider.d.ts +8 -0
  228. package/features/gateway/WbReviewRowProvider/WbReviewRowProvider.js +14 -0
  229. package/features/gateway/WbReviewRowProvider/WbReviewRowProvider.js.map +1 -0
  230. package/features/gateway/WbReviewRowProvider/abstractions.d.ts +5 -0
  231. package/features/gateway/WbReviewRowProvider/abstractions.js +5 -0
  232. package/features/gateway/WbReviewRowProvider/abstractions.js.map +1 -0
  233. package/features/gateway/assertWbPageNamespace.d.ts +1 -0
  234. package/features/gateway/assertWbPageNamespace.js +7 -0
  235. package/features/gateway/assertWbPageNamespace.js.map +1 -0
  236. package/features/gateway/contentReviewsBindings.test.d.ts +1 -0
  237. package/features/gateway/contentReviewsBindings.test.js +159 -0
  238. package/features/gateway/contentReviewsBindings.test.js.map +1 -0
  239. package/features/gateway/feature.d.ts +4 -0
  240. package/features/gateway/feature.js +27 -0
  241. package/features/gateway/feature.js.map +1 -0
  242. package/features/gateway/feature.test.d.ts +1 -0
  243. package/features/gateway/feature.test.js +85 -0
  244. package/features/gateway/feature.test.js.map +1 -0
  245. package/features/gateway/graphql/WbOperationResponse.d.ts +3 -0
  246. package/features/gateway/graphql/WbOperationResponse.js +0 -0
  247. package/features/gateway/graphql/approveWebsiteBuilderPageReviewStep.d.ts +1 -0
  248. package/features/gateway/graphql/approveWebsiteBuilderPageReviewStep.js +22 -0
  249. package/features/gateway/graphql/approveWebsiteBuilderPageReviewStep.js.map +1 -0
  250. package/features/gateway/graphql/cancelWebsiteBuilderPageReview.d.ts +1 -0
  251. package/features/gateway/graphql/cancelWebsiteBuilderPageReview.js +18 -0
  252. package/features/gateway/graphql/cancelWebsiteBuilderPageReview.js.map +1 -0
  253. package/features/gateway/graphql/cancelWebsiteBuilderPageReviewsForDelete.d.ts +1 -0
  254. package/features/gateway/graphql/cancelWebsiteBuilderPageReviewsForDelete.js +26 -0
  255. package/features/gateway/graphql/cancelWebsiteBuilderPageReviewsForDelete.js.map +1 -0
  256. package/features/gateway/graphql/getWebsiteBuilderPageReview.d.ts +1 -0
  257. package/features/gateway/graphql/getWebsiteBuilderPageReview.js +18 -0
  258. package/features/gateway/graphql/getWebsiteBuilderPageReview.js.map +1 -0
  259. package/features/gateway/graphql/getWebsiteBuilderPageReviewStepRun.d.ts +1 -0
  260. package/features/gateway/graphql/getWebsiteBuilderPageReviewStepRun.js +18 -0
  261. package/features/gateway/graphql/getWebsiteBuilderPageReviewStepRun.js.map +1 -0
  262. package/features/gateway/graphql/getWebsiteBuilderPageTargetReview.d.ts +1 -0
  263. package/features/gateway/graphql/getWebsiteBuilderPageTargetReview.js +18 -0
  264. package/features/gateway/graphql/getWebsiteBuilderPageTargetReview.js.map +1 -0
  265. package/features/gateway/graphql/listWebsiteBuilderPageReviewStepCandidates.d.ts +1 -0
  266. package/features/gateway/graphql/listWebsiteBuilderPageReviewStepCandidates.js +18 -0
  267. package/features/gateway/graphql/listWebsiteBuilderPageReviewStepCandidates.js.map +1 -0
  268. package/features/gateway/graphql/listWebsiteBuilderPageReviews.d.ts +1 -0
  269. package/features/gateway/graphql/listWebsiteBuilderPageReviews.js +34 -0
  270. package/features/gateway/graphql/listWebsiteBuilderPageReviews.js.map +1 -0
  271. package/features/gateway/graphql/listWebsiteBuilderPageStepCandidates.d.ts +1 -0
  272. package/features/gateway/graphql/listWebsiteBuilderPageStepCandidates.js +22 -0
  273. package/features/gateway/graphql/listWebsiteBuilderPageStepCandidates.js.map +1 -0
  274. package/features/gateway/graphql/listWebsiteBuilderPageWorkflows.d.ts +1 -0
  275. package/features/gateway/graphql/listWebsiteBuilderPageWorkflows.js +18 -0
  276. package/features/gateway/graphql/listWebsiteBuilderPageWorkflows.js.map +1 -0
  277. package/features/gateway/graphql/reassignWebsiteBuilderPageReviewStep.d.ts +1 -0
  278. package/features/gateway/graphql/reassignWebsiteBuilderPageReviewStep.js +22 -0
  279. package/features/gateway/graphql/reassignWebsiteBuilderPageReviewStep.js.map +1 -0
  280. package/features/gateway/graphql/rejectWebsiteBuilderPageReviewStep.d.ts +1 -0
  281. package/features/gateway/graphql/rejectWebsiteBuilderPageReviewStep.js +22 -0
  282. package/features/gateway/graphql/rejectWebsiteBuilderPageReviewStep.js.map +1 -0
  283. package/features/gateway/graphql/requestWebsiteBuilderPageReview.d.ts +1 -0
  284. package/features/gateway/graphql/requestWebsiteBuilderPageReview.js +26 -0
  285. package/features/gateway/graphql/requestWebsiteBuilderPageReview.js.map +1 -0
  286. package/features/gateway/graphql/restartWebsiteBuilderPageReviewStep.d.ts +1 -0
  287. package/features/gateway/graphql/restartWebsiteBuilderPageReviewStep.js +18 -0
  288. package/features/gateway/graphql/restartWebsiteBuilderPageReviewStep.js.map +1 -0
  289. package/features/gateway/graphql/startWebsiteBuilderPageReviewStep.d.ts +1 -0
  290. package/features/gateway/graphql/startWebsiteBuilderPageReviewStep.js +18 -0
  291. package/features/gateway/graphql/startWebsiteBuilderPageReviewStep.js.map +1 -0
  292. package/features/gateway/graphql/takeOverWebsiteBuilderPageReviewStep.d.ts +1 -0
  293. package/features/gateway/graphql/takeOverWebsiteBuilderPageReviewStep.js +26 -0
  294. package/features/gateway/graphql/takeOverWebsiteBuilderPageReviewStep.js.map +1 -0
  295. package/features/trash/BulkDeletePresenterReviewDecorator.d.ts +14 -0
  296. package/features/trash/BulkDeletePresenterReviewDecorator.js +27 -0
  297. package/features/trash/BulkDeletePresenterReviewDecorator.js.map +1 -0
  298. package/features/trash/BulkDeletePresenterReviewDecorator.test.d.ts +1 -0
  299. package/features/trash/BulkDeletePresenterReviewDecorator.test.js +234 -0
  300. package/features/trash/BulkDeletePresenterReviewDecorator.test.js.map +1 -0
  301. package/features/trash/DeletePageRevisionUseCaseReviewDecorator.d.ts +13 -0
  302. package/features/trash/DeletePageRevisionUseCaseReviewDecorator.js +23 -0
  303. package/features/trash/DeletePageRevisionUseCaseReviewDecorator.js.map +1 -0
  304. package/features/trash/DeletePageRevisionUseCaseReviewDecorator.test.d.ts +1 -0
  305. package/features/trash/DeletePageRevisionUseCaseReviewDecorator.test.js +114 -0
  306. package/features/trash/DeletePageRevisionUseCaseReviewDecorator.test.js.map +1 -0
  307. package/features/trash/DeletePageUseCaseReviewDecorator.d.ts +13 -0
  308. package/features/trash/DeletePageUseCaseReviewDecorator.js +23 -0
  309. package/features/trash/DeletePageUseCaseReviewDecorator.js.map +1 -0
  310. package/features/trash/DeletePageUseCaseReviewDecorator.test.d.ts +1 -0
  311. package/features/trash/DeletePageUseCaseReviewDecorator.test.js +134 -0
  312. package/features/trash/DeletePageUseCaseReviewDecorator.test.js.map +1 -0
  313. package/features/trash/feature.d.ts +1 -0
  314. package/features/trash/feature.js +15 -0
  315. package/features/trash/feature.js.map +1 -0
  316. package/features/trash/feature.test.d.ts +1 -0
  317. package/features/trash/feature.test.js +183 -0
  318. package/features/trash/feature.test.js.map +1 -0
  319. package/hooks/usePage.d.ts +5 -0
  320. package/hooks/usePage.js +15 -0
  321. package/hooks/usePage.js.map +1 -0
  322. package/hooks/usePage.test.d.ts +1 -0
  323. package/hooks/usePage.test.js +49 -0
  324. package/hooks/usePage.test.js.map +1 -0
  325. package/index.d.ts +2 -0
  326. package/index.js +40 -0
  327. package/index.js.map +1 -0
  328. package/index.mount.test.d.ts +1 -0
  329. package/index.mount.test.js +50 -0
  330. package/index.mount.test.js.map +1 -0
  331. package/index.test.d.ts +1 -0
  332. package/index.test.js +523 -0
  333. package/index.test.js.map +1 -0
  334. package/package.json +54 -0
  335. package/pageListChangeStatus.wiring.test.d.ts +1 -0
  336. package/pageListChangeStatus.wiring.test.js +175 -0
  337. package/pageListChangeStatus.wiring.test.js.map +1 -0
  338. package/pageListGlue.wiring.test.d.ts +1 -0
  339. package/pageListGlue.wiring.test.js +220 -0
  340. package/pageListGlue.wiring.test.js.map +1 -0
  341. package/presentation/page/PageGet/WbReviewGetPageFieldSelection.d.ts +8 -0
  342. package/presentation/page/PageGet/WbReviewGetPageFieldSelection.js +16 -0
  343. package/presentation/page/PageGet/WbReviewGetPageFieldSelection.js.map +1 -0
  344. package/presentation/page/PageGet/WbReviewGetPageFieldSelection.test.d.ts +1 -0
  345. package/presentation/page/PageGet/WbReviewGetPageFieldSelection.test.js +19 -0
  346. package/presentation/page/PageGet/WbReviewGetPageFieldSelection.test.js.map +1 -0
  347. package/presentation/page/PageGet/feature.d.ts +1 -0
  348. package/presentation/page/PageGet/feature.js +11 -0
  349. package/presentation/page/PageGet/feature.js.map +1 -0
  350. package/presentation/page/PageList/WbReviewListPagesFieldSelection.d.ts +8 -0
  351. package/presentation/page/PageList/WbReviewListPagesFieldSelection.js +16 -0
  352. package/presentation/page/PageList/WbReviewListPagesFieldSelection.js.map +1 -0
  353. package/presentation/page/PageList/WbReviewListPagesFieldSelection.test.d.ts +1 -0
  354. package/presentation/page/PageList/WbReviewListPagesFieldSelection.test.js +19 -0
  355. package/presentation/page/PageList/WbReviewListPagesFieldSelection.test.js.map +1 -0
  356. package/presentation/page/PageList/WbReviewTableRowMapperDecorator.d.ts +12 -0
  357. package/presentation/page/PageList/WbReviewTableRowMapperDecorator.js +24 -0
  358. package/presentation/page/PageList/WbReviewTableRowMapperDecorator.js.map +1 -0
  359. package/presentation/page/PageList/WbReviewTableRowMapperDecorator.test.d.ts +1 -0
  360. package/presentation/page/PageList/WbReviewTableRowMapperDecorator.test.js +70 -0
  361. package/presentation/page/PageList/WbReviewTableRowMapperDecorator.test.js.map +1 -0
  362. package/presentation/page/PageList/feature.d.ts +1 -0
  363. package/presentation/page/PageList/feature.js +13 -0
  364. package/presentation/page/PageList/feature.js.map +1 -0
  365. package/presentation/page/RevisionList/RevisionListPresenterDecorator.d.ts +15 -0
  366. package/presentation/page/RevisionList/RevisionListPresenterDecorator.js +36 -0
  367. package/presentation/page/RevisionList/RevisionListPresenterDecorator.js.map +1 -0
  368. package/presentation/page/RevisionList/RevisionListPresenterDecorator.test.d.ts +1 -0
  369. package/presentation/page/RevisionList/RevisionListPresenterDecorator.test.js +119 -0
  370. package/presentation/page/RevisionList/RevisionListPresenterDecorator.test.js.map +1 -0
  371. package/presentation/page/RevisionList/feature.d.ts +1 -0
  372. package/presentation/page/RevisionList/feature.js +11 -0
  373. package/presentation/page/RevisionList/feature.js.map +1 -0
  374. package/presentation/page/wbReviewPageSelection.d.ts +1 -0
  375. package/presentation/page/wbReviewPageSelection.js +9 -0
  376. package/presentation/page/wbReviewPageSelection.js.map +1 -0
  377. package/publishAutosave.wiring.test.d.ts +1 -0
  378. package/publishAutosave.wiring.test.js +162 -0
  379. package/publishAutosave.wiring.test.js.map +1 -0
  380. package/routes.d.ts +9 -0
  381. package/routes.js +19 -0
  382. package/routes.js.map +1 -0
  383. package/testing/WbEditorHarness.d.ts +11 -0
  384. package/testing/WbEditorHarness.js +22 -0
  385. package/testing/WbEditorHarness.js.map +1 -0
  386. package/testing/createFakeSession.d.ts +9 -0
  387. package/testing/createFakeSession.js +29 -0
  388. package/testing/createFakeSession.js.map +1 -0
  389. package/testing/createFakeVm.d.ts +3 -0
  390. package/testing/createFakeVm.js +51 -0
  391. package/testing/createFakeVm.js.map +1 -0
  392. package/testing/createFolder.d.ts +2 -0
  393. package/testing/createFolder.js +13 -0
  394. package/testing/createFolder.js.map +1 -0
  395. package/testing/createPageEditor.d.ts +4 -0
  396. package/testing/createPageEditor.js +26 -0
  397. package/testing/createPageEditor.js.map +1 -0
  398. package/testing/registerPageContent.d.ts +20 -0
  399. package/testing/registerPageContent.js +28 -0
  400. package/testing/registerPageContent.js.map +1 -0
  401. package/types.d.ts +9 -0
  402. package/types.js +0 -0
package/index.test.js ADDED
@@ -0,0 +1,523 @@
1
+ import react from "react";
2
+ import { describe, expect, it, vi } from "vitest";
3
+ import { render, screen } from "@testing-library/react";
4
+ import { Container } from "@webiny/di";
5
+ import { DiContainerProvider } from "@webiny/app/shared/di/DiContainerProvider.js";
6
+ import { MainGraphQLClient } from "@webiny/app/features/mainGraphQLClient/abstractions.js";
7
+ import { FeatureFlagsService } from "@webiny/app-admin/features/featureFlags/abstractions.js";
8
+ import { FeatureFlags } from "@webiny/feature-flags";
9
+ import { FolderModelProvider } from "@webiny/app-aco/features/folders/abstractions.js";
10
+ import { ListFoldersGateway } from "@webiny/app-aco/features/folders/listFolders/abstractions.js";
11
+ import { WebsocketEventHandler } from "@webiny/app-websockets/events/abstractions.js";
12
+ import { AppReviewRowProvider } from "@webiny/app-workflows/review/mounting/AppReviewRowProvider.js";
13
+ import { ReviewNotificationHandler } from "@webiny/app-workflows/review/mounting/ReviewNotificationHandler.js";
14
+ import { ReviewNotificationService } from "@webiny/app-workflows/review/notifications/abstractions.js";
15
+ import { ReviewActivity } from "@webiny/app-workflows/review/activity/abstractions.js";
16
+ import { ReviewChangeMessageHandler } from "@webiny/app-workflows/review/mounting/ReviewChangeMessageHandler.js";
17
+ import { WbReviewRowProvider } from "./features/gateway/WbReviewRowProvider/abstractions.js";
18
+ import { WbReviewGateway } from "./features/gateway/WbReviewGateway/WbReviewGateway.js";
19
+ import { WbReviewContentAdapter } from "./features/gateway/WbReviewContentAdapter/abstractions.js";
20
+ import { CompositionProvider } from "@webiny/react-composition";
21
+ import { WorkflowsAdminApp } from "@webiny/app-workflows/app.js";
22
+ import { WorkflowEditorAppGateway } from "@webiny/app-workflows/editor/appGateway/abstractions.js";
23
+ import { WorkflowEditorGateway } from "@webiny/app-workflows/editor/gateway/abstractions.js";
24
+ import { WorkflowEditorRepositoryFeature } from "@webiny/app-workflows/editor/repository/feature.js";
25
+ import { GetWorkflowUseCase } from "@webiny/app-workflows/editor/useCases/getWorkflow/abstractions.js";
26
+ import { InspectRoutingUseCase } from "@webiny/app-workflows/editor/useCases/inspectRouting/abstractions.js";
27
+ import { InspectRoutingFeature } from "@webiny/app-workflows/editor/useCases/inspectRouting/feature.js";
28
+ import { createEditorWorkflowDto } from "@webiny/app-workflows/editor/testing/editorFixtures.js";
29
+ import { createFakeEditorAppGateway } from "@webiny/app-workflows/editor/testing/fakeWorkflowEditorAppGateway.js";
30
+ import { CmsWorkflows } from "@webiny/app-headless-cms-workflows";
31
+ import { WbWorkflowEditorAppAdapter } from "./features/editorMounting/abstractions.js";
32
+ import { createFolder } from "./testing/createFolder.js";
33
+ import { ReviewAppGateway } from "@webiny/app-workflows/review/appGateway/abstractions.js";
34
+ import { ReviewGateway } from "@webiny/app-workflows/review/gateway/abstractions.js";
35
+ import { ReviewServicesFeature } from "@webiny/app-workflows/review/feature.js";
36
+ import { createFakeReviewAppGateway } from "@webiny/app-workflows/review/testing/fakeReviewAppGateway.js";
37
+ import { createReviewDto, createReviewWithFlagsDto } from "@webiny/app-workflows/review/testing/reviewFixtures.js";
38
+ import { WebsiteBuilderWorkflows } from "./index.js";
39
+ vi.mock("~/Routes/index.js", ()=>({
40
+ WebsiteBuilderWorkflowsMenu: ()=>null
41
+ }));
42
+ vi.mock("~/Components/index.js", ()=>({
43
+ PageEditorConfig: ()=>null,
44
+ PagesList: ()=>null
45
+ }));
46
+ vi.mock("~/Components/ContentReviews/WbContentReviews.js", ()=>({
47
+ WbContentReviews: ()=>/*#__PURE__*/ react.createElement("div", {
48
+ "data-testid": "wb-content-reviews"
49
+ })
50
+ }));
51
+ vi.mock("~/presentation/page/PageList/feature.js", ()=>({
52
+ PageListWorkflowsFeature: {
53
+ name: "Mock",
54
+ register: ()=>void 0,
55
+ resolve: ()=>void 0
56
+ }
57
+ }));
58
+ vi.mock("~/presentation/page/PageGet/feature.js", ()=>({
59
+ PageGetWorkflowsFeature: {
60
+ name: "Mock",
61
+ register: ()=>void 0,
62
+ resolve: ()=>void 0
63
+ }
64
+ }));
65
+ vi.mock("@webiny/app-workflows/presentation/permissions/index.js", async (importOriginal)=>{
66
+ const actual = await importOriginal();
67
+ return {
68
+ ...actual,
69
+ SecurityPermissions: ()=>null
70
+ };
71
+ });
72
+ vi.mock("@webiny/app-workflows/editor/WorkflowEditorConfig.js", ()=>({
73
+ WorkflowEditorConfig: ()=>null
74
+ }));
75
+ vi.mock("@webiny/app-workflows/settings/mounting/ExclusionsSettings.js", ()=>({
76
+ ExclusionsSettings: ()=>null
77
+ }));
78
+ vi.mock("@webiny/app-workflows/review/trash/components/ActiveReviewWarningConfig.js", ()=>({
79
+ ActiveReviewWarningConfig: ()=>null
80
+ }));
81
+ vi.mock("@webiny/app-headless-cms-workflows/Routes/index.js", ()=>({
82
+ CmsWorkflowEditor: ()=>null
83
+ }));
84
+ vi.mock("@webiny/app-headless-cms-workflows/Components/ContentEntryForm/index.js", ()=>({
85
+ CmsEntryReviewBar: ()=>null,
86
+ CmsEntryReviewBlockedActions: ()=>null,
87
+ CmsEntryReviewFormLock: ()=>null,
88
+ CmsEntryReviewNewRevision: ()=>null,
89
+ CmsEntryReviewScheduleMenuItem: ()=>null
90
+ }));
91
+ vi.mock("@webiny/app-headless-cms-workflows/Components/ContentReviews/CmsContentReviews.js", ()=>({
92
+ CmsContentReviews: ()=>null
93
+ }));
94
+ vi.mock("@webiny/app-headless-cms-workflows/Components/ContentReviews/CmsContentReviewsSidebarItem.js", ()=>({
95
+ CmsContentReviewsSidebarItem: ()=>null
96
+ }));
97
+ vi.mock("@webiny/app-headless-cms-workflows/Components/CmsEntriesList/CmsReviewMoveEntryAction.js", ()=>({
98
+ CmsReviewMoveEntryAction: ()=>null
99
+ }));
100
+ vi.mock("@webiny/app-headless-cms-workflows/presentation/feature.js", ()=>({
101
+ CmsWorkflowsFeature: {
102
+ name: "Mock",
103
+ register: ()=>void 0,
104
+ resolve: ()=>void 0
105
+ }
106
+ }));
107
+ vi.mock("@webiny/app-headless-cms-workflows/features/feature.js", ()=>({
108
+ CmsWorkflowsCacheFeature: {
109
+ name: "Mock",
110
+ register: ()=>void 0,
111
+ resolve: ()=>void 0
112
+ }
113
+ }));
114
+ describe("WebsiteBuilderWorkflows composition", ()=>{
115
+ const createContainer = (isEnabled)=>{
116
+ const flagsService = {
117
+ getFlags: ()=>new FeatureFlags({
118
+ advancedPublishingWorkflow: isEnabled
119
+ }),
120
+ isLoaded: ()=>true,
121
+ loadFlags: async ()=>void 0
122
+ };
123
+ const container = new Container();
124
+ container.registerInstance(FeatureFlagsService, flagsService);
125
+ container.registerInstance(MainGraphQLClient, {
126
+ execute: vi.fn()
127
+ });
128
+ container.registerInstance(ReviewNotificationService, {
129
+ handle: vi.fn()
130
+ });
131
+ container.registerInstance(ReviewActivity, {
132
+ subscribe: vi.fn(),
133
+ notify: vi.fn()
134
+ });
135
+ container.registerInstance(FolderModelProvider, {
136
+ getModel: vi.fn().mockRejectedValue(new Error("The folder model is not needed here.")),
137
+ getGraphQLSelection: vi.fn().mockResolvedValue("{ id title parentId }")
138
+ });
139
+ return container;
140
+ };
141
+ it("sends the routing inspection of the editor through the WB gateway with the flag on", async ()=>{
142
+ const container = createContainer(true);
143
+ WorkflowEditorRepositoryFeature.register(container);
144
+ InspectRoutingFeature.register(container);
145
+ render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
146
+ container: container
147
+ }, /*#__PURE__*/ react.createElement(WebsiteBuilderWorkflows, null)));
148
+ const client = container.resolve(MainGraphQLClient);
149
+ vi.mocked(client.execute).mockResolvedValue({
150
+ websiteBuilder: {
151
+ inspectWebsiteBuilderPageRouting: {
152
+ data: {
153
+ owner: null,
154
+ source: "pool",
155
+ ruleId: null,
156
+ strategy: "none",
157
+ narrowedTeamId: null,
158
+ candidateIds: [],
159
+ candidateCount: 0,
160
+ trace: [],
161
+ skipped: []
162
+ },
163
+ error: null
164
+ }
165
+ }
166
+ });
167
+ const useCase = container.resolve(InspectRoutingUseCase);
168
+ const inspection = await useCase.execute({
169
+ app: "wb",
170
+ stepConfig: {
171
+ teams: [
172
+ "team-1"
173
+ ],
174
+ assignment: {
175
+ strategy: "none",
176
+ rules: []
177
+ }
178
+ },
179
+ requesterId: "user-1",
180
+ folderId: null,
181
+ modelId: null
182
+ });
183
+ const calls = vi.mocked(client.execute).mock.calls;
184
+ const lastRequest = calls[calls.length - 1][0];
185
+ expect(inspection.source).toBe("pool");
186
+ expect(lastRequest.query).toContain("inspectWebsiteBuilderPageRouting");
187
+ });
188
+ it("registers the Content Reviews row provider and the notification handler with the flag on", ()=>{
189
+ const container = createContainer(true);
190
+ render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
191
+ container: container
192
+ }, /*#__PURE__*/ react.createElement(WebsiteBuilderWorkflows, null)));
193
+ expect(container.resolve(WbReviewRowProvider)).toBeInstanceOf(AppReviewRowProvider);
194
+ const handlers = container.resolveAll(WebsocketEventHandler);
195
+ expect(handlers.some((handler)=>handler instanceof ReviewNotificationHandler)).toBe(true);
196
+ });
197
+ it("registers neither the row provider nor the notification handler with the flag off", ()=>{
198
+ const container = createContainer(false);
199
+ render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
200
+ container: container
201
+ }, /*#__PURE__*/ react.createElement(WebsiteBuilderWorkflows, null)));
202
+ expect(()=>container.resolve(WbReviewRowProvider)).toThrow("No registration found");
203
+ const handlers = container.resolveAll(WebsocketEventHandler);
204
+ expect(handlers.some((handler)=>handler instanceof ReviewNotificationHandler)).toBe(false);
205
+ });
206
+ it("registers the change message handler with the flag on", ()=>{
207
+ const container = createContainer(true);
208
+ render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
209
+ container: container
210
+ }, /*#__PURE__*/ react.createElement(WebsiteBuilderWorkflows, null)));
211
+ const handlers = container.resolveAll(WebsocketEventHandler);
212
+ expect(handlers.some((handler)=>handler instanceof ReviewChangeMessageHandler)).toBe(true);
213
+ });
214
+ it("registers no change message handler with the flag off", ()=>{
215
+ const container = createContainer(false);
216
+ render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
217
+ container: container
218
+ }, /*#__PURE__*/ react.createElement(WebsiteBuilderWorkflows, null)));
219
+ const handlers = container.resolveAll(WebsocketEventHandler);
220
+ expect(handlers.some((handler)=>handler instanceof ReviewChangeMessageHandler)).toBe(false);
221
+ });
222
+ it("mounts the Content Reviews route glue with the flag on", ()=>{
223
+ const container = createContainer(true);
224
+ render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
225
+ container: container
226
+ }, /*#__PURE__*/ react.createElement(WebsiteBuilderWorkflows, null)));
227
+ expect(screen.queryByTestId("wb-content-reviews")).not.toBeNull();
228
+ });
229
+ it("mounts no Content Reviews glue with the flag off", ()=>{
230
+ const container = createContainer(false);
231
+ render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
232
+ container: container
233
+ }, /*#__PURE__*/ react.createElement(WebsiteBuilderWorkflows, null)));
234
+ expect(screen.queryByTestId("wb-content-reviews")).toBeNull();
235
+ });
236
+ it("registers the WB editor gateway under the shared token and the WB editor adapter with the flag on (R347)", ()=>{
237
+ const container = createContainer(true);
238
+ render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
239
+ container: container
240
+ }, /*#__PURE__*/ react.createElement(WebsiteBuilderWorkflows, null)));
241
+ const adapter = container.resolve(WbWorkflowEditorAppAdapter);
242
+ const contentAdapter = container.resolve(WbReviewContentAdapter);
243
+ expect(adapter.appKind).toBe("wb");
244
+ expect(adapter.contentAdapter).toBe(contentAdapter);
245
+ const gateways = container.resolveAll(WorkflowEditorAppGateway);
246
+ expect(gateways).toHaveLength(1);
247
+ expect(gateways[0].app).toBe("wb");
248
+ });
249
+ it("lists the folders of a model through the editor adapter with the flag on", async ()=>{
250
+ const container = createContainer(true);
251
+ render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
252
+ container: container
253
+ }, /*#__PURE__*/ react.createElement(WebsiteBuilderWorkflows, null)));
254
+ const client = container.resolve(MainGraphQLClient);
255
+ vi.mocked(client.execute).mockResolvedValue({
256
+ aco: {
257
+ listFolders: {
258
+ data: [
259
+ createFolder("folder-a", "Landing pages", "root")
260
+ ],
261
+ error: null
262
+ }
263
+ }
264
+ });
265
+ const adapter = container.resolve(WbWorkflowEditorAppAdapter);
266
+ const folders = await adapter.listFolders("page");
267
+ expect(adapter.getFolderType("page")).toBe("wb:page");
268
+ expect(folders).toEqual([
269
+ {
270
+ id: "folder-a",
271
+ path: "/Landing pages"
272
+ }
273
+ ]);
274
+ });
275
+ it("registers no folder gateway with the flag off", ()=>{
276
+ const container = createContainer(false);
277
+ render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
278
+ container: container
279
+ }, /*#__PURE__*/ react.createElement(WebsiteBuilderWorkflows, null)));
280
+ expect(()=>container.resolve(ListFoldersGateway)).toThrow("No registration found");
281
+ });
282
+ it("registers neither the WB editor gateway nor the WB editor adapter with the flag off", ()=>{
283
+ const container = createContainer(false);
284
+ render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
285
+ container: container
286
+ }, /*#__PURE__*/ react.createElement(WebsiteBuilderWorkflows, null)));
287
+ expect(()=>container.resolve(WbWorkflowEditorAppAdapter)).toThrow("No registration found");
288
+ expect(container.resolveAll(WorkflowEditorAppGateway)).toEqual([]);
289
+ });
290
+ it("routes the editor by app only after the render: wb to the WB gateway, cms to the other app (R349, R362)", async ()=>{
291
+ const container = createContainer(true);
292
+ WorkflowEditorRepositoryFeature.register(container);
293
+ const cmsGateway = createFakeEditorAppGateway("cms");
294
+ cmsGateway.getWorkflow.mockResolvedValue({
295
+ data: createEditorWorkflowDto({
296
+ id: "workflow-cms"
297
+ }),
298
+ error: null
299
+ });
300
+ const createCmsGateway = vi.fn(()=>cmsGateway);
301
+ container.registerFactory(WorkflowEditorAppGateway, createCmsGateway);
302
+ render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
303
+ container: container
304
+ }, /*#__PURE__*/ react.createElement(WebsiteBuilderWorkflows, null)));
305
+ expect(createCmsGateway).not.toHaveBeenCalled();
306
+ const client = container.resolve(MainGraphQLClient);
307
+ vi.mocked(client.execute).mockClear();
308
+ vi.mocked(client.execute).mockResolvedValue({
309
+ websiteBuilder: {
310
+ getWebsiteBuilderPageWorkflow: {
311
+ data: createEditorWorkflowDto({
312
+ id: "workflow-wb",
313
+ models: [
314
+ "wb.page"
315
+ ]
316
+ }),
317
+ error: null
318
+ }
319
+ }
320
+ });
321
+ const gateway = container.resolve(WorkflowEditorGateway);
322
+ const wb = await gateway.getWorkflow({
323
+ app: "wb",
324
+ id: "workflow-wb"
325
+ });
326
+ const cms = await gateway.getWorkflow({
327
+ app: "cms",
328
+ id: "workflow-cms"
329
+ });
330
+ expect(createCmsGateway).toHaveBeenCalledTimes(1);
331
+ expect(wb.id).toBe("workflow-wb");
332
+ expect(cms.id).toBe("workflow-cms");
333
+ expect(vi.mocked(client.execute)).toHaveBeenCalledTimes(1);
334
+ expect(vi.mocked(client.execute).mock.calls[0][0].query).toContain("getWebsiteBuilderPageWorkflow");
335
+ expect(cmsGateway.getWorkflow).toHaveBeenCalledWith("workflow-cms");
336
+ });
337
+ it("routes no editor operation to the WB with the flag off", async ()=>{
338
+ const container = createContainer(false);
339
+ WorkflowEditorRepositoryFeature.register(container);
340
+ const cmsGateway = createFakeEditorAppGateway("cms");
341
+ container.registerInstance(WorkflowEditorAppGateway, cmsGateway);
342
+ render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
343
+ container: container
344
+ }, /*#__PURE__*/ react.createElement(WebsiteBuilderWorkflows, null)));
345
+ const gateway = container.resolve(WorkflowEditorGateway);
346
+ const client = container.resolve(MainGraphQLClient);
347
+ await expect(gateway.getWorkflow({
348
+ app: "wb",
349
+ id: "workflow-wb"
350
+ })).rejects.toThrow('No workflows app is registered for "wb".');
351
+ expect(vi.mocked(client.execute)).not.toHaveBeenCalled();
352
+ });
353
+ it("routes the editor of each app to its own gateway with the three roots rendered in admin order (R349, A113, R362)", async ()=>{
354
+ const container = createContainer(true);
355
+ render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
356
+ container: container
357
+ }, /*#__PURE__*/ react.createElement(CompositionProvider, null, /*#__PURE__*/ react.createElement(WorkflowsAdminApp, null), /*#__PURE__*/ react.createElement(CmsWorkflows, null), /*#__PURE__*/ react.createElement(WebsiteBuilderWorkflows, null))));
358
+ const client = container.resolve(MainGraphQLClient);
359
+ vi.mocked(client.execute).mockClear();
360
+ vi.mocked(client.execute).mockResolvedValueOnce({
361
+ cms: {
362
+ getCmsEntryWorkflow: {
363
+ data: createEditorWorkflowDto({
364
+ id: "workflow-cms"
365
+ }),
366
+ error: null
367
+ }
368
+ }
369
+ });
370
+ vi.mocked(client.execute).mockResolvedValueOnce({
371
+ websiteBuilder: {
372
+ getWebsiteBuilderPageWorkflow: {
373
+ data: createEditorWorkflowDto({
374
+ id: "workflow-wb",
375
+ models: [
376
+ "wb.page"
377
+ ]
378
+ }),
379
+ error: null
380
+ }
381
+ }
382
+ });
383
+ const getWorkflow = container.resolve(GetWorkflowUseCase);
384
+ const cms = await getWorkflow.execute({
385
+ app: "cms",
386
+ id: "workflow-cms"
387
+ });
388
+ const wb = await getWorkflow.execute({
389
+ app: "wb",
390
+ id: "workflow-wb"
391
+ });
392
+ const calls = vi.mocked(client.execute).mock.calls;
393
+ expect(cms.id).toBe("workflow-cms");
394
+ expect(wb.id).toBe("workflow-wb");
395
+ expect(calls).toHaveLength(2);
396
+ expect(calls[0][0].query).toContain("getCmsEntryWorkflow");
397
+ expect(calls[1][0].query).toContain("getWebsiteBuilderPageWorkflow");
398
+ const apps = container.resolveAll(WorkflowEditorAppGateway).map((gateway)=>gateway.app);
399
+ expect(apps).toEqual([
400
+ "cms",
401
+ "wb"
402
+ ]);
403
+ });
404
+ it("registers WbReviewGateway itself under the shared token only with the flag on (R358)", ()=>{
405
+ const enabled = createContainer(true);
406
+ const disabled = createContainer(false);
407
+ render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
408
+ container: enabled
409
+ }, /*#__PURE__*/ react.createElement(WebsiteBuilderWorkflows, null)));
410
+ render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
411
+ container: disabled
412
+ }, /*#__PURE__*/ react.createElement(WebsiteBuilderWorkflows, null)));
413
+ const registered = enabled.resolveAll(ReviewAppGateway);
414
+ expect(registered.map((appGateway)=>appGateway.app)).toEqual([
415
+ "wb"
416
+ ]);
417
+ expect(Object.getPrototypeOf(registered[0])).toBe(WbReviewGateway.prototype);
418
+ expect(disabled.resolveAll(ReviewAppGateway)).toEqual([]);
419
+ });
420
+ it("routes the page namespace to the WB gateway and CMS namespaces to the other app, built after the render (Review Focus 10, R362)", async ()=>{
421
+ const container = createContainer(true);
422
+ ReviewServicesFeature.register(container);
423
+ const cmsStub = createFakeReviewAppGateway("cms", [
424
+ "cms.article"
425
+ ]);
426
+ const phases = [];
427
+ let phase = "render";
428
+ container.registerFactory(ReviewAppGateway, ()=>{
429
+ phases.push(phase);
430
+ return cmsStub;
431
+ });
432
+ render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
433
+ container: container
434
+ }, /*#__PURE__*/ react.createElement(WebsiteBuilderWorkflows, null)));
435
+ phase = "after";
436
+ const gateway = container.resolve(ReviewGateway);
437
+ const client = container.resolve(MainGraphQLClient);
438
+ const pageReviewDto = createReviewDto({
439
+ id: "review-2"
440
+ });
441
+ const pageReview = createReviewWithFlagsDto({
442
+ review: pageReviewDto
443
+ });
444
+ vi.mocked(client.execute).mockResolvedValue({
445
+ websiteBuilder: {
446
+ getWebsiteBuilderPageReview: {
447
+ data: pageReview,
448
+ error: null
449
+ }
450
+ }
451
+ });
452
+ cmsStub.getReview.mockResolvedValue({
453
+ data: createReviewWithFlagsDto(),
454
+ error: null
455
+ });
456
+ const wbReview = await gateway.getReview({
457
+ namespace: "wb.page",
458
+ reviewId: "review-2"
459
+ });
460
+ const cmsReview = await gateway.getReview({
461
+ namespace: "cms.article",
462
+ reviewId: "review-1"
463
+ });
464
+ expect(phases).toEqual([
465
+ "after"
466
+ ]);
467
+ expect(gateway.getApp("wb.page")).toBe("wb");
468
+ expect(gateway.getApp("cms.article")).toBe("cms");
469
+ expect(wbReview.review.id).toBe("review-2");
470
+ expect(cmsReview.review.id).toBe("review-1");
471
+ const queries = vi.mocked(client.execute).mock.calls.map((call)=>call[0].query);
472
+ expect(queries.filter((query)=>query.includes("getWebsiteBuilderPageReview("))).toHaveLength(1);
473
+ expect(cmsStub.getReview).toHaveBeenCalledWith("review-1");
474
+ });
475
+ it("routes cms.article to CMS and wb.page to WB when the three roots render in the admin's order (Review Focus 10, R349, R362)", async ()=>{
476
+ const container = createContainer(true);
477
+ render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
478
+ container: container
479
+ }, /*#__PURE__*/ react.createElement(CompositionProvider, null, /*#__PURE__*/ react.createElement(WorkflowsAdminApp, null), /*#__PURE__*/ react.createElement(CmsWorkflows, null), /*#__PURE__*/ react.createElement(WebsiteBuilderWorkflows, null))));
480
+ const gateway = container.resolve(ReviewGateway);
481
+ const client = container.resolve(MainGraphQLClient);
482
+ vi.mocked(client.execute).mockImplementation(async (request)=>{
483
+ const query = request.query;
484
+ if (query.includes("getCmsEntryReview")) return {
485
+ cms: {
486
+ getCmsEntryReview: {
487
+ data: createReviewWithFlagsDto(),
488
+ error: null
489
+ }
490
+ }
491
+ };
492
+ const pageReviewDto = createReviewDto({
493
+ id: "review-2"
494
+ });
495
+ const pageReview = createReviewWithFlagsDto({
496
+ review: pageReviewDto
497
+ });
498
+ return {
499
+ websiteBuilder: {
500
+ getWebsiteBuilderPageReview: {
501
+ data: pageReview,
502
+ error: null
503
+ }
504
+ }
505
+ };
506
+ });
507
+ await gateway.getReview({
508
+ namespace: "cms.article",
509
+ reviewId: "review-1"
510
+ });
511
+ await gateway.getReview({
512
+ namespace: "wb.page",
513
+ reviewId: "review-2"
514
+ });
515
+ expect(gateway.getApp("cms.article")).toBe("cms");
516
+ expect(gateway.getApp("wb.page")).toBe("wb");
517
+ const queries = vi.mocked(client.execute).mock.calls.map((call)=>call[0].query);
518
+ expect(queries.filter((query)=>query.includes("getCmsEntryReview("))).toHaveLength(1);
519
+ expect(queries.filter((query)=>query.includes("getWebsiteBuilderPageReview("))).toHaveLength(1);
520
+ });
521
+ });
522
+
523
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sources":["../src/index.test.tsx"],"sourcesContent":["import React from \"react\";\nimport { describe } from \"vitest\";\nimport { expect } from \"vitest\";\nimport { it } from \"vitest\";\nimport { vi } from \"vitest\";\nimport { render } from \"@testing-library/react\";\nimport { screen } from \"@testing-library/react\";\nimport { Container } from \"@webiny/di\";\nimport { DiContainerProvider } from \"@webiny/app/shared/di/DiContainerProvider.js\";\nimport { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient/abstractions.js\";\nimport { FeatureFlagsService } from \"@webiny/app-admin/features/featureFlags/abstractions.js\";\nimport { FeatureFlags } from \"@webiny/feature-flags\";\nimport { FolderModelProvider } from \"@webiny/app-aco/features/folders/abstractions.js\";\nimport { ListFoldersGateway } from \"@webiny/app-aco/features/folders/listFolders/abstractions.js\";\nimport { WebsocketEventHandler } from \"@webiny/app-websockets/events/abstractions.js\";\nimport { AppReviewRowProvider } from \"@webiny/app-workflows/review/mounting/AppReviewRowProvider.js\";\nimport { ReviewNotificationHandler } from \"@webiny/app-workflows/review/mounting/ReviewNotificationHandler.js\";\nimport { ReviewNotificationService } from \"@webiny/app-workflows/review/notifications/abstractions.js\";\nimport { ReviewActivity } from \"@webiny/app-workflows/review/activity/abstractions.js\";\nimport { ReviewChangeMessageHandler } from \"@webiny/app-workflows/review/mounting/ReviewChangeMessageHandler.js\";\nimport { WbReviewRowProvider } from \"~/features/gateway/WbReviewRowProvider/abstractions.js\";\nimport { WbReviewGateway } from \"~/features/gateway/WbReviewGateway/WbReviewGateway.js\";\nimport { WbReviewContentAdapter } from \"~/features/gateway/WbReviewContentAdapter/abstractions.js\";\nimport { CompositionProvider } from \"@webiny/react-composition\";\nimport { WorkflowsAdminApp } from \"@webiny/app-workflows/app.js\";\nimport { WorkflowEditorAppGateway } from \"@webiny/app-workflows/editor/appGateway/abstractions.js\";\nimport { WorkflowEditorGateway } from \"@webiny/app-workflows/editor/gateway/abstractions.js\";\nimport { WorkflowEditorRepositoryFeature } from \"@webiny/app-workflows/editor/repository/feature.js\";\nimport { GetWorkflowUseCase } from \"@webiny/app-workflows/editor/useCases/getWorkflow/abstractions.js\";\nimport { InspectRoutingUseCase } from \"@webiny/app-workflows/editor/useCases/inspectRouting/abstractions.js\";\nimport { InspectRoutingFeature } from \"@webiny/app-workflows/editor/useCases/inspectRouting/feature.js\";\nimport { createEditorWorkflowDto } from \"@webiny/app-workflows/editor/testing/editorFixtures.js\";\nimport { createFakeEditorAppGateway } from \"@webiny/app-workflows/editor/testing/fakeWorkflowEditorAppGateway.js\";\nimport { CmsWorkflows } from \"@webiny/app-headless-cms-workflows\";\nimport { WbWorkflowEditorAppAdapter } from \"~/features/editorMounting/abstractions.js\";\nimport { createFolder } from \"~/testing/createFolder.js\";\nimport { ReviewAppGateway } from \"@webiny/app-workflows/review/appGateway/abstractions.js\";\nimport { ReviewGateway as ReviewGatewayAbstraction } from \"@webiny/app-workflows/review/gateway/abstractions.js\";\nimport { ReviewServicesFeature } from \"@webiny/app-workflows/review/feature.js\";\nimport { createFakeReviewAppGateway } from \"@webiny/app-workflows/review/testing/fakeReviewAppGateway.js\";\nimport { createReviewDto } from \"@webiny/app-workflows/review/testing/reviewFixtures.js\";\nimport { createReviewWithFlagsDto } from \"@webiny/app-workflows/review/testing/reviewFixtures.js\";\nimport { WebsiteBuilderWorkflows } from \"./index.js\";\n\nvi.mock(\"~/Routes/index.js\", () => {\n return { WebsiteBuilderWorkflowsMenu: () => null };\n});\n\nvi.mock(\"~/Components/index.js\", () => {\n return {\n PageEditorConfig: () => null,\n PagesList: () => null\n };\n});\n\nvi.mock(\"~/Components/ContentReviews/WbContentReviews.js\", () => {\n return { WbContentReviews: () => <div data-testid=\"wb-content-reviews\" /> };\n});\n\nvi.mock(\"~/presentation/page/PageList/feature.js\", () => {\n return {\n PageListWorkflowsFeature: {\n name: \"Mock\",\n register: () => undefined,\n resolve: () => undefined\n }\n };\n});\n\nvi.mock(\"~/presentation/page/PageGet/feature.js\", () => {\n return {\n PageGetWorkflowsFeature: {\n name: \"Mock\",\n register: () => undefined,\n resolve: () => undefined\n }\n };\n});\n\nvi.mock(\"@webiny/app-workflows/presentation/permissions/index.js\", async importOriginal => {\n const actual =\n await importOriginal<\n typeof import(\"@webiny/app-workflows/presentation/permissions/index.js\")\n >();\n return { ...actual, SecurityPermissions: () => null };\n});\n\nvi.mock(\"@webiny/app-workflows/editor/WorkflowEditorConfig.js\", () => {\n return { WorkflowEditorConfig: () => null };\n});\n\nvi.mock(\"@webiny/app-workflows/settings/mounting/ExclusionsSettings.js\", () => {\n return { ExclusionsSettings: () => null };\n});\n\nvi.mock(\"@webiny/app-workflows/review/trash/components/ActiveReviewWarningConfig.js\", () => {\n return { ActiveReviewWarningConfig: () => null };\n});\n\nvi.mock(\"@webiny/app-headless-cms-workflows/Routes/index.js\", () => {\n return { CmsWorkflowEditor: () => null };\n});\n\nvi.mock(\"@webiny/app-headless-cms-workflows/Components/ContentEntryForm/index.js\", () => {\n return {\n CmsEntryReviewBar: () => null,\n CmsEntryReviewBlockedActions: () => null,\n CmsEntryReviewFormLock: () => null,\n CmsEntryReviewNewRevision: () => null,\n CmsEntryReviewScheduleMenuItem: () => null\n };\n});\n\nvi.mock(\"@webiny/app-headless-cms-workflows/Components/ContentReviews/CmsContentReviews.js\", () => {\n return { CmsContentReviews: () => null };\n});\n\nvi.mock(\n \"@webiny/app-headless-cms-workflows/Components/ContentReviews/CmsContentReviewsSidebarItem.js\",\n () => {\n return { CmsContentReviewsSidebarItem: () => null };\n }\n);\n\nvi.mock(\n \"@webiny/app-headless-cms-workflows/Components/CmsEntriesList/CmsReviewMoveEntryAction.js\",\n () => {\n return { CmsReviewMoveEntryAction: () => null };\n }\n);\n\nvi.mock(\"@webiny/app-headless-cms-workflows/presentation/feature.js\", () => {\n return {\n CmsWorkflowsFeature: { name: \"Mock\", register: () => undefined, resolve: () => undefined }\n };\n});\n\nvi.mock(\"@webiny/app-headless-cms-workflows/features/feature.js\", () => {\n return {\n CmsWorkflowsCacheFeature: {\n name: \"Mock\",\n register: () => undefined,\n resolve: () => undefined\n }\n };\n});\n\ndescribe(\"WebsiteBuilderWorkflows composition\", () => {\n const createContainer = (isEnabled: boolean): Container => {\n const flagsService: FeatureFlagsService.Interface = {\n getFlags: () => new FeatureFlags({ advancedPublishingWorkflow: isEnabled }),\n isLoaded: () => true,\n loadFlags: async () => undefined\n };\n const container = new Container();\n container.registerInstance(FeatureFlagsService, flagsService);\n container.registerInstance(MainGraphQLClient, { execute: vi.fn() });\n container.registerInstance(ReviewNotificationService, { handle: vi.fn() });\n container.registerInstance(ReviewActivity, { subscribe: vi.fn(), notify: vi.fn() });\n // app-aco's module registers the folder model provider in the real admin.\n container.registerInstance(FolderModelProvider, {\n getModel: vi.fn().mockRejectedValue(new Error(\"The folder model is not needed here.\")),\n getGraphQLSelection: vi.fn().mockResolvedValue(\"{ id title parentId }\")\n });\n return container;\n };\n\n it(\"sends the routing inspection of the editor through the WB gateway with the flag on\", async () => {\n const container = createContainer(true);\n // The data layer of app-workflows, which WorkflowsAdminApp registers in the admin.\n WorkflowEditorRepositoryFeature.register(container);\n InspectRoutingFeature.register(container);\n\n render(\n <DiContainerProvider container={container}>\n <WebsiteBuilderWorkflows />\n </DiContainerProvider>\n );\n const client = container.resolve(MainGraphQLClient);\n vi.mocked(client.execute).mockResolvedValue({\n websiteBuilder: {\n inspectWebsiteBuilderPageRouting: {\n data: {\n owner: null,\n source: \"pool\",\n ruleId: null,\n strategy: \"none\",\n narrowedTeamId: null,\n candidateIds: [],\n candidateCount: 0,\n trace: [],\n skipped: []\n },\n error: null\n }\n }\n });\n\n const useCase = container.resolve(InspectRoutingUseCase);\n const inspection = await useCase.execute({\n app: \"wb\",\n stepConfig: { teams: [\"team-1\"], assignment: { strategy: \"none\", rules: [] } },\n requesterId: \"user-1\",\n folderId: null,\n modelId: null\n });\n\n const calls = vi.mocked(client.execute).mock.calls;\n const lastRequest = calls[calls.length - 1][0];\n expect(inspection.source).toBe(\"pool\");\n expect(lastRequest.query).toContain(\"inspectWebsiteBuilderPageRouting\");\n });\n\n it(\"registers the Content Reviews row provider and the notification handler with the flag on\", () => {\n const container = createContainer(true);\n\n render(\n <DiContainerProvider container={container}>\n <WebsiteBuilderWorkflows />\n </DiContainerProvider>\n );\n\n expect(container.resolve(WbReviewRowProvider)).toBeInstanceOf(AppReviewRowProvider);\n const handlers = container.resolveAll(WebsocketEventHandler);\n expect(handlers.some(handler => handler instanceof ReviewNotificationHandler)).toBe(true);\n });\n\n it(\"registers neither the row provider nor the notification handler with the flag off\", () => {\n const container = createContainer(false);\n\n render(\n <DiContainerProvider container={container}>\n <WebsiteBuilderWorkflows />\n </DiContainerProvider>\n );\n\n expect(() => container.resolve(WbReviewRowProvider)).toThrow(\"No registration found\");\n const handlers = container.resolveAll(WebsocketEventHandler);\n expect(handlers.some(handler => handler instanceof ReviewNotificationHandler)).toBe(false);\n });\n\n it(\"registers the change message handler with the flag on\", () => {\n const container = createContainer(true);\n\n render(\n <DiContainerProvider container={container}>\n <WebsiteBuilderWorkflows />\n </DiContainerProvider>\n );\n\n const handlers = container.resolveAll(WebsocketEventHandler);\n expect(handlers.some(handler => handler instanceof ReviewChangeMessageHandler)).toBe(true);\n });\n\n it(\"registers no change message handler with the flag off\", () => {\n const container = createContainer(false);\n\n render(\n <DiContainerProvider container={container}>\n <WebsiteBuilderWorkflows />\n </DiContainerProvider>\n );\n\n const handlers = container.resolveAll(WebsocketEventHandler);\n expect(handlers.some(handler => handler instanceof ReviewChangeMessageHandler)).toBe(false);\n });\n\n it(\"mounts the Content Reviews route glue with the flag on\", () => {\n const container = createContainer(true);\n\n render(\n <DiContainerProvider container={container}>\n <WebsiteBuilderWorkflows />\n </DiContainerProvider>\n );\n\n expect(screen.queryByTestId(\"wb-content-reviews\")).not.toBeNull();\n });\n\n it(\"mounts no Content Reviews glue with the flag off\", () => {\n const container = createContainer(false);\n\n render(\n <DiContainerProvider container={container}>\n <WebsiteBuilderWorkflows />\n </DiContainerProvider>\n );\n\n expect(screen.queryByTestId(\"wb-content-reviews\")).toBeNull();\n });\n\n it(\"registers the WB editor gateway under the shared token and the WB editor adapter with the flag on (R347)\", () => {\n const container = createContainer(true);\n\n render(\n <DiContainerProvider container={container}>\n <WebsiteBuilderWorkflows />\n </DiContainerProvider>\n );\n\n const adapter = container.resolve(WbWorkflowEditorAppAdapter);\n const contentAdapter = container.resolve(WbReviewContentAdapter);\n\n expect(adapter.appKind).toBe(\"wb\");\n expect(adapter.contentAdapter).toBe(contentAdapter);\n // The WB editor gateway is registered under the shared app gateway token (R347).\n const gateways = container.resolveAll(WorkflowEditorAppGateway);\n expect(gateways).toHaveLength(1);\n expect(gateways[0].app).toBe(\"wb\");\n });\n\n it(\"lists the folders of a model through the editor adapter with the flag on\", async () => {\n const container = createContainer(true);\n\n render(\n <DiContainerProvider container={container}>\n <WebsiteBuilderWorkflows />\n </DiContainerProvider>\n );\n const client = container.resolve(MainGraphQLClient);\n vi.mocked(client.execute).mockResolvedValue({\n aco: {\n listFolders: {\n data: [createFolder(\"folder-a\", \"Landing pages\", \"root\")],\n error: null\n }\n }\n });\n\n const adapter = container.resolve(WbWorkflowEditorAppAdapter);\n const folders = await adapter.listFolders(\"page\");\n\n expect(adapter.getFolderType(\"page\")).toBe(\"wb:page\");\n expect(folders).toEqual([{ id: \"folder-a\", path: \"/Landing pages\" }]);\n });\n\n it(\"registers no folder gateway with the flag off\", () => {\n const container = createContainer(false);\n\n render(\n <DiContainerProvider container={container}>\n <WebsiteBuilderWorkflows />\n </DiContainerProvider>\n );\n\n expect(() => container.resolve(ListFoldersGateway)).toThrow(\"No registration found\");\n });\n\n it(\"registers neither the WB editor gateway nor the WB editor adapter with the flag off\", () => {\n const container = createContainer(false);\n\n render(\n <DiContainerProvider container={container}>\n <WebsiteBuilderWorkflows />\n </DiContainerProvider>\n );\n\n expect(() => container.resolve(WbWorkflowEditorAppAdapter)).toThrow(\n \"No registration found\"\n );\n expect(container.resolveAll(WorkflowEditorAppGateway)).toEqual([]);\n });\n\n it(\"routes the editor by app only after the render: wb to the WB gateway, cms to the other app (R349, R362)\", async () => {\n const container = createContainer(true);\n WorkflowEditorRepositoryFeature.register(container);\n const cmsGateway = createFakeEditorAppGateway(\"cms\");\n cmsGateway.getWorkflow.mockResolvedValue({\n data: createEditorWorkflowDto({ id: \"workflow-cms\" }),\n error: null\n });\n // A factory runs each time a routing gateway collects the app gateways, so it counts the builds.\n const createCmsGateway = vi.fn(() => cmsGateway);\n container.registerFactory(WorkflowEditorAppGateway, createCmsGateway);\n\n render(\n <DiContainerProvider container={container}>\n <WebsiteBuilderWorkflows />\n </DiContainerProvider>\n );\n\n expect(createCmsGateway).not.toHaveBeenCalled();\n const client = container.resolve(MainGraphQLClient);\n vi.mocked(client.execute).mockClear();\n vi.mocked(client.execute).mockResolvedValue({\n websiteBuilder: {\n getWebsiteBuilderPageWorkflow: {\n data: createEditorWorkflowDto({ id: \"workflow-wb\", models: [\"wb.page\"] }),\n error: null\n }\n }\n });\n\n const gateway = container.resolve(WorkflowEditorGateway);\n const wb = await gateway.getWorkflow({ app: \"wb\", id: \"workflow-wb\" });\n const cms = await gateway.getWorkflow({ app: \"cms\", id: \"workflow-cms\" });\n\n expect(createCmsGateway).toHaveBeenCalledTimes(1);\n expect(wb.id).toBe(\"workflow-wb\");\n expect(cms.id).toBe(\"workflow-cms\");\n expect(vi.mocked(client.execute)).toHaveBeenCalledTimes(1);\n expect(vi.mocked(client.execute).mock.calls[0][0].query).toContain(\n \"getWebsiteBuilderPageWorkflow\"\n );\n expect(cmsGateway.getWorkflow).toHaveBeenCalledWith(\"workflow-cms\");\n });\n\n it(\"routes no editor operation to the WB with the flag off\", async () => {\n const container = createContainer(false);\n WorkflowEditorRepositoryFeature.register(container);\n const cmsGateway = createFakeEditorAppGateway(\"cms\");\n container.registerInstance(WorkflowEditorAppGateway, cmsGateway);\n\n render(\n <DiContainerProvider container={container}>\n <WebsiteBuilderWorkflows />\n </DiContainerProvider>\n );\n const gateway = container.resolve(WorkflowEditorGateway);\n const client = container.resolve(MainGraphQLClient);\n\n await expect(gateway.getWorkflow({ app: \"wb\", id: \"workflow-wb\" })).rejects.toThrow(\n 'No workflows app is registered for \"wb\".'\n );\n expect(vi.mocked(client.execute)).not.toHaveBeenCalled();\n });\n\n it(\"routes the editor of each app to its own gateway with the three roots rendered in admin order (R349, A113, R362)\", async () => {\n const container = createContainer(true);\n\n render(\n <DiContainerProvider container={container}>\n <CompositionProvider>\n <WorkflowsAdminApp />\n <CmsWorkflows />\n <WebsiteBuilderWorkflows />\n </CompositionProvider>\n </DiContainerProvider>\n );\n const client = container.resolve(MainGraphQLClient);\n vi.mocked(client.execute).mockClear();\n vi.mocked(client.execute).mockResolvedValueOnce({\n cms: {\n getCmsEntryWorkflow: {\n data: createEditorWorkflowDto({ id: \"workflow-cms\" }),\n error: null\n }\n }\n });\n vi.mocked(client.execute).mockResolvedValueOnce({\n websiteBuilder: {\n getWebsiteBuilderPageWorkflow: {\n data: createEditorWorkflowDto({ id: \"workflow-wb\", models: [\"wb.page\"] }),\n error: null\n }\n }\n });\n\n const getWorkflow = container.resolve(GetWorkflowUseCase);\n const cms = await getWorkflow.execute({ app: \"cms\", id: \"workflow-cms\" });\n const wb = await getWorkflow.execute({ app: \"wb\", id: \"workflow-wb\" });\n\n const calls = vi.mocked(client.execute).mock.calls;\n expect(cms.id).toBe(\"workflow-cms\");\n expect(wb.id).toBe(\"workflow-wb\");\n expect(calls).toHaveLength(2);\n expect(calls[0][0].query).toContain(\"getCmsEntryWorkflow\");\n expect(calls[1][0].query).toContain(\"getWebsiteBuilderPageWorkflow\");\n const apps = container.resolveAll(WorkflowEditorAppGateway).map(gateway => gateway.app);\n expect(apps).toEqual([\"cms\", \"wb\"]);\n });\n it(\"registers WbReviewGateway itself under the shared token only with the flag on (R358)\", () => {\n const enabled = createContainer(true);\n const disabled = createContainer(false);\n\n render(\n <DiContainerProvider container={enabled}>\n <WebsiteBuilderWorkflows />\n </DiContainerProvider>\n );\n render(\n <DiContainerProvider container={disabled}>\n <WebsiteBuilderWorkflows />\n </DiContainerProvider>\n );\n\n const registered = enabled.resolveAll(ReviewAppGateway);\n expect(registered.map(appGateway => appGateway.app)).toEqual([\"wb\"]);\n expect(Object.getPrototypeOf(registered[0])).toBe(WbReviewGateway.prototype);\n expect(disabled.resolveAll(ReviewAppGateway)).toEqual([]);\n });\n\n it(\"routes the page namespace to the WB gateway and CMS namespaces to the other app, built after the render (Review Focus 10, R362)\", async () => {\n const container = createContainer(true);\n // The review data features of app-workflows, as WorkflowsAdminApp registers them.\n ReviewServicesFeature.register(container);\n const cmsStub = createFakeReviewAppGateway(\"cms\", [\"cms.article\"]);\n const phases: string[] = [];\n let phase = \"render\";\n container.registerFactory(ReviewAppGateway, () => {\n phases.push(phase);\n return cmsStub;\n });\n\n render(\n <DiContainerProvider container={container}>\n <WebsiteBuilderWorkflows />\n </DiContainerProvider>\n );\n phase = \"after\";\n\n const gateway = container.resolve(ReviewGatewayAbstraction);\n const client = container.resolve(MainGraphQLClient);\n const pageReviewDto = createReviewDto({ id: \"review-2\" });\n const pageReview = createReviewWithFlagsDto({ review: pageReviewDto });\n vi.mocked(client.execute).mockResolvedValue({\n websiteBuilder: { getWebsiteBuilderPageReview: { data: pageReview, error: null } }\n });\n cmsStub.getReview.mockResolvedValue({ data: createReviewWithFlagsDto(), error: null });\n\n const wbReview = await gateway.getReview({ namespace: \"wb.page\", reviewId: \"review-2\" });\n const cmsReview = await gateway.getReview({\n namespace: \"cms.article\",\n reviewId: \"review-1\"\n });\n\n expect(phases).toEqual([\"after\"]);\n expect(gateway.getApp(\"wb.page\")).toBe(\"wb\");\n expect(gateway.getApp(\"cms.article\")).toBe(\"cms\");\n expect(wbReview.review.id).toBe(\"review-2\");\n expect(cmsReview.review.id).toBe(\"review-1\");\n const queries = vi.mocked(client.execute).mock.calls.map(call => call[0].query as string);\n expect(\n queries.filter(query => query.includes(\"getWebsiteBuilderPageReview(\"))\n ).toHaveLength(1);\n expect(cmsStub.getReview).toHaveBeenCalledWith(\"review-1\");\n });\n\n it(\"routes cms.article to CMS and wb.page to WB when the three roots render in the admin's order (Review Focus 10, R349, R362)\", async () => {\n const container = createContainer(true);\n\n render(\n <DiContainerProvider container={container}>\n <CompositionProvider>\n <WorkflowsAdminApp />\n <CmsWorkflows />\n <WebsiteBuilderWorkflows />\n </CompositionProvider>\n </DiContainerProvider>\n );\n\n const gateway = container.resolve(ReviewGatewayAbstraction);\n const client = container.resolve(MainGraphQLClient);\n vi.mocked(client.execute).mockImplementation(async (request: MainGraphQLClient.Request) => {\n const query = request.query as string;\n if (query.includes(\"getCmsEntryReview\")) {\n return {\n cms: { getCmsEntryReview: { data: createReviewWithFlagsDto(), error: null } }\n };\n }\n const pageReviewDto = createReviewDto({ id: \"review-2\" });\n const pageReview = createReviewWithFlagsDto({ review: pageReviewDto });\n return {\n websiteBuilder: { getWebsiteBuilderPageReview: { data: pageReview, error: null } }\n };\n });\n\n await gateway.getReview({ namespace: \"cms.article\", reviewId: \"review-1\" });\n await gateway.getReview({ namespace: \"wb.page\", reviewId: \"review-2\" });\n\n expect(gateway.getApp(\"cms.article\")).toBe(\"cms\");\n expect(gateway.getApp(\"wb.page\")).toBe(\"wb\");\n const queries = vi.mocked(client.execute).mock.calls.map(call => call[0].query as string);\n expect(queries.filter(query => query.includes(\"getCmsEntryReview(\"))).toHaveLength(1);\n expect(\n queries.filter(query => query.includes(\"getWebsiteBuilderPageReview(\"))\n ).toHaveLength(1);\n });\n});\n"],"names":["vi","undefined","importOriginal","actual","describe","createContainer","isEnabled","flagsService","FeatureFlags","container","Container","FeatureFlagsService","MainGraphQLClient","ReviewNotificationService","ReviewActivity","FolderModelProvider","Error","it","WorkflowEditorRepositoryFeature","InspectRoutingFeature","render","DiContainerProvider","WebsiteBuilderWorkflows","client","useCase","InspectRoutingUseCase","inspection","calls","lastRequest","expect","WbReviewRowProvider","AppReviewRowProvider","handlers","WebsocketEventHandler","handler","ReviewNotificationHandler","ReviewChangeMessageHandler","screen","adapter","WbWorkflowEditorAppAdapter","contentAdapter","WbReviewContentAdapter","gateways","WorkflowEditorAppGateway","createFolder","folders","ListFoldersGateway","cmsGateway","createFakeEditorAppGateway","createEditorWorkflowDto","createCmsGateway","gateway","WorkflowEditorGateway","wb","cms","CompositionProvider","WorkflowsAdminApp","CmsWorkflows","getWorkflow","GetWorkflowUseCase","apps","enabled","disabled","registered","ReviewAppGateway","appGateway","Object","WbReviewGateway","ReviewServicesFeature","cmsStub","createFakeReviewAppGateway","phases","phase","ReviewGatewayAbstraction","pageReviewDto","createReviewDto","pageReview","createReviewWithFlagsDto","wbReview","cmsReview","queries","call","query","request"],"mappings":"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"}