@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/gateway/WbReviewGateway/WbReviewGateway.test.js","sources":["../../../../src/features/gateway/WbReviewGateway/WbReviewGateway.test.ts"],"sourcesContent":["import { beforeEach } from \"vitest\";\nimport { describe } from \"vitest\";\nimport { expect } from \"vitest\";\nimport { it } from \"vitest\";\nimport { vi } from \"vitest\";\nimport { Container } from \"@webiny/di\";\nimport { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient/abstractions.js\";\nimport { REVIEW_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { STEP_RUN_INFO_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { REVIEW_WITH_FLAGS_AND_ASSIGNMENT_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { REVIEW_WITH_FLAGS_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { STEP_CANDIDATE_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { WORKFLOW_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { ReviewState } from \"@webiny/app-workflows/review/domain/ReviewState.js\";\nimport { StepState } from \"@webiny/app-workflows/review/domain/StepState.js\";\nimport { ReviewAppGateway as GatewayAbstraction } from \"@webiny/app-workflows/review/appGateway/abstractions.js\";\nimport { WbReviewGateway } from \"./WbReviewGateway.js\";\n\ndescribe(\"WbReviewGateway\", () => {\n const client = { execute: vi.fn() };\n let gateway: GatewayAbstraction.Interface;\n\n beforeEach(() => {\n client.execute.mockReset();\n\n const container = new Container();\n container.registerInstance(MainGraphQLClient, client);\n container.register(WbReviewGateway);\n gateway = container.resolve(GatewayAbstraction);\n });\n\n it(\"serves the wb app (R347)\", () => {\n expect(gateway.app).toBe(\"wb\");\n });\n\n it(\"claims only the page namespace (R347)\", () => {\n expect(gateway.canHandle(\"wb.page\")).toBe(true);\n expect(gateway.canHandle(\"wb.pages\")).toBe(false);\n expect(gateway.canHandle(\"wb\")).toBe(false);\n expect(gateway.canHandle(\"cms.article\")).toBe(false);\n expect(client.execute).not.toHaveBeenCalled();\n });\n\n it(\"lists the page workflows without variables\", async () => {\n const envelope = { data: [{ id: \"workflow-1\" }], error: null };\n client.execute.mockResolvedValue({\n websiteBuilder: { listWebsiteBuilderPageWorkflows: envelope }\n });\n\n const result = await gateway.listWorkflows();\n\n expect(result).toEqual(envelope);\n expect(client.execute).toHaveBeenCalledTimes(1);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toBeUndefined();\n expect(request.query).toContain(\"websiteBuilder\");\n expect(request.query).toContain(\"listWebsiteBuilderPageWorkflows\");\n expect(request.query).toContain(WORKFLOW_FIELDS);\n });\n\n it(\"reads the target review by revision id\", async () => {\n const envelope = { data: { review: { id: \"review-1\" }, flags: {} }, error: null };\n client.execute.mockResolvedValue({\n websiteBuilder: { getWebsiteBuilderPageTargetReview: envelope }\n });\n\n const result = await gateway.getTargetReview({\n namespace: \"wb.page\",\n targetRevisionId: \"page-1#0001\"\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({ revisionId: \"page-1#0001\" });\n expect(request.query).toContain(\n \"getWebsiteBuilderPageTargetReview(revisionId: $revisionId)\"\n );\n expect(request.query).toContain(REVIEW_WITH_FLAGS_AND_ASSIGNMENT_FIELDS);\n });\n\n it(\"returns an empty target review as is\", async () => {\n const envelope = { data: null, error: null };\n client.execute.mockResolvedValue({\n websiteBuilder: { getWebsiteBuilderPageTargetReview: envelope }\n });\n\n const result = await gateway.getTargetReview({\n namespace: \"wb.page\",\n targetRevisionId: \"page-1#0001\"\n });\n\n expect(result).toEqual({ data: null, error: null });\n });\n\n it(\"rejects a namespace other than wb.page before sending a request\", async () => {\n const cmsTarget = { namespace: \"cms.article\", targetRevisionId: \"entry-1#0001\" };\n\n await expect(gateway.getTargetReview(cmsTarget)).rejects.toThrow(\n 'Invalid app name: \"cms.article\".'\n );\n await expect(\n gateway.requestReview({ target: cmsTarget, title: \"Review\", picks: [] })\n ).rejects.toThrow('Invalid app name: \"cms.article\".');\n await expect(\n gateway.listStepCandidates({\n workflowId: \"workflow-1\",\n stepId: \"step-1\",\n target: cmsTarget\n })\n ).rejects.toThrow('Invalid app name: \"cms.article\".');\n await expect(\n gateway.cancelForDelete({\n namespace: \"cms.article\",\n targetId: \"entry-1\",\n targetRevisionId: null,\n action: \"trash\"\n })\n ).rejects.toThrow('Invalid app name: \"cms.article\".');\n\n expect(client.execute).not.toHaveBeenCalled();\n });\n\n it(\"reads one review by id\", async () => {\n const envelope = { data: { review: { id: \"review-1\" }, flags: {} }, error: null };\n client.execute.mockResolvedValue({\n websiteBuilder: { getWebsiteBuilderPageReview: envelope }\n });\n\n const result = await gateway.getReview(\"review-1\");\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({ id: \"review-1\" });\n expect(request.query).toContain(\"getWebsiteBuilderPageReview(id: $id)\");\n expect(request.query).toContain(REVIEW_WITH_FLAGS_AND_ASSIGNMENT_FIELDS);\n });\n\n it(\"lists reviews, passes the My requests filters and drops the content type filter\", async () => {\n const envelope = {\n data: [{ review: { id: \"review-1\" }, flags: {} }],\n meta: { cursor: \"cursor-2\", hasMoreItems: true },\n error: null\n };\n client.execute.mockResolvedValue({\n websiteBuilder: { listWebsiteBuilderPageReviews: envelope }\n });\n\n const result = await gateway.listReviews({\n list: \"myRequests\",\n where: {\n modelId: \"article\",\n titleContains: \"launch\",\n reviewState: ReviewState.Approved,\n stepState: StepState.Approved\n },\n sort: \"lastChangedOn_DESC\",\n limit: 20,\n after: \"cursor-1\"\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({\n list: \"myRequests\",\n where: {\n titleContains: \"launch\",\n reviewState: ReviewState.Approved,\n stepState: StepState.Approved\n },\n sort: \"lastChangedOn_DESC\",\n limit: 20,\n after: \"cursor-1\"\n });\n expect(request.variables.where).not.toHaveProperty(\"modelId\");\n expect(request.query).toContain(\"$where: WbPageReviewListWhere\");\n expect(request.query).toContain(\"listWebsiteBuilderPageReviews(\");\n expect(request.query).toContain(\"meta\");\n expect(request.query).toContain(\"hasMoreItems\");\n expect(request.query).toContain(REVIEW_WITH_FLAGS_FIELDS);\n });\n\n it(\"lists the candidates of a step before a review exists\", async () => {\n const envelope = { data: [{ id: \"user-1\" }], error: null };\n client.execute.mockResolvedValue({\n websiteBuilder: { listWebsiteBuilderPageStepCandidates: envelope }\n });\n\n const result = await gateway.listStepCandidates({\n workflowId: \"workflow-1\",\n stepId: \"step-1\",\n target: { namespace: \"wb.page\", targetRevisionId: \"page-1#0001\" }\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({\n workflowId: \"workflow-1\",\n stepId: \"step-1\",\n revisionId: \"page-1#0001\"\n });\n expect(request.query).toContain(\"listWebsiteBuilderPageStepCandidates(\");\n expect(request.query).toContain(STEP_CANDIDATE_FIELDS);\n });\n\n it(\"lists who a step of a review can be reassigned to\", async () => {\n const envelope = { data: [{ id: \"user-2\" }], error: null };\n client.execute.mockResolvedValue({\n websiteBuilder: { listWebsiteBuilderPageReviewStepCandidates: envelope }\n });\n\n const result = await gateway.listReviewStepCandidates({\n reviewId: \"review-1\",\n stepId: \"step-1\"\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({ reviewId: \"review-1\", stepId: \"step-1\" });\n expect(request.query).toContain(\"listWebsiteBuilderPageReviewStepCandidates(\");\n expect(request.query).toContain(STEP_CANDIDATE_FIELDS);\n });\n\n it(\"requests a review with the title and the picks\", async () => {\n const envelope = { data: { id: \"review-1\" }, error: null };\n client.execute.mockResolvedValue({\n websiteBuilder: { requestWebsiteBuilderPageReview: envelope }\n });\n\n const result = await gateway.requestReview({\n target: { namespace: \"wb.page\", targetRevisionId: \"page-1#0001\" },\n title: \"Launch page\",\n picks: [{ stepId: \"step-1\", userId: \"user-2\" }]\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({\n revisionId: \"page-1#0001\",\n title: \"Launch page\",\n picks: [{ stepId: \"step-1\", userId: \"user-2\" }]\n });\n expect(request.query).toContain(\"requestWebsiteBuilderPageReview(\");\n expect(request.query).toContain(REVIEW_FIELDS);\n });\n\n it(\"starts a step\", async () => {\n const envelope = { data: { id: \"review-1\" }, error: null };\n client.execute.mockResolvedValue({\n websiteBuilder: { startWebsiteBuilderPageReviewStep: envelope }\n });\n\n const result = await gateway.startStep({ reviewId: \"review-1\", stepId: \"step-1\" });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({ reviewId: \"review-1\", stepId: \"step-1\" });\n expect(request.query).toContain(\"startWebsiteBuilderPageReviewStep(\");\n expect(request.query).toContain(REVIEW_FIELDS);\n });\n\n it(\"takes a step over and passes the notify choice\", async () => {\n const envelope = { data: { id: \"review-1\" }, error: null };\n client.execute.mockResolvedValue({\n websiteBuilder: { takeOverWebsiteBuilderPageReviewStep: envelope }\n });\n\n const result = await gateway.takeOverStep({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n notifyPreviousOwner: false\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n notifyPreviousOwner: false\n });\n expect(request.query).toContain(\"takeOverWebsiteBuilderPageReviewStep(\");\n });\n\n it(\"reassigns a step\", async () => {\n const envelope = { data: { id: \"review-1\" }, error: null };\n client.execute.mockResolvedValue({\n websiteBuilder: { reassignWebsiteBuilderPageReviewStep: envelope }\n });\n\n const result = await gateway.reassignStep({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n userId: \"user-2\"\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n userId: \"user-2\"\n });\n expect(request.query).toContain(\"reassignWebsiteBuilderPageReviewStep(\");\n });\n\n it(\"approves a step with and without a comment\", async () => {\n const envelope = { data: { id: \"review-1\" }, error: null };\n client.execute.mockResolvedValue({\n websiteBuilder: { approveWebsiteBuilderPageReviewStep: envelope }\n });\n\n await gateway.approveStep({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n comment: \"Looks good\"\n });\n const result = await gateway.approveStep({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n comment: null\n });\n\n expect(result).toEqual(envelope);\n expect(client.execute.mock.calls[0][0].variables).toEqual({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n comment: \"Looks good\"\n });\n expect(client.execute.mock.calls[1][0].variables).toEqual({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n comment: null\n });\n expect(client.execute.mock.calls[0][0].query).toContain(\n \"approveWebsiteBuilderPageReviewStep(\"\n );\n });\n\n it(\"rejects a step with the comment\", async () => {\n const envelope = { data: { id: \"review-1\" }, error: null };\n client.execute.mockResolvedValue({\n websiteBuilder: { rejectWebsiteBuilderPageReviewStep: envelope }\n });\n\n const result = await gateway.rejectStep({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n comment: \"The hero image is wrong.\"\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n comment: \"The hero image is wrong.\"\n });\n expect(request.query).toContain(\"rejectWebsiteBuilderPageReviewStep(\");\n });\n\n it(\"cancels a review\", async () => {\n const envelope = { data: { id: \"review-1\" }, error: null };\n client.execute.mockResolvedValue({\n websiteBuilder: { cancelWebsiteBuilderPageReview: envelope }\n });\n\n const result = await gateway.cancelReview({ reviewId: \"review-1\" });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({ reviewId: \"review-1\" });\n expect(request.query).toContain(\"cancelWebsiteBuilderPageReview(reviewId: $reviewId)\");\n });\n\n it(\"cancels the reviews of one page revision before a delete\", async () => {\n const envelope = { data: [{ id: \"review-1\" }], error: null };\n client.execute.mockResolvedValue({\n websiteBuilder: { cancelWebsiteBuilderPageReviewsForDelete: envelope }\n });\n\n const result = await gateway.cancelForDelete({\n namespace: \"wb.page\",\n targetId: \"page-1\",\n targetRevisionId: \"page-1#0002\",\n action: \"delete\"\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({\n pageId: \"page-1\",\n revisionId: \"page-1#0002\",\n action: \"delete\"\n });\n expect(request.query).toContain(\"cancelWebsiteBuilderPageReviewsForDelete(\");\n });\n\n it(\"cancels every review of a page when no revision is given\", async () => {\n const envelope = { data: [], error: null };\n client.execute.mockResolvedValue({\n websiteBuilder: { cancelWebsiteBuilderPageReviewsForDelete: envelope }\n });\n\n await gateway.cancelForDelete({\n namespace: \"wb.page\",\n targetId: \"page-1\",\n targetRevisionId: null,\n action: \"trash\"\n });\n\n expect(client.execute.mock.calls[0][0].variables).toEqual({\n pageId: \"page-1\",\n revisionId: null,\n action: \"trash\"\n });\n });\n\n it(\"restarts a step\", async () => {\n const envelope = { data: { id: \"review-1\" }, error: null };\n client.execute.mockResolvedValue({\n websiteBuilder: { restartWebsiteBuilderPageReviewStep: envelope }\n });\n\n const result = await gateway.restartStep({ reviewId: \"review-1\", stepId: \"step-1\" });\n\n expect(result).toEqual(envelope);\n expect(client.execute).toHaveBeenCalledTimes(1);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({ reviewId: \"review-1\", stepId: \"step-1\" });\n expect(request.query).toContain(\"mutation RestartWebsiteBuilderPageReviewStep\");\n expect(request.query).toContain(\n \"restartWebsiteBuilderPageReviewStep(reviewId: $reviewId, stepId: $stepId)\"\n );\n expect(request.query).toContain(REVIEW_FIELDS);\n });\n\n it(\"returns a restart conflict as an envelope error and never throws for it\", async () => {\n const envelope = {\n data: null,\n error: { code: \"Workflows/Review/InvalidState\", message: \"Not failed.\", data: null }\n };\n client.execute.mockResolvedValue({\n websiteBuilder: { restartWebsiteBuilderPageReviewStep: envelope }\n });\n\n const result = await gateway.restartStep({ reviewId: \"review-1\", stepId: \"step-1\" });\n\n expect(result).toEqual(envelope);\n });\n\n it(\"reads the run of a step by review, step and task id\", async () => {\n const envelope = { data: { taskId: \"task-1\", status: \"done\" }, error: null };\n client.execute.mockResolvedValue({\n websiteBuilder: { getWebsiteBuilderPageReviewStepRun: envelope }\n });\n\n const result = await gateway.getStepRun({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n taskId: \"task-1\"\n });\n\n expect(result).toEqual(envelope);\n const request = client.execute.mock.calls[0][0];\n expect(request.variables).toEqual({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n taskId: \"task-1\"\n });\n expect(request.query).toContain(\"query GetWebsiteBuilderPageReviewStepRun\");\n expect(request.query).toContain(\n \"getWebsiteBuilderPageReviewStepRun(reviewId: $reviewId, stepId: $stepId, taskId: $taskId)\"\n );\n expect(request.query).toContain(STEP_RUN_INFO_FIELDS);\n });\n\n it(\"returns a gone task (null data) as is\", async () => {\n const envelope = { data: null, error: null };\n client.execute.mockResolvedValue({\n websiteBuilder: { getWebsiteBuilderPageReviewStepRun: envelope }\n });\n\n const result = await gateway.getStepRun({\n reviewId: \"review-1\",\n stepId: \"step-1\",\n taskId: \"task-1\"\n });\n\n expect(result).toEqual({ data: null, error: null });\n });\n\n it(\"answers the blocking reviews with an empty list and sends no request (the WB bulk delete runs per item)\", async () => {\n const result = await gateway.listBlockingReviews({\n namespace: \"wb.page\",\n targetIds: [\"page-1\", \"page-2\"]\n });\n\n expect(result).toEqual({ data: [], error: null });\n expect(client.execute).not.toHaveBeenCalled();\n });\n\n it(\"returns an envelope error as is and never throws for it\", async () => {\n const envelope = {\n data: null,\n error: { code: \"Workflows/Review/StepNotCurrent\", message: \"Not current.\", data: null }\n };\n client.execute.mockResolvedValue({\n websiteBuilder: { startWebsiteBuilderPageReviewStep: envelope }\n });\n\n const result = await gateway.startStep({ reviewId: \"review-1\", stepId: \"step-1\" });\n\n expect(result).toEqual(envelope);\n });\n\n it(\"lets a transport error pass through\", async () => {\n client.execute.mockRejectedValue(new Error(\"Network down.\"));\n\n await expect(gateway.getReview(\"review-1\")).rejects.toThrow(\"Network down.\");\n });\n});\n"],"names":["describe","client","vi","gateway","beforeEach","container","Container","MainGraphQLClient","WbReviewGateway","GatewayAbstraction","it","expect","envelope","result","request","WORKFLOW_FIELDS","REVIEW_WITH_FLAGS_AND_ASSIGNMENT_FIELDS","cmsTarget","ReviewState","StepState","REVIEW_WITH_FLAGS_FIELDS","STEP_CANDIDATE_FIELDS","REVIEW_FIELDS","STEP_RUN_INFO_FIELDS","Error"],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { WebsocketEventHandler } from "@webiny/app-websockets/events/abstractions.js";
|
|
2
|
+
import { ReviewNotificationHandler } from "@webiny/app-workflows/review/mounting/ReviewNotificationHandler.js";
|
|
3
|
+
declare class WbReviewNotificationHandlerImpl extends ReviewNotificationHandler implements WebsocketEventHandler.Interface {
|
|
4
|
+
}
|
|
5
|
+
export declare const WbReviewNotificationHandler: typeof WbReviewNotificationHandlerImpl & {
|
|
6
|
+
__abstraction: import("@webiny/di").Abstraction<import("@webiny/app/features/eventPublisher/abstractions.js").IEventHandler<import("@webiny/app-websockets/events/WebsocketEvent.js").WebsocketEvent>>;
|
|
7
|
+
};
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { WebsocketEventHandler } from "@webiny/app-websockets/events/abstractions.js";
|
|
2
|
+
import { ReviewNotificationHandler } from "@webiny/app-workflows/review/mounting/ReviewNotificationHandler.js";
|
|
3
|
+
import { ReviewNotificationService } from "@webiny/app-workflows/review/notifications/abstractions.js";
|
|
4
|
+
import { WbReviewContentAdapter } from "./WbReviewContentAdapter/abstractions.js";
|
|
5
|
+
class WbReviewNotificationHandlerImpl extends ReviewNotificationHandler {
|
|
6
|
+
}
|
|
7
|
+
const WbReviewNotificationHandler = WebsocketEventHandler.createImplementation({
|
|
8
|
+
implementation: WbReviewNotificationHandlerImpl,
|
|
9
|
+
dependencies: [
|
|
10
|
+
ReviewNotificationService,
|
|
11
|
+
WbReviewContentAdapter
|
|
12
|
+
]
|
|
13
|
+
});
|
|
14
|
+
export { WbReviewNotificationHandler };
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=WbReviewNotificationHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/gateway/WbReviewNotificationHandler.js","sources":["../../../src/features/gateway/WbReviewNotificationHandler.ts"],"sourcesContent":["import { WebsocketEventHandler } from \"@webiny/app-websockets/events/abstractions.js\";\nimport { ReviewNotificationHandler } from \"@webiny/app-workflows/review/mounting/ReviewNotificationHandler.js\";\nimport { ReviewNotificationService } from \"@webiny/app-workflows/review/notifications/abstractions.js\";\nimport { WbReviewContentAdapter } from \"./WbReviewContentAdapter/abstractions.js\";\n\n// A subclass of its own (see WbReviewRowProviderImpl): the CMS binds its own.\nclass WbReviewNotificationHandlerImpl\n extends ReviewNotificationHandler\n implements WebsocketEventHandler.Interface {}\n\nexport const WbReviewNotificationHandler = WebsocketEventHandler.createImplementation({\n implementation: WbReviewNotificationHandlerImpl,\n dependencies: [ReviewNotificationService, WbReviewContentAdapter]\n});\n"],"names":["WbReviewNotificationHandlerImpl","ReviewNotificationHandler","WbReviewNotificationHandler","WebsocketEventHandler","ReviewNotificationService","WbReviewContentAdapter"],"mappings":";;;;AAMA,MAAMA,wCACMC;AACoC;AAEzC,MAAMC,8BAA8BC,sBAAsB,oBAAoB,CAAC;IAClF,gBAAgBH;IAChB,cAAc;QAACI;QAA2BC;KAAuB;AACrE"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { AppReviewRowProvider } from "@webiny/app-workflows/review/mounting/AppReviewRowProvider.js";
|
|
2
|
+
import { WbReviewRowProvider as Abstraction } from "./abstractions.js";
|
|
3
|
+
declare class WbReviewRowProviderImpl extends AppReviewRowProvider implements Abstraction.Interface {
|
|
4
|
+
}
|
|
5
|
+
export declare const WbReviewRowProvider: typeof WbReviewRowProviderImpl & {
|
|
6
|
+
__abstraction: import("@webiny/di").Abstraction<import("@webiny/app-workflows/review/presentation/reviewList/abstractions.js").IReviewRowProvider>;
|
|
7
|
+
};
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { AppReviewRowProvider } from "@webiny/app-workflows/review/mounting/AppReviewRowProvider.js";
|
|
2
|
+
import { WbReviewContentAdapter } from "../WbReviewContentAdapter/abstractions.js";
|
|
3
|
+
import { WbReviewRowProvider } from "./abstractions.js";
|
|
4
|
+
class WbReviewRowProviderImpl extends AppReviewRowProvider {
|
|
5
|
+
}
|
|
6
|
+
const WbReviewRowProvider_WbReviewRowProvider = WbReviewRowProvider.createImplementation({
|
|
7
|
+
implementation: WbReviewRowProviderImpl,
|
|
8
|
+
dependencies: [
|
|
9
|
+
WbReviewContentAdapter
|
|
10
|
+
]
|
|
11
|
+
});
|
|
12
|
+
export { WbReviewRowProvider_WbReviewRowProvider as WbReviewRowProvider };
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=WbReviewRowProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/gateway/WbReviewRowProvider/WbReviewRowProvider.js","sources":["../../../../src/features/gateway/WbReviewRowProvider/WbReviewRowProvider.ts"],"sourcesContent":["import { AppReviewRowProvider } from \"@webiny/app-workflows/review/mounting/AppReviewRowProvider.js\";\nimport { WbReviewContentAdapter } from \"../WbReviewContentAdapter/abstractions.js\";\nimport { WbReviewRowProvider as Abstraction } from \"./abstractions.js\";\n\n// A subclass of its own: `createImplementation` stores the abstraction on the class, so the shared\n// class must never be bound directly (it would collide with the CMS binding).\nclass WbReviewRowProviderImpl extends AppReviewRowProvider implements Abstraction.Interface {}\n\nexport const WbReviewRowProvider = Abstraction.createImplementation({\n implementation: WbReviewRowProviderImpl,\n dependencies: [WbReviewContentAdapter]\n});\n"],"names":["WbReviewRowProviderImpl","AppReviewRowProvider","WbReviewRowProvider","Abstraction","WbReviewContentAdapter"],"mappings":";;;AAMA,MAAMA,gCAAgCC;AAAuD;AAEtF,MAAMC,0CAAsBC,oBAAAA,oBAAgC,CAAC;IAChE,gBAAgBH;IAChB,cAAc;QAACI;KAAuB;AAC1C"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { IReviewRowProvider } from "@webiny/app-workflows/review/presentation/reviewList/abstractions.js";
|
|
2
|
+
export declare const WbReviewRowProvider: import("@webiny/di").Abstraction<IReviewRowProvider>;
|
|
3
|
+
export declare namespace WbReviewRowProvider {
|
|
4
|
+
type Interface = IReviewRowProvider;
|
|
5
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/gateway/WbReviewRowProvider/abstractions.js","sources":["../../../../src/features/gateway/WbReviewRowProvider/abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/admin\";\nimport type { IReviewRowProvider } from \"@webiny/app-workflows/review/presentation/reviewList/abstractions.js\";\n\nexport const WbReviewRowProvider = createAbstraction<IReviewRowProvider>(\n \"WebsiteBuilder/Workflows/ReviewRowProvider\"\n);\n\nexport namespace WbReviewRowProvider {\n export type Interface = IReviewRowProvider;\n}\n"],"names":["WbReviewRowProvider","createAbstraction"],"mappings":";AAGO,MAAMA,sBAAsBC,kBAC/B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const assertWbPageNamespace: (namespace: string) => void;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { WB_PAGE_APP } from "../../constants.js";
|
|
2
|
+
const assertWbPageNamespace = (namespace)=>{
|
|
3
|
+
if (namespace !== WB_PAGE_APP) throw new Error(`Invalid app name: "${namespace}".`);
|
|
4
|
+
};
|
|
5
|
+
export { assertWbPageNamespace };
|
|
6
|
+
|
|
7
|
+
//# sourceMappingURL=assertWbPageNamespace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/gateway/assertWbPageNamespace.js","sources":["../../../src/features/gateway/assertWbPageNamespace.ts"],"sourcesContent":["import { WB_PAGE_APP } from \"~/constants.js\";\n\nexport const assertWbPageNamespace = (namespace: string): void => {\n if (namespace !== WB_PAGE_APP) {\n throw new Error(`Invalid app name: \"${namespace}\".`);\n }\n};\n"],"names":["assertWbPageNamespace","namespace","WB_PAGE_APP","Error"],"mappings":";AAEO,MAAMA,wBAAwB,CAACC;IAClC,IAAIA,cAAcC,aACd,MAAM,IAAIC,MAAM,CAAC,mBAAmB,EAAEF,UAAU,EAAE,CAAC;AAE3D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
|
+
import { Container } from "@webiny/di";
|
|
3
|
+
import { WebsocketEvent } from "@webiny/app-websockets/events/WebsocketEvent.js";
|
|
4
|
+
import { WebsocketEventHandler } from "@webiny/app-websockets/events/abstractions.js";
|
|
5
|
+
import { MainGraphQLClient } from "@webiny/app/features/mainGraphQLClient/abstractions.js";
|
|
6
|
+
import { CmsReviewContentAdapter } from "@webiny/app-headless-cms-workflows/features/gateway/CmsReviewContentAdapter/abstractions.js";
|
|
7
|
+
import { CmsReviewNotificationHandler } from "@webiny/app-headless-cms-workflows/features/gateway/CmsReviewNotificationHandler.js";
|
|
8
|
+
import { CmsReviewRowProvider } from "@webiny/app-headless-cms-workflows/features/gateway/CmsReviewRowProvider/abstractions.js";
|
|
9
|
+
import { CmsReviewRowProvider as CmsReviewRowProvider_js_CmsReviewRowProvider } from "@webiny/app-headless-cms-workflows/features/gateway/CmsReviewRowProvider/CmsReviewRowProvider.js";
|
|
10
|
+
import { AppReviewRowProvider } from "@webiny/app-workflows/review/mounting/AppReviewRowProvider.js";
|
|
11
|
+
import { ReviewNotificationHandler } from "@webiny/app-workflows/review/mounting/ReviewNotificationHandler.js";
|
|
12
|
+
import { ReviewNotificationService } from "@webiny/app-workflows/review/notifications/abstractions.js";
|
|
13
|
+
import { ReviewActivity } from "@webiny/app-workflows/review/activity/abstractions.js";
|
|
14
|
+
import { ReviewChangeMessageHandler } from "@webiny/app-workflows/review/mounting/ReviewChangeMessageHandler.js";
|
|
15
|
+
import { WORKFLOWS_NOTIFICATION_ACTION, WORKFLOWS_REVIEW_CHANGED_ACTION } from "@webiny/app-workflows/review/domain/constants.js";
|
|
16
|
+
import { CmsReviewChangeMessageHandler } from "@webiny/app-headless-cms-workflows/features/gateway/CmsReviewChangeMessageHandler.js";
|
|
17
|
+
import { WbReviewFeature } from "./feature.js";
|
|
18
|
+
import { WbReviewRowProvider } from "./WbReviewRowProvider/abstractions.js";
|
|
19
|
+
const handle = vi.fn();
|
|
20
|
+
const notify = vi.fn();
|
|
21
|
+
const createContainer = ()=>{
|
|
22
|
+
const container = new Container();
|
|
23
|
+
container.registerInstance(MainGraphQLClient, {
|
|
24
|
+
execute: vi.fn()
|
|
25
|
+
});
|
|
26
|
+
container.registerInstance(ReviewNotificationService, {
|
|
27
|
+
handle: handle
|
|
28
|
+
});
|
|
29
|
+
container.registerInstance(ReviewActivity, {
|
|
30
|
+
subscribe: vi.fn(),
|
|
31
|
+
notify: notify
|
|
32
|
+
});
|
|
33
|
+
return container;
|
|
34
|
+
};
|
|
35
|
+
const message = (namespace)=>new WebsocketEvent({
|
|
36
|
+
action: WORKFLOWS_NOTIFICATION_ACTION,
|
|
37
|
+
data: {
|
|
38
|
+
event: "assigned",
|
|
39
|
+
reviewId: "review-1",
|
|
40
|
+
stepId: "step-1",
|
|
41
|
+
namespace,
|
|
42
|
+
targetId: "page-1",
|
|
43
|
+
targetRevisionId: "page-1#0001",
|
|
44
|
+
title: "Review assigned",
|
|
45
|
+
body: "Maja Kos asked you to review Home"
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
const changeMessage = (namespace)=>new WebsocketEvent({
|
|
49
|
+
action: WORKFLOWS_REVIEW_CHANGED_ACTION,
|
|
50
|
+
data: {
|
|
51
|
+
kind: "stepStarted",
|
|
52
|
+
reviewId: "review-1",
|
|
53
|
+
stepId: "step-1",
|
|
54
|
+
namespace,
|
|
55
|
+
targetId: "page-1",
|
|
56
|
+
targetRevisionId: "page-1#0001"
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
describe("WbReviewFeature Content Reviews registrations", ()=>{
|
|
60
|
+
beforeEach(()=>{
|
|
61
|
+
handle.mockReset();
|
|
62
|
+
notify.mockReset();
|
|
63
|
+
});
|
|
64
|
+
it("registers a row provider that binds only the page namespace", ()=>{
|
|
65
|
+
const container = createContainer();
|
|
66
|
+
WbReviewFeature.register(container);
|
|
67
|
+
const provider = container.resolve(WbReviewRowProvider);
|
|
68
|
+
expect(provider).toBeInstanceOf(AppReviewRowProvider);
|
|
69
|
+
expect(provider.getBinding("wb.page")).not.toBeNull();
|
|
70
|
+
expect(provider.getBinding("cms.article")).toBeNull();
|
|
71
|
+
});
|
|
72
|
+
it("hands out the same provider as the feature export", ()=>{
|
|
73
|
+
const container = createContainer();
|
|
74
|
+
WbReviewFeature.register(container);
|
|
75
|
+
const { rowProvider } = WbReviewFeature.resolve(container);
|
|
76
|
+
expect(rowProvider).toBe(container.resolve(WbReviewRowProvider));
|
|
77
|
+
});
|
|
78
|
+
it("registers a notification handler that handles page messages and ignores cms messages (R223)", async ()=>{
|
|
79
|
+
const container = createContainer();
|
|
80
|
+
WbReviewFeature.register(container);
|
|
81
|
+
const handlers = container.resolveAll(WebsocketEventHandler);
|
|
82
|
+
const own = handlers.filter((handler)=>handler instanceof ReviewNotificationHandler);
|
|
83
|
+
expect(own).toHaveLength(1);
|
|
84
|
+
await own[0].handle(message("wb.page"));
|
|
85
|
+
expect(handle).toHaveBeenCalledTimes(1);
|
|
86
|
+
expect(handle.mock.calls[0][0].data.namespace).toBe("wb.page");
|
|
87
|
+
expect(handle.mock.calls[0][0].url).toContain("/website-builder/pages/editor/");
|
|
88
|
+
await own[0].handle(message("cms.article"));
|
|
89
|
+
expect(handle).toHaveBeenCalledTimes(1);
|
|
90
|
+
});
|
|
91
|
+
it("coexists with the CMS bindings in one container, each binding only its own namespace (R237)", async ()=>{
|
|
92
|
+
const container = createContainer();
|
|
93
|
+
WbReviewFeature.register(container);
|
|
94
|
+
const cmsAdapter = {
|
|
95
|
+
canHandle: (namespace)=>namespace.startsWith("cms."),
|
|
96
|
+
getContentUrl: ()=>"/cms/content-entries/article?id=entry-1%230001",
|
|
97
|
+
getContentTypeLabel: ()=>null,
|
|
98
|
+
renderContentTypeIcon: ()=>null
|
|
99
|
+
};
|
|
100
|
+
container.registerInstance(CmsReviewContentAdapter, cmsAdapter);
|
|
101
|
+
container.register(CmsReviewRowProvider_js_CmsReviewRowProvider).inSingletonScope();
|
|
102
|
+
container.register(CmsReviewNotificationHandler);
|
|
103
|
+
const wbProvider = container.resolve(WbReviewRowProvider);
|
|
104
|
+
const cmsProvider = container.resolve(CmsReviewRowProvider);
|
|
105
|
+
expect(cmsProvider).not.toBe(wbProvider);
|
|
106
|
+
expect(wbProvider.getBinding("wb.page")).not.toBeNull();
|
|
107
|
+
expect(wbProvider.getBinding("cms.article")).toBeNull();
|
|
108
|
+
expect(cmsProvider.getBinding("cms.article")).not.toBeNull();
|
|
109
|
+
expect(cmsProvider.getBinding("wb.page")).toBeNull();
|
|
110
|
+
const handlers = container.resolveAll(WebsocketEventHandler).filter((handler)=>handler instanceof ReviewNotificationHandler);
|
|
111
|
+
expect(handlers).toHaveLength(2);
|
|
112
|
+
for (const handler of handlers)await handler.handle(message("wb.page"));
|
|
113
|
+
expect(handle).toHaveBeenCalledTimes(1);
|
|
114
|
+
expect(handle.mock.calls[0][0].url).toContain("/website-builder/pages/editor/");
|
|
115
|
+
for (const handler of handlers)await handler.handle(message("cms.article"));
|
|
116
|
+
expect(handle).toHaveBeenCalledTimes(2);
|
|
117
|
+
expect(handle.mock.calls[1][0].url).toBe("/cms/content-entries/article?id=entry-1%230001");
|
|
118
|
+
});
|
|
119
|
+
it("registers a change message handler that signals page frames and ignores cms frames (R260)", async ()=>{
|
|
120
|
+
const container = createContainer();
|
|
121
|
+
WbReviewFeature.register(container);
|
|
122
|
+
const handlers = container.resolveAll(WebsocketEventHandler);
|
|
123
|
+
const own = handlers.filter((handler)=>handler instanceof ReviewChangeMessageHandler);
|
|
124
|
+
expect(own).toHaveLength(1);
|
|
125
|
+
await own[0].handle(changeMessage("wb.page"));
|
|
126
|
+
expect(notify).toHaveBeenCalledTimes(1);
|
|
127
|
+
expect(notify).toHaveBeenCalledWith({
|
|
128
|
+
namespace: "wb.page",
|
|
129
|
+
source: "remote",
|
|
130
|
+
reviewId: "review-1",
|
|
131
|
+
targetRevisionId: "page-1#0001"
|
|
132
|
+
});
|
|
133
|
+
await own[0].handle(changeMessage("cms.article"));
|
|
134
|
+
expect(notify).toHaveBeenCalledTimes(1);
|
|
135
|
+
expect(handle).not.toHaveBeenCalled();
|
|
136
|
+
});
|
|
137
|
+
it("coexists with the CMS change message handler, each signalling only its own namespace (R237)", async ()=>{
|
|
138
|
+
const container = createContainer();
|
|
139
|
+
WbReviewFeature.register(container);
|
|
140
|
+
const cmsAdapter = {
|
|
141
|
+
canHandle: (namespace)=>namespace.startsWith("cms."),
|
|
142
|
+
getContentUrl: ()=>"/cms/content-entries/article?id=entry-1%230001",
|
|
143
|
+
getContentTypeLabel: ()=>null,
|
|
144
|
+
renderContentTypeIcon: ()=>null
|
|
145
|
+
};
|
|
146
|
+
container.registerInstance(CmsReviewContentAdapter, cmsAdapter);
|
|
147
|
+
container.register(CmsReviewChangeMessageHandler);
|
|
148
|
+
const handlers = container.resolveAll(WebsocketEventHandler).filter((handler)=>handler instanceof ReviewChangeMessageHandler);
|
|
149
|
+
expect(handlers).toHaveLength(2);
|
|
150
|
+
for (const handler of handlers)await handler.handle(changeMessage("wb.page"));
|
|
151
|
+
expect(notify).toHaveBeenCalledTimes(1);
|
|
152
|
+
expect(notify.mock.calls[0][0].namespace).toBe("wb.page");
|
|
153
|
+
for (const handler of handlers)await handler.handle(changeMessage("cms.article"));
|
|
154
|
+
expect(notify).toHaveBeenCalledTimes(2);
|
|
155
|
+
expect(notify.mock.calls[1][0].namespace).toBe("cms.article");
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
//# sourceMappingURL=contentReviewsBindings.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/gateway/contentReviewsBindings.test.js","sources":["../../../src/features/gateway/contentReviewsBindings.test.ts"],"sourcesContent":["import { beforeEach } from \"vitest\";\nimport { describe } from \"vitest\";\nimport { expect } from \"vitest\";\nimport { it } from \"vitest\";\nimport { vi } from \"vitest\";\nimport { Container } from \"@webiny/di\";\nimport { WebsocketEvent } from \"@webiny/app-websockets/events/WebsocketEvent.js\";\nimport { WebsocketEventHandler } from \"@webiny/app-websockets/events/abstractions.js\";\nimport { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient/abstractions.js\";\nimport { CmsReviewContentAdapter } from \"@webiny/app-headless-cms-workflows/features/gateway/CmsReviewContentAdapter/abstractions.js\";\nimport { CmsReviewNotificationHandler } from \"@webiny/app-headless-cms-workflows/features/gateway/CmsReviewNotificationHandler.js\";\nimport { CmsReviewRowProvider as CmsRowProviderAbstraction } from \"@webiny/app-headless-cms-workflows/features/gateway/CmsReviewRowProvider/abstractions.js\";\nimport { CmsReviewRowProvider } from \"@webiny/app-headless-cms-workflows/features/gateway/CmsReviewRowProvider/CmsReviewRowProvider.js\";\nimport type { IReviewContentAdapter } from \"@webiny/app-workflows/review/content/IReviewContentAdapter.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 { WORKFLOWS_REVIEW_CHANGED_ACTION } from \"@webiny/app-workflows/review/domain/constants.js\";\nimport { CmsReviewChangeMessageHandler } from \"@webiny/app-headless-cms-workflows/features/gateway/CmsReviewChangeMessageHandler.js\";\nimport { WORKFLOWS_NOTIFICATION_ACTION } from \"@webiny/app-workflows/review/domain/constants.js\";\nimport { WbReviewFeature } from \"./feature.js\";\nimport { WbReviewRowProvider } from \"./WbReviewRowProvider/abstractions.js\";\n\nconst handle = vi.fn();\nconst notify = vi.fn();\n\n// The leaf dependency of Task 12's gateway (the fake its feature test registers) and the shared\n// service the handler reports to.\nconst createContainer = (): Container => {\n const container = new Container();\n container.registerInstance(MainGraphQLClient, { execute: vi.fn() });\n container.registerInstance(ReviewNotificationService, { handle });\n container.registerInstance(ReviewActivity, { subscribe: vi.fn(), notify });\n return container;\n};\n\nconst message = (namespace: string) => {\n return new WebsocketEvent({\n action: WORKFLOWS_NOTIFICATION_ACTION,\n data: {\n event: \"assigned\",\n reviewId: \"review-1\",\n stepId: \"step-1\",\n namespace,\n targetId: \"page-1\",\n targetRevisionId: \"page-1#0001\",\n title: \"Review assigned\",\n body: \"Maja Kos asked you to review Home\"\n }\n });\n};\n\nconst changeMessage = (namespace: string) => {\n return new WebsocketEvent({\n action: WORKFLOWS_REVIEW_CHANGED_ACTION,\n data: {\n kind: \"stepStarted\",\n reviewId: \"review-1\",\n stepId: \"step-1\",\n namespace,\n targetId: \"page-1\",\n targetRevisionId: \"page-1#0001\"\n }\n });\n};\n\ndescribe(\"WbReviewFeature Content Reviews registrations\", () => {\n beforeEach(() => {\n handle.mockReset();\n notify.mockReset();\n });\n\n it(\"registers a row provider that binds only the page namespace\", () => {\n const container = createContainer();\n WbReviewFeature.register(container);\n\n const provider = container.resolve(WbReviewRowProvider);\n\n expect(provider).toBeInstanceOf(AppReviewRowProvider);\n expect(provider.getBinding(\"wb.page\")).not.toBeNull();\n expect(provider.getBinding(\"cms.article\")).toBeNull();\n });\n\n it(\"hands out the same provider as the feature export\", () => {\n const container = createContainer();\n WbReviewFeature.register(container);\n\n const { rowProvider } = WbReviewFeature.resolve(container);\n\n expect(rowProvider).toBe(container.resolve(WbReviewRowProvider));\n });\n\n it(\"registers a notification handler that handles page messages and ignores cms messages (R223)\", async () => {\n const container = createContainer();\n WbReviewFeature.register(container);\n\n const handlers = container.resolveAll(WebsocketEventHandler);\n const own = handlers.filter(handler => handler instanceof ReviewNotificationHandler);\n expect(own).toHaveLength(1);\n\n await own[0].handle(message(\"wb.page\"));\n expect(handle).toHaveBeenCalledTimes(1);\n expect(handle.mock.calls[0][0].data.namespace).toBe(\"wb.page\");\n expect(handle.mock.calls[0][0].url).toContain(\"/website-builder/pages/editor/\");\n\n await own[0].handle(message(\"cms.article\"));\n expect(handle).toHaveBeenCalledTimes(1);\n });\n\n it(\"coexists with the CMS bindings in one container, each binding only its own namespace (R237)\", async () => {\n const container = createContainer();\n WbReviewFeature.register(container);\n const cmsAdapter: IReviewContentAdapter = {\n canHandle: namespace => namespace.startsWith(\"cms.\"),\n getContentUrl: () => \"/cms/content-entries/article?id=entry-1%230001\",\n getContentTypeLabel: () => null,\n renderContentTypeIcon: () => null\n };\n container.registerInstance(CmsReviewContentAdapter, cmsAdapter);\n container.register(CmsReviewRowProvider).inSingletonScope();\n container.register(CmsReviewNotificationHandler);\n\n const wbProvider = container.resolve(WbReviewRowProvider);\n const cmsProvider = container.resolve(CmsRowProviderAbstraction);\n\n expect(cmsProvider).not.toBe(wbProvider);\n expect(wbProvider.getBinding(\"wb.page\")).not.toBeNull();\n expect(wbProvider.getBinding(\"cms.article\")).toBeNull();\n expect(cmsProvider.getBinding(\"cms.article\")).not.toBeNull();\n expect(cmsProvider.getBinding(\"wb.page\")).toBeNull();\n\n const handlers = container\n .resolveAll(WebsocketEventHandler)\n .filter(handler => handler instanceof ReviewNotificationHandler);\n expect(handlers).toHaveLength(2);\n\n for (const handler of handlers) {\n await handler.handle(message(\"wb.page\"));\n }\n expect(handle).toHaveBeenCalledTimes(1);\n expect(handle.mock.calls[0][0].url).toContain(\"/website-builder/pages/editor/\");\n\n for (const handler of handlers) {\n await handler.handle(message(\"cms.article\"));\n }\n expect(handle).toHaveBeenCalledTimes(2);\n expect(handle.mock.calls[1][0].url).toBe(\"/cms/content-entries/article?id=entry-1%230001\");\n });\n\n it(\"registers a change message handler that signals page frames and ignores cms frames (R260)\", async () => {\n const container = createContainer();\n WbReviewFeature.register(container);\n\n const handlers = container.resolveAll(WebsocketEventHandler);\n const own = handlers.filter(handler => handler instanceof ReviewChangeMessageHandler);\n expect(own).toHaveLength(1);\n\n await own[0].handle(changeMessage(\"wb.page\"));\n expect(notify).toHaveBeenCalledTimes(1);\n expect(notify).toHaveBeenCalledWith({\n namespace: \"wb.page\",\n source: \"remote\",\n reviewId: \"review-1\",\n targetRevisionId: \"page-1#0001\"\n });\n\n await own[0].handle(changeMessage(\"cms.article\"));\n expect(notify).toHaveBeenCalledTimes(1);\n expect(handle).not.toHaveBeenCalled();\n });\n\n it(\"coexists with the CMS change message handler, each signalling only its own namespace (R237)\", async () => {\n const container = createContainer();\n WbReviewFeature.register(container);\n const cmsAdapter: IReviewContentAdapter = {\n canHandle: namespace => namespace.startsWith(\"cms.\"),\n getContentUrl: () => \"/cms/content-entries/article?id=entry-1%230001\",\n getContentTypeLabel: () => null,\n renderContentTypeIcon: () => null\n };\n container.registerInstance(CmsReviewContentAdapter, cmsAdapter);\n container.register(CmsReviewChangeMessageHandler);\n\n const handlers = container\n .resolveAll(WebsocketEventHandler)\n .filter(handler => handler instanceof ReviewChangeMessageHandler);\n expect(handlers).toHaveLength(2);\n\n for (const handler of handlers) {\n await handler.handle(changeMessage(\"wb.page\"));\n }\n expect(notify).toHaveBeenCalledTimes(1);\n expect(notify.mock.calls[0][0].namespace).toBe(\"wb.page\");\n\n for (const handler of handlers) {\n await handler.handle(changeMessage(\"cms.article\"));\n }\n expect(notify).toHaveBeenCalledTimes(2);\n expect(notify.mock.calls[1][0].namespace).toBe(\"cms.article\");\n });\n});\n"],"names":["handle","vi","notify","createContainer","container","Container","MainGraphQLClient","ReviewNotificationService","ReviewActivity","message","namespace","WebsocketEvent","WORKFLOWS_NOTIFICATION_ACTION","changeMessage","WORKFLOWS_REVIEW_CHANGED_ACTION","describe","beforeEach","it","WbReviewFeature","provider","WbReviewRowProvider","expect","AppReviewRowProvider","rowProvider","handlers","WebsocketEventHandler","own","handler","ReviewNotificationHandler","cmsAdapter","CmsReviewContentAdapter","CmsReviewRowProvider","CmsReviewNotificationHandler","wbProvider","cmsProvider","CmsRowProviderAbstraction","ReviewChangeMessageHandler","CmsReviewChangeMessageHandler"],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const WbReviewFeature: import("@webiny/feature/admin").FeatureDefinition<{
|
|
2
|
+
contentAdapter: import("@webiny/app-workflows/review/content/IReviewContentAdapter.js").IReviewContentAdapter;
|
|
3
|
+
rowProvider: import("@webiny/app-workflows/review/presentation/reviewList/abstractions.js").IReviewRowProvider;
|
|
4
|
+
}, []>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { createFeature } from "@webiny/feature/admin";
|
|
2
|
+
import { WbReviewContentAdapter } from "./WbReviewContentAdapter/abstractions.js";
|
|
3
|
+
import { WbReviewRowProvider } from "./WbReviewRowProvider/abstractions.js";
|
|
4
|
+
import { WbReviewContentAdapter as WbReviewContentAdapter_js_WbReviewContentAdapter } from "./WbReviewContentAdapter/WbReviewContentAdapter.js";
|
|
5
|
+
import { WbReviewGateway } from "./WbReviewGateway/WbReviewGateway.js";
|
|
6
|
+
import { WbReviewChangeMessageHandler } from "./WbReviewChangeMessageHandler.js";
|
|
7
|
+
import { WbReviewNotificationHandler } from "./WbReviewNotificationHandler.js";
|
|
8
|
+
import { WbReviewRowProvider as WbReviewRowProvider_js_WbReviewRowProvider } from "./WbReviewRowProvider/WbReviewRowProvider.js";
|
|
9
|
+
const WbReviewFeature = createFeature({
|
|
10
|
+
name: "WebsiteBuilderWorkflows/Review",
|
|
11
|
+
register (container) {
|
|
12
|
+
container.register(WbReviewGateway).inSingletonScope();
|
|
13
|
+
container.register(WbReviewContentAdapter_js_WbReviewContentAdapter).inSingletonScope();
|
|
14
|
+
container.register(WbReviewRowProvider_js_WbReviewRowProvider).inSingletonScope();
|
|
15
|
+
container.register(WbReviewNotificationHandler);
|
|
16
|
+
container.register(WbReviewChangeMessageHandler);
|
|
17
|
+
},
|
|
18
|
+
resolve (container) {
|
|
19
|
+
return {
|
|
20
|
+
contentAdapter: container.resolve(WbReviewContentAdapter),
|
|
21
|
+
rowProvider: container.resolve(WbReviewRowProvider)
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
export { WbReviewFeature };
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/gateway/feature.js","sources":["../../../src/features/gateway/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/admin\";\nimport { WbReviewContentAdapter as AdapterAbstraction } from \"./WbReviewContentAdapter/abstractions.js\";\nimport { WbReviewRowProvider as RowProviderAbstraction } from \"./WbReviewRowProvider/abstractions.js\";\nimport { WbReviewContentAdapter } from \"./WbReviewContentAdapter/WbReviewContentAdapter.js\";\nimport { WbReviewGateway } from \"./WbReviewGateway/WbReviewGateway.js\";\nimport { WbReviewChangeMessageHandler } from \"./WbReviewChangeMessageHandler.js\";\nimport { WbReviewNotificationHandler } from \"./WbReviewNotificationHandler.js\";\nimport { WbReviewRowProvider } from \"./WbReviewRowProvider/WbReviewRowProvider.js\";\n\n/*\n * The Website Builder review registrations: the review gateway under the shared\n * `ReviewAppGateway` token (R347), the content adapter, the Content Reviews row provider and the\n * two websocket handlers.\n */\nexport const WbReviewFeature = createFeature({\n name: \"WebsiteBuilderWorkflows/Review\",\n register(container) {\n container.register(WbReviewGateway).inSingletonScope();\n container.register(WbReviewContentAdapter).inSingletonScope();\n container.register(WbReviewRowProvider).inSingletonScope();\n container.register(WbReviewNotificationHandler);\n container.register(WbReviewChangeMessageHandler);\n },\n resolve(container) {\n return {\n contentAdapter: container.resolve(AdapterAbstraction),\n rowProvider: container.resolve(RowProviderAbstraction)\n };\n }\n});\n"],"names":["WbReviewFeature","createFeature","container","WbReviewGateway","WbReviewContentAdapter","WbReviewRowProvider","WbReviewNotificationHandler","WbReviewChangeMessageHandler","AdapterAbstraction","RowProviderAbstraction"],"mappings":";;;;;;;;AAcO,MAAMA,kBAAkBC,cAAc;IACzC,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC,iBAAiB,gBAAgB;QACpDD,UAAU,QAAQ,CAACE,kDAAwB,gBAAgB;QAC3DF,UAAU,QAAQ,CAACG,4CAAqB,gBAAgB;QACxDH,UAAU,QAAQ,CAACI;QACnBJ,UAAU,QAAQ,CAACK;IACvB;IACA,SAAQL,SAAS;QACb,OAAO;YACH,gBAAgBA,UAAU,OAAO,CAACM;YAClC,aAAaN,UAAU,OAAO,CAACO;QACnC;IACJ;AACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
|
+
import { Container } from "@webiny/di";
|
|
3
|
+
import { MainGraphQLClient } from "@webiny/app/features/mainGraphQLClient/abstractions.js";
|
|
4
|
+
import { ReviewAppGateway } from "@webiny/app-workflows/review/appGateway/abstractions.js";
|
|
5
|
+
import { CmsReviewGateway } from "@webiny/app-headless-cms-workflows/features/gateway/CmsReviewGateway/CmsReviewGateway.js";
|
|
6
|
+
import { WbReviewContentAdapter } from "./WbReviewContentAdapter/abstractions.js";
|
|
7
|
+
import { WbReviewRowProvider } from "./WbReviewRowProvider/abstractions.js";
|
|
8
|
+
import { WbReviewGateway } from "./WbReviewGateway/WbReviewGateway.js";
|
|
9
|
+
import { WbReviewFeature } from "./feature.js";
|
|
10
|
+
describe("WbReviewFeature", ()=>{
|
|
11
|
+
const client = {
|
|
12
|
+
execute: vi.fn()
|
|
13
|
+
};
|
|
14
|
+
let container;
|
|
15
|
+
beforeEach(()=>{
|
|
16
|
+
client.execute.mockReset();
|
|
17
|
+
container = new Container();
|
|
18
|
+
container.registerInstance(MainGraphQLClient, client);
|
|
19
|
+
WbReviewFeature.register(container);
|
|
20
|
+
});
|
|
21
|
+
it("resolves the content adapter and the row provider and nothing else (R354)", ()=>{
|
|
22
|
+
const resolved = WbReviewFeature.resolve(container);
|
|
23
|
+
const keys = Object.keys(resolved).sort();
|
|
24
|
+
expect(keys).toEqual([
|
|
25
|
+
"contentAdapter",
|
|
26
|
+
"rowProvider"
|
|
27
|
+
]);
|
|
28
|
+
expect(resolved.contentAdapter).toBe(container.resolve(WbReviewContentAdapter));
|
|
29
|
+
expect(resolved.rowProvider).toBe(container.resolve(WbReviewRowProvider));
|
|
30
|
+
});
|
|
31
|
+
it("binds WbReviewGateway itself to the shared review app token, once (R347, R358)", ()=>{
|
|
32
|
+
const gateways = container.resolveAll(ReviewAppGateway);
|
|
33
|
+
expect(gateways).toHaveLength(1);
|
|
34
|
+
expect(Object.getPrototypeOf(gateways[0])).toBe(WbReviewGateway.prototype);
|
|
35
|
+
expect(gateways[0].app).toBe("wb");
|
|
36
|
+
});
|
|
37
|
+
it("registers the gateway and the adapter as singletons", ()=>{
|
|
38
|
+
const [firstGateway] = container.resolveAll(ReviewAppGateway);
|
|
39
|
+
const [secondGateway] = container.resolveAll(ReviewAppGateway);
|
|
40
|
+
const firstAdapter = container.resolve(WbReviewContentAdapter);
|
|
41
|
+
const secondAdapter = container.resolve(WbReviewContentAdapter);
|
|
42
|
+
expect(firstGateway).toBe(secondGateway);
|
|
43
|
+
expect(firstAdapter).toBe(secondAdapter);
|
|
44
|
+
});
|
|
45
|
+
it("claims the page namespace only", ()=>{
|
|
46
|
+
const [gateway] = container.resolveAll(ReviewAppGateway);
|
|
47
|
+
expect(gateway.canHandle("wb.page")).toBe(true);
|
|
48
|
+
expect(gateway.canHandle("cms.article")).toBe(false);
|
|
49
|
+
});
|
|
50
|
+
it("keeps both apps' gateways under the shared token in one container (A83, A114)", ()=>{
|
|
51
|
+
container.register(CmsReviewGateway).inSingletonScope();
|
|
52
|
+
const gateways = container.resolveAll(ReviewAppGateway);
|
|
53
|
+
const apps = gateways.map((gateway)=>gateway.app);
|
|
54
|
+
expect(apps).toEqual([
|
|
55
|
+
"wb",
|
|
56
|
+
"cms"
|
|
57
|
+
]);
|
|
58
|
+
expect(gateways[0]).not.toBe(gateways[1]);
|
|
59
|
+
});
|
|
60
|
+
it("sends the WB document and resolves with the envelope (R204)", async ()=>{
|
|
61
|
+
client.execute.mockResolvedValue({
|
|
62
|
+
websiteBuilder: {
|
|
63
|
+
getWebsiteBuilderPageTargetReview: {
|
|
64
|
+
data: null,
|
|
65
|
+
error: null
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
const [gateway] = container.resolveAll(ReviewAppGateway);
|
|
70
|
+
const envelope = await gateway.getTargetReview({
|
|
71
|
+
namespace: "wb.page",
|
|
72
|
+
targetRevisionId: "page-1#0001"
|
|
73
|
+
});
|
|
74
|
+
expect(envelope).toEqual({
|
|
75
|
+
data: null,
|
|
76
|
+
error: null
|
|
77
|
+
});
|
|
78
|
+
expect(client.execute).toHaveBeenCalledTimes(1);
|
|
79
|
+
expect(client.execute.mock.calls[0][0].variables).toEqual({
|
|
80
|
+
revisionId: "page-1#0001"
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
//# sourceMappingURL=feature.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/gateway/feature.test.js","sources":["../../../src/features/gateway/feature.test.ts"],"sourcesContent":["import { beforeEach } from \"vitest\";\nimport { describe } from \"vitest\";\nimport { expect } from \"vitest\";\nimport { it } from \"vitest\";\nimport { vi } from \"vitest\";\nimport { Container } from \"@webiny/di\";\nimport { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient/abstractions.js\";\nimport { ReviewAppGateway } from \"@webiny/app-workflows/review/appGateway/abstractions.js\";\nimport { CmsReviewGateway } from \"@webiny/app-headless-cms-workflows/features/gateway/CmsReviewGateway/CmsReviewGateway.js\";\nimport { WbReviewContentAdapter } from \"./WbReviewContentAdapter/abstractions.js\";\nimport { WbReviewRowProvider } from \"./WbReviewRowProvider/abstractions.js\";\nimport { WbReviewGateway } from \"./WbReviewGateway/WbReviewGateway.js\";\nimport { WbReviewFeature } from \"./feature.js\";\n\ndescribe(\"WbReviewFeature\", () => {\n const client = { execute: vi.fn() };\n let container: Container;\n\n beforeEach(() => {\n client.execute.mockReset();\n\n container = new Container();\n container.registerInstance(MainGraphQLClient, client);\n WbReviewFeature.register(container);\n });\n\n it(\"resolves the content adapter and the row provider and nothing else (R354)\", () => {\n const resolved = WbReviewFeature.resolve(container);\n const keys = Object.keys(resolved).sort();\n\n expect(keys).toEqual([\"contentAdapter\", \"rowProvider\"]);\n expect(resolved.contentAdapter).toBe(container.resolve(WbReviewContentAdapter));\n expect(resolved.rowProvider).toBe(container.resolve(WbReviewRowProvider));\n });\n\n it(\"binds WbReviewGateway itself to the shared review app token, once (R347, R358)\", () => {\n const gateways = container.resolveAll(ReviewAppGateway);\n\n expect(gateways).toHaveLength(1);\n expect(Object.getPrototypeOf(gateways[0])).toBe(WbReviewGateway.prototype);\n expect(gateways[0].app).toBe(\"wb\");\n });\n\n it(\"registers the gateway and the adapter as singletons\", () => {\n const [firstGateway] = container.resolveAll(ReviewAppGateway);\n const [secondGateway] = container.resolveAll(ReviewAppGateway);\n const firstAdapter = container.resolve(WbReviewContentAdapter);\n const secondAdapter = container.resolve(WbReviewContentAdapter);\n\n expect(firstGateway).toBe(secondGateway);\n expect(firstAdapter).toBe(secondAdapter);\n });\n\n it(\"claims the page namespace only\", () => {\n const [gateway] = container.resolveAll(ReviewAppGateway);\n\n expect(gateway.canHandle(\"wb.page\")).toBe(true);\n expect(gateway.canHandle(\"cms.article\")).toBe(false);\n });\n\n it(\"keeps both apps' gateways under the shared token in one container (A83, A114)\", () => {\n container.register(CmsReviewGateway).inSingletonScope();\n\n const gateways = container.resolveAll(ReviewAppGateway);\n const apps = gateways.map(gateway => gateway.app);\n\n expect(apps).toEqual([\"wb\", \"cms\"]);\n expect(gateways[0]).not.toBe(gateways[1]);\n });\n\n it(\"sends the WB document and resolves with the envelope (R204)\", async () => {\n client.execute.mockResolvedValue({\n websiteBuilder: { getWebsiteBuilderPageTargetReview: { data: null, error: null } }\n });\n const [gateway] = container.resolveAll(ReviewAppGateway);\n\n const envelope = await gateway.getTargetReview({\n namespace: \"wb.page\",\n targetRevisionId: \"page-1#0001\"\n });\n\n expect(envelope).toEqual({ data: null, error: null });\n expect(client.execute).toHaveBeenCalledTimes(1);\n expect(client.execute.mock.calls[0][0].variables).toEqual({ revisionId: \"page-1#0001\" });\n });\n});\n"],"names":["describe","client","vi","container","beforeEach","Container","MainGraphQLClient","WbReviewFeature","it","resolved","keys","Object","expect","WbReviewContentAdapter","WbReviewRowProvider","gateways","ReviewAppGateway","WbReviewGateway","firstGateway","secondGateway","firstAdapter","secondAdapter","gateway","CmsReviewGateway","apps","envelope"],"mappings":";;;;;;;;;AAcAA,SAAS,mBAAmB;IACxB,MAAMC,SAAS;QAAE,SAASC,GAAG,EAAE;IAAG;IAClC,IAAIC;IAEJC,WAAW;QACPH,OAAO,OAAO,CAAC,SAAS;QAExBE,YAAY,IAAIE;QAChBF,UAAU,gBAAgB,CAACG,mBAAmBL;QAC9CM,gBAAgB,QAAQ,CAACJ;IAC7B;IAEAK,GAAG,6EAA6E;QAC5E,MAAMC,WAAWF,gBAAgB,OAAO,CAACJ;QACzC,MAAMO,OAAOC,OAAO,IAAI,CAACF,UAAU,IAAI;QAEvCG,OAAOF,MAAM,OAAO,CAAC;YAAC;YAAkB;SAAc;QACtDE,OAAOH,SAAS,cAAc,EAAE,IAAI,CAACN,UAAU,OAAO,CAACU;QACvDD,OAAOH,SAAS,WAAW,EAAE,IAAI,CAACN,UAAU,OAAO,CAACW;IACxD;IAEAN,GAAG,kFAAkF;QACjF,MAAMO,WAAWZ,UAAU,UAAU,CAACa;QAEtCJ,OAAOG,UAAU,YAAY,CAAC;QAC9BH,OAAOD,OAAO,cAAc,CAACI,QAAQ,CAAC,EAAE,GAAG,IAAI,CAACE,gBAAgB,SAAS;QACzEL,OAAOG,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC;IACjC;IAEAP,GAAG,uDAAuD;QACtD,MAAM,CAACU,aAAa,GAAGf,UAAU,UAAU,CAACa;QAC5C,MAAM,CAACG,cAAc,GAAGhB,UAAU,UAAU,CAACa;QAC7C,MAAMI,eAAejB,UAAU,OAAO,CAACU;QACvC,MAAMQ,gBAAgBlB,UAAU,OAAO,CAACU;QAExCD,OAAOM,cAAc,IAAI,CAACC;QAC1BP,OAAOQ,cAAc,IAAI,CAACC;IAC9B;IAEAb,GAAG,kCAAkC;QACjC,MAAM,CAACc,QAAQ,GAAGnB,UAAU,UAAU,CAACa;QAEvCJ,OAAOU,QAAQ,SAAS,CAAC,YAAY,IAAI,CAAC;QAC1CV,OAAOU,QAAQ,SAAS,CAAC,gBAAgB,IAAI,CAAC;IAClD;IAEAd,GAAG,iFAAiF;QAChFL,UAAU,QAAQ,CAACoB,kBAAkB,gBAAgB;QAErD,MAAMR,WAAWZ,UAAU,UAAU,CAACa;QACtC,MAAMQ,OAAOT,SAAS,GAAG,CAACO,CAAAA,UAAWA,QAAQ,GAAG;QAEhDV,OAAOY,MAAM,OAAO,CAAC;YAAC;YAAM;SAAM;QAClCZ,OAAOG,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,CAACA,QAAQ,CAAC,EAAE;IAC5C;IAEAP,GAAG,+DAA+D;QAC9DP,OAAO,OAAO,CAAC,iBAAiB,CAAC;YAC7B,gBAAgB;gBAAE,mCAAmC;oBAAE,MAAM;oBAAM,OAAO;gBAAK;YAAE;QACrF;QACA,MAAM,CAACqB,QAAQ,GAAGnB,UAAU,UAAU,CAACa;QAEvC,MAAMS,WAAW,MAAMH,QAAQ,eAAe,CAAC;YAC3C,WAAW;YACX,kBAAkB;QACtB;QAEAV,OAAOa,UAAU,OAAO,CAAC;YAAE,MAAM;YAAM,OAAO;QAAK;QACnDb,OAAOX,OAAO,OAAO,EAAE,qBAAqB,CAAC;QAC7CW,OAAOX,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC;YAAE,YAAY;QAAc;IAC1F;AACJ"}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const APPROVE_WEBSITE_BUILDER_PAGE_REVIEW_STEP = "\n mutation ApproveWebsiteBuilderPageReviewStep($reviewId: ID!, $stepId: ID!, $comment: String) {\n websiteBuilder {\n approveWebsiteBuilderPageReviewStep(\n reviewId: $reviewId\n stepId: $stepId\n comment: $comment\n ) {\n data {\n \n id\n workflowId\n model\n targetId\n targetRevisionId\n title\n isActive\n state\n currentStepId\n currentStepState\n currentStepType\n currentOwnerId\n currentCandidateTeamIds\n targetContext {\n folder {\n id\n type\n }\n modelId\n title\n author {\n id\n displayName\n }\n }\n workflow {\n name\n models\n }\n steps {\n id\n title\n color\n description\n type\n state\n owner {\n \n type\n id\n displayName\n identityType\n\n }\n comment\n pickedUserId\n candidateTeamIds\n candidateTeams {\n id\n name\n }\n assignmentSource\n assignment {\n source\n ruleId\n reason\n by {\n \n type\n id\n displayName\n identityType\n\n }\n }\n reachedOn\n startedOn\n finishedOn\n taskId\n runs {\n taskId\n startedOn\n finishedOn\n outcome\n reason\n }\n issues {\n fieldPath\n severity\n message\n suggestion\n }\n }\n createdBy {\n \n type\n id\n displayName\n identityType\n\n }\n cancelledBy {\n \n type\n id\n displayName\n identityType\n\n }\n createdOn\n savedOn\n lastChangedOn\n\n }\n error {\n \n code\n message\n data\n\n }\n }\n }\n }\n";
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ERROR_FIELDS, REVIEW_FIELDS } from "@webiny/app-workflows/review/gateway/reviewFields.js";
|
|
2
|
+
const APPROVE_WEBSITE_BUILDER_PAGE_REVIEW_STEP = `
|
|
3
|
+
mutation ApproveWebsiteBuilderPageReviewStep($reviewId: ID!, $stepId: ID!, $comment: String) {
|
|
4
|
+
websiteBuilder {
|
|
5
|
+
approveWebsiteBuilderPageReviewStep(
|
|
6
|
+
reviewId: $reviewId
|
|
7
|
+
stepId: $stepId
|
|
8
|
+
comment: $comment
|
|
9
|
+
) {
|
|
10
|
+
data {
|
|
11
|
+
${REVIEW_FIELDS}
|
|
12
|
+
}
|
|
13
|
+
error {
|
|
14
|
+
${ERROR_FIELDS}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
`;
|
|
20
|
+
export { APPROVE_WEBSITE_BUILDER_PAGE_REVIEW_STEP };
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=approveWebsiteBuilderPageReviewStep.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/gateway/graphql/approveWebsiteBuilderPageReviewStep.js","sources":["../../../../src/features/gateway/graphql/approveWebsiteBuilderPageReviewStep.ts"],"sourcesContent":["import { ERROR_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { REVIEW_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\n\nexport const APPROVE_WEBSITE_BUILDER_PAGE_REVIEW_STEP = /* GraphQL */ `\n mutation ApproveWebsiteBuilderPageReviewStep($reviewId: ID!, $stepId: ID!, $comment: String) {\n websiteBuilder {\n approveWebsiteBuilderPageReviewStep(\n reviewId: $reviewId\n stepId: $stepId\n comment: $comment\n ) {\n data {\n ${REVIEW_FIELDS}\n }\n error {\n ${ERROR_FIELDS}\n }\n }\n }\n }\n`;\n"],"names":["APPROVE_WEBSITE_BUILDER_PAGE_REVIEW_STEP","REVIEW_FIELDS","ERROR_FIELDS"],"mappings":";AAGO,MAAMA,2CAAyD,CAAC;;;;;;;;;oBASnD,EAAEC,cAAc;;;oBAGhB,EAAEC,aAAa;;;;;AAKnC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const CANCEL_WEBSITE_BUILDER_PAGE_REVIEW = "\n mutation CancelWebsiteBuilderPageReview($reviewId: ID!) {\n websiteBuilder {\n cancelWebsiteBuilderPageReview(reviewId: $reviewId) {\n data {\n \n id\n workflowId\n model\n targetId\n targetRevisionId\n title\n isActive\n state\n currentStepId\n currentStepState\n currentStepType\n currentOwnerId\n currentCandidateTeamIds\n targetContext {\n folder {\n id\n type\n }\n modelId\n title\n author {\n id\n displayName\n }\n }\n workflow {\n name\n models\n }\n steps {\n id\n title\n color\n description\n type\n state\n owner {\n \n type\n id\n displayName\n identityType\n\n }\n comment\n pickedUserId\n candidateTeamIds\n candidateTeams {\n id\n name\n }\n assignmentSource\n assignment {\n source\n ruleId\n reason\n by {\n \n type\n id\n displayName\n identityType\n\n }\n }\n reachedOn\n startedOn\n finishedOn\n taskId\n runs {\n taskId\n startedOn\n finishedOn\n outcome\n reason\n }\n issues {\n fieldPath\n severity\n message\n suggestion\n }\n }\n createdBy {\n \n type\n id\n displayName\n identityType\n\n }\n cancelledBy {\n \n type\n id\n displayName\n identityType\n\n }\n createdOn\n savedOn\n lastChangedOn\n\n }\n error {\n \n code\n message\n data\n\n }\n }\n }\n }\n";
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ERROR_FIELDS, REVIEW_FIELDS } from "@webiny/app-workflows/review/gateway/reviewFields.js";
|
|
2
|
+
const CANCEL_WEBSITE_BUILDER_PAGE_REVIEW = `
|
|
3
|
+
mutation CancelWebsiteBuilderPageReview($reviewId: ID!) {
|
|
4
|
+
websiteBuilder {
|
|
5
|
+
cancelWebsiteBuilderPageReview(reviewId: $reviewId) {
|
|
6
|
+
data {
|
|
7
|
+
${REVIEW_FIELDS}
|
|
8
|
+
}
|
|
9
|
+
error {
|
|
10
|
+
${ERROR_FIELDS}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
`;
|
|
16
|
+
export { CANCEL_WEBSITE_BUILDER_PAGE_REVIEW };
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=cancelWebsiteBuilderPageReview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/gateway/graphql/cancelWebsiteBuilderPageReview.js","sources":["../../../../src/features/gateway/graphql/cancelWebsiteBuilderPageReview.ts"],"sourcesContent":["import { ERROR_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\nimport { REVIEW_FIELDS } from \"@webiny/app-workflows/review/gateway/reviewFields.js\";\n\nexport const CANCEL_WEBSITE_BUILDER_PAGE_REVIEW = /* GraphQL */ `\n mutation CancelWebsiteBuilderPageReview($reviewId: ID!) {\n websiteBuilder {\n cancelWebsiteBuilderPageReview(reviewId: $reviewId) {\n data {\n ${REVIEW_FIELDS}\n }\n error {\n ${ERROR_FIELDS}\n }\n }\n }\n }\n`;\n"],"names":["CANCEL_WEBSITE_BUILDER_PAGE_REVIEW","REVIEW_FIELDS","ERROR_FIELDS"],"mappings":";AAGO,MAAMA,qCAAmD,CAAC;;;;;oBAK7C,EAAEC,cAAc;;;oBAGhB,EAAEC,aAAa;;;;;AAKnC,CAAC"}
|