@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.
- package/Components/ContentReviews/WbContentReviews.d.ts +2 -0
- package/Components/ContentReviews/WbContentReviews.js +41 -0
- package/Components/ContentReviews/WbContentReviews.js.map +1 -0
- package/Components/ContentReviews/WbContentReviews.smoke.test.d.ts +1 -0
- package/Components/ContentReviews/WbContentReviews.smoke.test.js +59 -0
- package/Components/ContentReviews/WbContentReviews.smoke.test.js.map +1 -0
- package/Components/ContentReviews/WbContentReviews.test.d.ts +1 -0
- package/Components/ContentReviews/WbContentReviews.test.js +80 -0
- package/Components/ContentReviews/WbContentReviews.test.js.map +1 -0
- package/Components/ContentReviews/WbContentReviewsSidebarItem.d.ts +2 -0
- package/Components/ContentReviews/WbContentReviewsSidebarItem.js +18 -0
- package/Components/ContentReviews/WbContentReviewsSidebarItem.js.map +1 -0
- package/Components/ContentReviews/WbContentReviewsSidebarItem.test.d.ts +1 -0
- package/Components/ContentReviews/WbContentReviewsSidebarItem.test.js +67 -0
- package/Components/ContentReviews/WbContentReviewsSidebarItem.test.js.map +1 -0
- package/Components/PageEditor/DisabledPublishButton.d.ts +6 -0
- package/Components/PageEditor/DisabledPublishButton.js +17 -0
- package/Components/PageEditor/DisabledPublishButton.js.map +1 -0
- package/Components/PageEditor/DisabledPublishButton.test.d.ts +1 -0
- package/Components/PageEditor/DisabledPublishButton.test.js +67 -0
- package/Components/PageEditor/DisabledPublishButton.test.js.map +1 -0
- package/Components/PageEditor/PageBasePublishDecorator.d.ts +2 -0
- package/Components/PageEditor/PageBasePublishDecorator.js +23 -0
- package/Components/PageEditor/PageBasePublishDecorator.js.map +1 -0
- package/Components/PageEditor/PageEditorAutoSave.d.ts +2 -0
- package/Components/PageEditor/PageEditorAutoSave.js +23 -0
- package/Components/PageEditor/PageEditorAutoSave.js.map +1 -0
- package/Components/PageEditor/PageEditorAutoSave.test.d.ts +1 -0
- package/Components/PageEditor/PageEditorAutoSave.test.js +111 -0
- package/Components/PageEditor/PageEditorAutoSave.test.js.map +1 -0
- package/Components/PageEditor/PageEditorConfig.d.ts +2 -0
- package/Components/PageEditor/PageEditorConfig.js +13 -0
- package/Components/PageEditor/PageEditorConfig.js.map +1 -0
- package/Components/PageEditor/PageEditorLayout.d.ts +2 -0
- package/Components/PageEditor/PageEditorLayout.js +10 -0
- package/Components/PageEditor/PageEditorLayout.js.map +1 -0
- package/Components/PageEditor/PageEditorLayout.test.d.ts +1 -0
- package/Components/PageEditor/PageEditorLayout.test.js +121 -0
- package/Components/PageEditor/PageEditorLayout.test.js.map +1 -0
- package/Components/PageEditor/PageEditorTopBar.d.ts +2 -0
- package/Components/PageEditor/PageEditorTopBar.js +10 -0
- package/Components/PageEditor/PageEditorTopBar.js.map +1 -0
- package/Components/PageEditor/PageEditorTopBar.test.d.ts +1 -0
- package/Components/PageEditor/PageEditorTopBar.test.js +175 -0
- package/Components/PageEditor/PageEditorTopBar.test.js.map +1 -0
- package/Components/PageEditor/PageNewRevisionDecorator.d.ts +2 -0
- package/Components/PageEditor/PageNewRevisionDecorator.js +24 -0
- package/Components/PageEditor/PageNewRevisionDecorator.js.map +1 -0
- package/Components/PageEditor/PageNewRevisionDecorator.test.d.ts +1 -0
- package/Components/PageEditor/PageNewRevisionDecorator.test.js +107 -0
- package/Components/PageEditor/PageNewRevisionDecorator.test.js.map +1 -0
- package/Components/PageEditor/PageReadOnlySync.d.ts +3 -0
- package/Components/PageEditor/PageReadOnlySync.js +23 -0
- package/Components/PageEditor/PageReadOnlySync.js.map +1 -0
- package/Components/PageEditor/PageReviewBar.d.ts +4 -0
- package/Components/PageEditor/PageReviewBar.js +93 -0
- package/Components/PageEditor/PageReviewBar.js.map +1 -0
- package/Components/PageEditor/PageReviewBar.test.d.ts +1 -0
- package/Components/PageEditor/PageReviewBar.test.js +135 -0
- package/Components/PageEditor/PageReviewBar.test.js.map +1 -0
- package/Components/PageEditor/PageReviewPublishAction.d.ts +2 -0
- package/Components/PageEditor/PageReviewPublishAction.js +15 -0
- package/Components/PageEditor/PageReviewPublishAction.js.map +1 -0
- package/Components/PageEditor/PageReviewPublishButton.d.ts +4 -0
- package/Components/PageEditor/PageReviewPublishButton.js +23 -0
- package/Components/PageEditor/PageReviewPublishButton.js.map +1 -0
- package/Components/PageEditor/PageScheduleDecorator.d.ts +2 -0
- package/Components/PageEditor/PageScheduleDecorator.js +23 -0
- package/Components/PageEditor/PageScheduleDecorator.js.map +1 -0
- package/Components/PageEditor/PageScheduleDecorator.test.d.ts +1 -0
- package/Components/PageEditor/PageScheduleDecorator.test.js +75 -0
- package/Components/PageEditor/PageScheduleDecorator.test.js.map +1 -0
- package/Components/PageEditor/getPageReadOnlyReason.d.ts +4 -0
- package/Components/PageEditor/getPageReadOnlyReason.js +20 -0
- package/Components/PageEditor/getPageReadOnlyReason.js.map +1 -0
- package/Components/PageEditor/getPageReadOnlyReason.test.d.ts +1 -0
- package/Components/PageEditor/getPageReadOnlyReason.test.js +122 -0
- package/Components/PageEditor/getPageReadOnlyReason.test.js.map +1 -0
- package/Components/PageEditor/getPageReviewContext.d.ts +9 -0
- package/Components/PageEditor/getPageReviewContext.js +13 -0
- package/Components/PageEditor/getPageReviewContext.js.map +1 -0
- package/Components/PageEditor/getPageReviewContext.test.d.ts +1 -0
- package/Components/PageEditor/getPageReviewContext.test.js +42 -0
- package/Components/PageEditor/getPageReviewContext.test.js.map +1 -0
- package/Components/PageEditor/pageEditorDocument.d.ts +17 -0
- package/Components/PageEditor/pageEditorDocument.js +0 -0
- package/Components/PageEditor/pageReviewMatrix.test.d.ts +1 -0
- package/Components/PageEditor/pageReviewMatrix.test.js +223 -0
- package/Components/PageEditor/pageReviewMatrix.test.js.map +1 -0
- package/Components/PageEditor/publishMatrix.test.d.ts +1 -0
- package/Components/PageEditor/publishMatrix.test.js +313 -0
- package/Components/PageEditor/publishMatrix.test.js.map +1 -0
- package/Components/PagesList/PageListReviewGatedActions.d.ts +2 -0
- package/Components/PagesList/PageListReviewGatedActions.js +27 -0
- package/Components/PagesList/PageListReviewGatedActions.js.map +1 -0
- package/Components/PagesList/PageListReviewGatedActions.test.d.ts +1 -0
- package/Components/PagesList/PageListReviewGatedActions.test.js +94 -0
- package/Components/PagesList/PageListReviewGatedActions.test.js.map +1 -0
- package/Components/PagesList/PagesList.d.ts +2 -0
- package/Components/PagesList/PagesList.js +8 -0
- package/Components/PagesList/PagesList.js.map +1 -0
- package/Components/PagesList/PagesList.test.d.ts +1 -0
- package/Components/PagesList/PagesList.test.js +47 -0
- package/Components/PagesList/PagesList.test.js.map +1 -0
- package/Components/PagesList/index.d.ts +1 -0
- package/Components/PagesList/index.js +1 -0
- package/Components/index.d.ts +2 -0
- package/Components/index.js +2 -0
- package/LICENSE +21 -0
- package/README.md +11 -0
- package/Routes/WebsiteBuilderWorkflowsMenu.d.ts +2 -0
- package/Routes/WebsiteBuilderWorkflowsMenu.js +23 -0
- package/Routes/WebsiteBuilderWorkflowsMenu.js.map +1 -0
- package/Routes/WebsiteBuilderWorkflowsMenu.test.d.ts +1 -0
- package/Routes/WebsiteBuilderWorkflowsMenu.test.js +141 -0
- package/Routes/WebsiteBuilderWorkflowsMenu.test.js.map +1 -0
- package/Routes/index.d.ts +1 -0
- package/Routes/index.js +1 -0
- package/constants.d.ts +1 -0
- package/constants.js +4 -0
- package/constants.js.map +1 -0
- package/editorGlue.wiring.test.d.ts +1 -0
- package/editorGlue.wiring.test.js +128 -0
- package/editorGlue.wiring.test.js.map +1 -0
- package/features/cache/WbReviewCacheSyncHandler.d.ts +8 -0
- package/features/cache/WbReviewCacheSyncHandler.js +14 -0
- package/features/cache/WbReviewCacheSyncHandler.js.map +1 -0
- package/features/cache/WbReviewPageCacheWriter.d.ts +17 -0
- package/features/cache/WbReviewPageCacheWriter.js +39 -0
- package/features/cache/WbReviewPageCacheWriter.js.map +1 -0
- package/features/cache/WbReviewPageCacheWriter.test.d.ts +1 -0
- package/features/cache/WbReviewPageCacheWriter.test.js +115 -0
- package/features/cache/WbReviewPageCacheWriter.test.js.map +1 -0
- package/features/cache/abstractions.d.ts +5 -0
- package/features/cache/abstractions.js +5 -0
- package/features/cache/abstractions.js.map +1 -0
- package/features/cache/feature.d.ts +1 -0
- package/features/cache/feature.js +13 -0
- package/features/cache/feature.js.map +1 -0
- package/features/editorGateway/WbWorkflowEditorGateway/WbWorkflowEditorGateway.d.ts +25 -0
- package/features/editorGateway/WbWorkflowEditorGateway/WbWorkflowEditorGateway.js +112 -0
- package/features/editorGateway/WbWorkflowEditorGateway/WbWorkflowEditorGateway.js.map +1 -0
- package/features/editorGateway/WbWorkflowEditorGateway/WbWorkflowEditorGateway.test.d.ts +1 -0
- package/features/editorGateway/WbWorkflowEditorGateway/WbWorkflowEditorGateway.test.js +632 -0
- package/features/editorGateway/WbWorkflowEditorGateway/WbWorkflowEditorGateway.test.js.map +1 -0
- package/features/editorGateway/feature.d.ts +1 -0
- package/features/editorGateway/feature.js +11 -0
- package/features/editorGateway/feature.js.map +1 -0
- package/features/editorGateway/feature.test.d.ts +1 -0
- package/features/editorGateway/feature.test.js +244 -0
- package/features/editorGateway/feature.test.js.map +1 -0
- package/features/editorGateway/graphql/deleteWebsiteBuilderPageWorkflow.d.ts +1 -0
- package/features/editorGateway/graphql/deleteWebsiteBuilderPageWorkflow.js +19 -0
- package/features/editorGateway/graphql/deleteWebsiteBuilderPageWorkflow.js.map +1 -0
- package/features/editorGateway/graphql/getWebsiteBuilderPageWorkflow.d.ts +1 -0
- package/features/editorGateway/graphql/getWebsiteBuilderPageWorkflow.js +19 -0
- package/features/editorGateway/graphql/getWebsiteBuilderPageWorkflow.js.map +1 -0
- package/features/editorGateway/graphql/inspectWebsiteBuilderPageRouting.d.ts +1 -0
- package/features/editorGateway/graphql/inspectWebsiteBuilderPageRouting.js +19 -0
- package/features/editorGateway/graphql/inspectWebsiteBuilderPageRouting.js.map +1 -0
- package/features/editorGateway/graphql/listWebsiteBuilderPageWorkflowNames.d.ts +1 -0
- package/features/editorGateway/graphql/listWebsiteBuilderPageWorkflowNames.js +23 -0
- package/features/editorGateway/graphql/listWebsiteBuilderPageWorkflowNames.js.map +1 -0
- package/features/editorGateway/graphql/storeWebsiteBuilderPageWorkflow.d.ts +1 -0
- package/features/editorGateway/graphql/storeWebsiteBuilderPageWorkflow.js +19 -0
- package/features/editorGateway/graphql/storeWebsiteBuilderPageWorkflow.js.map +1 -0
- package/features/editorGateway/graphql/websiteBuilderPageFolderExists.d.ts +1 -0
- package/features/editorGateway/graphql/websiteBuilderPageFolderExists.js +16 -0
- package/features/editorGateway/graphql/websiteBuilderPageFolderExists.js.map +1 -0
- package/features/editorMounting/WbWorkflowEditorAppAdapter.d.ts +21 -0
- package/features/editorMounting/WbWorkflowEditorAppAdapter.js +45 -0
- package/features/editorMounting/WbWorkflowEditorAppAdapter.js.map +1 -0
- package/features/editorMounting/WbWorkflowEditorAppAdapter.test.d.ts +1 -0
- package/features/editorMounting/WbWorkflowEditorAppAdapter.test.js +115 -0
- package/features/editorMounting/WbWorkflowEditorAppAdapter.test.js.map +1 -0
- package/features/editorMounting/abstractions.d.ts +5 -0
- package/features/editorMounting/abstractions.js +5 -0
- package/features/editorMounting/abstractions.js.map +1 -0
- package/features/editorMounting/feature.d.ts +3 -0
- package/features/editorMounting/feature.js +19 -0
- package/features/editorMounting/feature.js.map +1 -0
- package/features/editorMounting/feature.test.d.ts +1 -0
- package/features/editorMounting/feature.test.js +93 -0
- package/features/editorMounting/feature.test.js.map +1 -0
- package/features/editorReview/WbPageContentReloader.d.ts +12 -0
- package/features/editorReview/WbPageContentReloader.js +40 -0
- package/features/editorReview/WbPageContentReloader.js.map +1 -0
- package/features/editorReview/WbPageContentReloader.test.d.ts +1 -0
- package/features/editorReview/WbPageContentReloader.test.js +222 -0
- package/features/editorReview/WbPageContentReloader.test.js.map +1 -0
- package/features/editorReview/WbPageReview.d.ts +8 -0
- package/features/editorReview/WbPageReview.js +14 -0
- package/features/editorReview/WbPageReview.js.map +1 -0
- package/features/editorReview/WbPageUnsavedChanges.d.ts +8 -0
- package/features/editorReview/WbPageUnsavedChanges.js +12 -0
- package/features/editorReview/WbPageUnsavedChanges.js.map +1 -0
- package/features/editorReview/WbPageUnsavedChanges.test.d.ts +1 -0
- package/features/editorReview/WbPageUnsavedChanges.test.js +33 -0
- package/features/editorReview/WbPageUnsavedChanges.test.js.map +1 -0
- package/features/editorReview/abstractions.d.ts +5 -0
- package/features/editorReview/abstractions.js +5 -0
- package/features/editorReview/abstractions.js.map +1 -0
- package/features/editorReview/feature.d.ts +3 -0
- package/features/editorReview/feature.js +17 -0
- package/features/editorReview/feature.js.map +1 -0
- package/features/gateway/WbReviewChangeMessageHandler.d.ts +8 -0
- package/features/gateway/WbReviewChangeMessageHandler.js +16 -0
- package/features/gateway/WbReviewChangeMessageHandler.js.map +1 -0
- package/features/gateway/WbReviewContentAdapter/WbReviewContentAdapter.d.ts +13 -0
- package/features/gateway/WbReviewContentAdapter/WbReviewContentAdapter.js +35 -0
- package/features/gateway/WbReviewContentAdapter/WbReviewContentAdapter.js.map +1 -0
- package/features/gateway/WbReviewContentAdapter/WbReviewContentAdapter.test.d.ts +1 -0
- package/features/gateway/WbReviewContentAdapter/WbReviewContentAdapter.test.js +47 -0
- package/features/gateway/WbReviewContentAdapter/WbReviewContentAdapter.test.js.map +1 -0
- package/features/gateway/WbReviewContentAdapter/abstractions.d.ts +5 -0
- package/features/gateway/WbReviewContentAdapter/abstractions.js +5 -0
- package/features/gateway/WbReviewContentAdapter/abstractions.js.map +1 -0
- package/features/gateway/WbReviewGateway/WbReviewGateway.d.ts +51 -0
- package/features/gateway/WbReviewGateway/WbReviewGateway.js +216 -0
- package/features/gateway/WbReviewGateway/WbReviewGateway.js.map +1 -0
- package/features/gateway/WbReviewGateway/WbReviewGateway.test.d.ts +1 -0
- package/features/gateway/WbReviewGateway/WbReviewGateway.test.js +647 -0
- package/features/gateway/WbReviewGateway/WbReviewGateway.test.js.map +1 -0
- package/features/gateway/WbReviewNotificationHandler.d.ts +8 -0
- package/features/gateway/WbReviewNotificationHandler.js +16 -0
- package/features/gateway/WbReviewNotificationHandler.js.map +1 -0
- package/features/gateway/WbReviewRowProvider/WbReviewRowProvider.d.ts +8 -0
- package/features/gateway/WbReviewRowProvider/WbReviewRowProvider.js +14 -0
- package/features/gateway/WbReviewRowProvider/WbReviewRowProvider.js.map +1 -0
- package/features/gateway/WbReviewRowProvider/abstractions.d.ts +5 -0
- package/features/gateway/WbReviewRowProvider/abstractions.js +5 -0
- package/features/gateway/WbReviewRowProvider/abstractions.js.map +1 -0
- package/features/gateway/assertWbPageNamespace.d.ts +1 -0
- package/features/gateway/assertWbPageNamespace.js +7 -0
- package/features/gateway/assertWbPageNamespace.js.map +1 -0
- package/features/gateway/contentReviewsBindings.test.d.ts +1 -0
- package/features/gateway/contentReviewsBindings.test.js +159 -0
- package/features/gateway/contentReviewsBindings.test.js.map +1 -0
- package/features/gateway/feature.d.ts +4 -0
- package/features/gateway/feature.js +27 -0
- package/features/gateway/feature.js.map +1 -0
- package/features/gateway/feature.test.d.ts +1 -0
- package/features/gateway/feature.test.js +85 -0
- package/features/gateway/feature.test.js.map +1 -0
- package/features/gateway/graphql/WbOperationResponse.d.ts +3 -0
- package/features/gateway/graphql/WbOperationResponse.js +0 -0
- package/features/gateway/graphql/approveWebsiteBuilderPageReviewStep.d.ts +1 -0
- package/features/gateway/graphql/approveWebsiteBuilderPageReviewStep.js +22 -0
- package/features/gateway/graphql/approveWebsiteBuilderPageReviewStep.js.map +1 -0
- package/features/gateway/graphql/cancelWebsiteBuilderPageReview.d.ts +1 -0
- package/features/gateway/graphql/cancelWebsiteBuilderPageReview.js +18 -0
- package/features/gateway/graphql/cancelWebsiteBuilderPageReview.js.map +1 -0
- package/features/gateway/graphql/cancelWebsiteBuilderPageReviewsForDelete.d.ts +1 -0
- package/features/gateway/graphql/cancelWebsiteBuilderPageReviewsForDelete.js +26 -0
- package/features/gateway/graphql/cancelWebsiteBuilderPageReviewsForDelete.js.map +1 -0
- package/features/gateway/graphql/getWebsiteBuilderPageReview.d.ts +1 -0
- package/features/gateway/graphql/getWebsiteBuilderPageReview.js +18 -0
- package/features/gateway/graphql/getWebsiteBuilderPageReview.js.map +1 -0
- package/features/gateway/graphql/getWebsiteBuilderPageReviewStepRun.d.ts +1 -0
- package/features/gateway/graphql/getWebsiteBuilderPageReviewStepRun.js +18 -0
- package/features/gateway/graphql/getWebsiteBuilderPageReviewStepRun.js.map +1 -0
- package/features/gateway/graphql/getWebsiteBuilderPageTargetReview.d.ts +1 -0
- package/features/gateway/graphql/getWebsiteBuilderPageTargetReview.js +18 -0
- package/features/gateway/graphql/getWebsiteBuilderPageTargetReview.js.map +1 -0
- package/features/gateway/graphql/listWebsiteBuilderPageReviewStepCandidates.d.ts +1 -0
- package/features/gateway/graphql/listWebsiteBuilderPageReviewStepCandidates.js +18 -0
- package/features/gateway/graphql/listWebsiteBuilderPageReviewStepCandidates.js.map +1 -0
- package/features/gateway/graphql/listWebsiteBuilderPageReviews.d.ts +1 -0
- package/features/gateway/graphql/listWebsiteBuilderPageReviews.js +34 -0
- package/features/gateway/graphql/listWebsiteBuilderPageReviews.js.map +1 -0
- package/features/gateway/graphql/listWebsiteBuilderPageStepCandidates.d.ts +1 -0
- package/features/gateway/graphql/listWebsiteBuilderPageStepCandidates.js +22 -0
- package/features/gateway/graphql/listWebsiteBuilderPageStepCandidates.js.map +1 -0
- package/features/gateway/graphql/listWebsiteBuilderPageWorkflows.d.ts +1 -0
- package/features/gateway/graphql/listWebsiteBuilderPageWorkflows.js +18 -0
- package/features/gateway/graphql/listWebsiteBuilderPageWorkflows.js.map +1 -0
- package/features/gateway/graphql/reassignWebsiteBuilderPageReviewStep.d.ts +1 -0
- package/features/gateway/graphql/reassignWebsiteBuilderPageReviewStep.js +22 -0
- package/features/gateway/graphql/reassignWebsiteBuilderPageReviewStep.js.map +1 -0
- package/features/gateway/graphql/rejectWebsiteBuilderPageReviewStep.d.ts +1 -0
- package/features/gateway/graphql/rejectWebsiteBuilderPageReviewStep.js +22 -0
- package/features/gateway/graphql/rejectWebsiteBuilderPageReviewStep.js.map +1 -0
- package/features/gateway/graphql/requestWebsiteBuilderPageReview.d.ts +1 -0
- package/features/gateway/graphql/requestWebsiteBuilderPageReview.js +26 -0
- package/features/gateway/graphql/requestWebsiteBuilderPageReview.js.map +1 -0
- package/features/gateway/graphql/restartWebsiteBuilderPageReviewStep.d.ts +1 -0
- package/features/gateway/graphql/restartWebsiteBuilderPageReviewStep.js +18 -0
- package/features/gateway/graphql/restartWebsiteBuilderPageReviewStep.js.map +1 -0
- package/features/gateway/graphql/startWebsiteBuilderPageReviewStep.d.ts +1 -0
- package/features/gateway/graphql/startWebsiteBuilderPageReviewStep.js +18 -0
- package/features/gateway/graphql/startWebsiteBuilderPageReviewStep.js.map +1 -0
- package/features/gateway/graphql/takeOverWebsiteBuilderPageReviewStep.d.ts +1 -0
- package/features/gateway/graphql/takeOverWebsiteBuilderPageReviewStep.js +26 -0
- package/features/gateway/graphql/takeOverWebsiteBuilderPageReviewStep.js.map +1 -0
- package/features/trash/BulkDeletePresenterReviewDecorator.d.ts +14 -0
- package/features/trash/BulkDeletePresenterReviewDecorator.js +27 -0
- package/features/trash/BulkDeletePresenterReviewDecorator.js.map +1 -0
- package/features/trash/BulkDeletePresenterReviewDecorator.test.d.ts +1 -0
- package/features/trash/BulkDeletePresenterReviewDecorator.test.js +234 -0
- package/features/trash/BulkDeletePresenterReviewDecorator.test.js.map +1 -0
- package/features/trash/DeletePageRevisionUseCaseReviewDecorator.d.ts +13 -0
- package/features/trash/DeletePageRevisionUseCaseReviewDecorator.js +23 -0
- package/features/trash/DeletePageRevisionUseCaseReviewDecorator.js.map +1 -0
- package/features/trash/DeletePageRevisionUseCaseReviewDecorator.test.d.ts +1 -0
- package/features/trash/DeletePageRevisionUseCaseReviewDecorator.test.js +114 -0
- package/features/trash/DeletePageRevisionUseCaseReviewDecorator.test.js.map +1 -0
- package/features/trash/DeletePageUseCaseReviewDecorator.d.ts +13 -0
- package/features/trash/DeletePageUseCaseReviewDecorator.js +23 -0
- package/features/trash/DeletePageUseCaseReviewDecorator.js.map +1 -0
- package/features/trash/DeletePageUseCaseReviewDecorator.test.d.ts +1 -0
- package/features/trash/DeletePageUseCaseReviewDecorator.test.js +134 -0
- package/features/trash/DeletePageUseCaseReviewDecorator.test.js.map +1 -0
- package/features/trash/feature.d.ts +1 -0
- package/features/trash/feature.js +15 -0
- package/features/trash/feature.js.map +1 -0
- package/features/trash/feature.test.d.ts +1 -0
- package/features/trash/feature.test.js +183 -0
- package/features/trash/feature.test.js.map +1 -0
- package/hooks/usePage.d.ts +5 -0
- package/hooks/usePage.js +15 -0
- package/hooks/usePage.js.map +1 -0
- package/hooks/usePage.test.d.ts +1 -0
- package/hooks/usePage.test.js +49 -0
- package/hooks/usePage.test.js.map +1 -0
- package/index.d.ts +2 -0
- package/index.js +40 -0
- package/index.js.map +1 -0
- package/index.mount.test.d.ts +1 -0
- package/index.mount.test.js +50 -0
- package/index.mount.test.js.map +1 -0
- package/index.test.d.ts +1 -0
- package/index.test.js +523 -0
- package/index.test.js.map +1 -0
- package/package.json +54 -0
- package/pageListChangeStatus.wiring.test.d.ts +1 -0
- package/pageListChangeStatus.wiring.test.js +175 -0
- package/pageListChangeStatus.wiring.test.js.map +1 -0
- package/pageListGlue.wiring.test.d.ts +1 -0
- package/pageListGlue.wiring.test.js +220 -0
- package/pageListGlue.wiring.test.js.map +1 -0
- package/presentation/page/PageGet/WbReviewGetPageFieldSelection.d.ts +8 -0
- package/presentation/page/PageGet/WbReviewGetPageFieldSelection.js +16 -0
- package/presentation/page/PageGet/WbReviewGetPageFieldSelection.js.map +1 -0
- package/presentation/page/PageGet/WbReviewGetPageFieldSelection.test.d.ts +1 -0
- package/presentation/page/PageGet/WbReviewGetPageFieldSelection.test.js +19 -0
- package/presentation/page/PageGet/WbReviewGetPageFieldSelection.test.js.map +1 -0
- package/presentation/page/PageGet/feature.d.ts +1 -0
- package/presentation/page/PageGet/feature.js +11 -0
- package/presentation/page/PageGet/feature.js.map +1 -0
- package/presentation/page/PageList/WbReviewListPagesFieldSelection.d.ts +8 -0
- package/presentation/page/PageList/WbReviewListPagesFieldSelection.js +16 -0
- package/presentation/page/PageList/WbReviewListPagesFieldSelection.js.map +1 -0
- package/presentation/page/PageList/WbReviewListPagesFieldSelection.test.d.ts +1 -0
- package/presentation/page/PageList/WbReviewListPagesFieldSelection.test.js +19 -0
- package/presentation/page/PageList/WbReviewListPagesFieldSelection.test.js.map +1 -0
- package/presentation/page/PageList/WbReviewTableRowMapperDecorator.d.ts +12 -0
- package/presentation/page/PageList/WbReviewTableRowMapperDecorator.js +24 -0
- package/presentation/page/PageList/WbReviewTableRowMapperDecorator.js.map +1 -0
- package/presentation/page/PageList/WbReviewTableRowMapperDecorator.test.d.ts +1 -0
- package/presentation/page/PageList/WbReviewTableRowMapperDecorator.test.js +70 -0
- package/presentation/page/PageList/WbReviewTableRowMapperDecorator.test.js.map +1 -0
- package/presentation/page/PageList/feature.d.ts +1 -0
- package/presentation/page/PageList/feature.js +13 -0
- package/presentation/page/PageList/feature.js.map +1 -0
- package/presentation/page/RevisionList/RevisionListPresenterDecorator.d.ts +15 -0
- package/presentation/page/RevisionList/RevisionListPresenterDecorator.js +36 -0
- package/presentation/page/RevisionList/RevisionListPresenterDecorator.js.map +1 -0
- package/presentation/page/RevisionList/RevisionListPresenterDecorator.test.d.ts +1 -0
- package/presentation/page/RevisionList/RevisionListPresenterDecorator.test.js +119 -0
- package/presentation/page/RevisionList/RevisionListPresenterDecorator.test.js.map +1 -0
- package/presentation/page/RevisionList/feature.d.ts +1 -0
- package/presentation/page/RevisionList/feature.js +11 -0
- package/presentation/page/RevisionList/feature.js.map +1 -0
- package/presentation/page/wbReviewPageSelection.d.ts +1 -0
- package/presentation/page/wbReviewPageSelection.js +9 -0
- package/presentation/page/wbReviewPageSelection.js.map +1 -0
- package/publishAutosave.wiring.test.d.ts +1 -0
- package/publishAutosave.wiring.test.js +162 -0
- package/publishAutosave.wiring.test.js.map +1 -0
- package/routes.d.ts +9 -0
- package/routes.js +19 -0
- package/routes.js.map +1 -0
- package/testing/WbEditorHarness.d.ts +11 -0
- package/testing/WbEditorHarness.js +22 -0
- package/testing/WbEditorHarness.js.map +1 -0
- package/testing/createFakeSession.d.ts +9 -0
- package/testing/createFakeSession.js +29 -0
- package/testing/createFakeSession.js.map +1 -0
- package/testing/createFakeVm.d.ts +3 -0
- package/testing/createFakeVm.js +51 -0
- package/testing/createFakeVm.js.map +1 -0
- package/testing/createFolder.d.ts +2 -0
- package/testing/createFolder.js +13 -0
- package/testing/createFolder.js.map +1 -0
- package/testing/createPageEditor.d.ts +4 -0
- package/testing/createPageEditor.js +26 -0
- package/testing/createPageEditor.js.map +1 -0
- package/testing/registerPageContent.d.ts +20 -0
- package/testing/registerPageContent.js +28 -0
- package/testing/registerPageContent.js.map +1 -0
- package/types.d.ts +9 -0
- 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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"}
|