@webiny/app-headless-cms-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/CmsEntriesList/CmsReviewMoveEntryAction.d.ts +2 -0
- package/Components/CmsEntriesList/CmsReviewMoveEntryAction.js +43 -0
- package/Components/CmsEntriesList/CmsReviewMoveEntryAction.js.map +1 -0
- package/Components/CmsEntriesList/CmsReviewMoveEntryAction.test.d.ts +1 -0
- package/Components/CmsEntriesList/CmsReviewMoveEntryAction.test.js +118 -0
- package/Components/CmsEntriesList/CmsReviewMoveEntryAction.test.js.map +1 -0
- package/Components/CmsEntriesList/CmsReviewScheduleEntryAction.d.ts +2 -0
- package/Components/CmsEntriesList/CmsReviewScheduleEntryAction.js +22 -0
- package/Components/CmsEntriesList/CmsReviewScheduleEntryAction.js.map +1 -0
- package/Components/CmsEntriesList/CmsReviewScheduleEntryAction.test.d.ts +1 -0
- package/Components/CmsEntriesList/CmsReviewScheduleEntryAction.test.js +98 -0
- package/Components/CmsEntriesList/CmsReviewScheduleEntryAction.test.js.map +1 -0
- package/Components/ContentEntryForm/CmsEntryReviewBar.d.ts +2 -0
- package/Components/ContentEntryForm/CmsEntryReviewBar.js +32 -0
- package/Components/ContentEntryForm/CmsEntryReviewBar.js.map +1 -0
- package/Components/ContentEntryForm/CmsEntryReviewBar.test.d.ts +1 -0
- package/Components/ContentEntryForm/CmsEntryReviewBar.test.js +128 -0
- package/Components/ContentEntryForm/CmsEntryReviewBar.test.js.map +1 -0
- package/Components/ContentEntryForm/CmsEntryReviewBlockedActions.d.ts +2 -0
- package/Components/ContentEntryForm/CmsEntryReviewBlockedActions.js +46 -0
- package/Components/ContentEntryForm/CmsEntryReviewBlockedActions.js.map +1 -0
- package/Components/ContentEntryForm/CmsEntryReviewBlockedActions.test.d.ts +1 -0
- package/Components/ContentEntryForm/CmsEntryReviewBlockedActions.test.js +222 -0
- package/Components/ContentEntryForm/CmsEntryReviewBlockedActions.test.js.map +1 -0
- package/Components/ContentEntryForm/CmsEntryReviewFormLock.d.ts +2 -0
- package/Components/ContentEntryForm/CmsEntryReviewFormLock.js +32 -0
- package/Components/ContentEntryForm/CmsEntryReviewFormLock.js.map +1 -0
- package/Components/ContentEntryForm/CmsEntryReviewFormLock.test.d.ts +1 -0
- package/Components/ContentEntryForm/CmsEntryReviewFormLock.test.js +94 -0
- package/Components/ContentEntryForm/CmsEntryReviewFormLock.test.js.map +1 -0
- package/Components/ContentEntryForm/CmsEntryReviewNewRevision.d.ts +2 -0
- package/Components/ContentEntryForm/CmsEntryReviewNewRevision.js +56 -0
- package/Components/ContentEntryForm/CmsEntryReviewNewRevision.js.map +1 -0
- package/Components/ContentEntryForm/CmsEntryReviewNewRevision.test.d.ts +1 -0
- package/Components/ContentEntryForm/CmsEntryReviewNewRevision.test.js +186 -0
- package/Components/ContentEntryForm/CmsEntryReviewNewRevision.test.js.map +1 -0
- package/Components/ContentEntryForm/CmsEntryReviewScheduleMenuItem.d.ts +2 -0
- package/Components/ContentEntryForm/CmsEntryReviewScheduleMenuItem.js +26 -0
- package/Components/ContentEntryForm/CmsEntryReviewScheduleMenuItem.js.map +1 -0
- package/Components/ContentEntryForm/CmsEntryReviewScheduleMenuItem.test.d.ts +1 -0
- package/Components/ContentEntryForm/CmsEntryReviewScheduleMenuItem.test.js +78 -0
- package/Components/ContentEntryForm/CmsEntryReviewScheduleMenuItem.test.js.map +1 -0
- package/Components/ContentEntryForm/getModelFieldLabels.d.ts +3 -0
- package/Components/ContentEntryForm/getModelFieldLabels.js +8 -0
- package/Components/ContentEntryForm/getModelFieldLabels.js.map +1 -0
- package/Components/ContentEntryForm/index.d.ts +5 -0
- package/Components/ContentEntryForm/index.js +5 -0
- package/Components/ContentReviews/CmsContentReviews.d.ts +2 -0
- package/Components/ContentReviews/CmsContentReviews.js +11 -0
- package/Components/ContentReviews/CmsContentReviews.js.map +1 -0
- package/Components/ContentReviews/CmsContentReviews.test.d.ts +1 -0
- package/Components/ContentReviews/CmsContentReviews.test.js +214 -0
- package/Components/ContentReviews/CmsContentReviews.test.js.map +1 -0
- package/Components/ContentReviews/CmsContentReviewsMount.d.ts +4 -0
- package/Components/ContentReviews/CmsContentReviewsMount.js +44 -0
- package/Components/ContentReviews/CmsContentReviewsMount.js.map +1 -0
- package/Components/ContentReviews/CmsContentReviewsSidebarItem.d.ts +2 -0
- package/Components/ContentReviews/CmsContentReviewsSidebarItem.js +20 -0
- package/Components/ContentReviews/CmsContentReviewsSidebarItem.js.map +1 -0
- package/Components/ContentReviews/CmsContentReviewsSidebarItem.test.d.ts +1 -0
- package/Components/ContentReviews/CmsContentReviewsSidebarItem.test.js +83 -0
- package/Components/ContentReviews/CmsContentReviewsSidebarItem.test.js.map +1 -0
- package/Components/ModelDelete/ModelBoundToWorkflowErrorData.d.ts +8 -0
- package/Components/ModelDelete/ModelBoundToWorkflowErrorData.js +0 -0
- package/Components/ModelDelete/ModelDeleteWorkflowCopy.d.ts +10 -0
- package/Components/ModelDelete/ModelDeleteWorkflowCopy.js +0 -0
- package/Components/ModelDelete/ModelDeleteWorkflowError.d.ts +2 -0
- package/Components/ModelDelete/ModelDeleteWorkflowError.js +34 -0
- package/Components/ModelDelete/ModelDeleteWorkflowError.js.map +1 -0
- package/Components/ModelDelete/ModelDeleteWorkflowError.test.d.ts +1 -0
- package/Components/ModelDelete/ModelDeleteWorkflowError.test.js +73 -0
- package/Components/ModelDelete/ModelDeleteWorkflowError.test.js.map +1 -0
- package/Components/ModelDelete/getModelDeleteWorkflowCopy.d.ts +3 -0
- package/Components/ModelDelete/getModelDeleteWorkflowCopy.js +17 -0
- package/Components/ModelDelete/getModelDeleteWorkflowCopy.js.map +1 -0
- package/Components/ModelDelete/getModelDeleteWorkflowCopy.test.d.ts +1 -0
- package/Components/ModelDelete/getModelDeleteWorkflowCopy.test.js +28 -0
- package/Components/ModelDelete/getModelDeleteWorkflowCopy.test.js.map +1 -0
- package/Components/ignoreAction.d.ts +1 -0
- package/Components/ignoreAction.js +4 -0
- package/Components/ignoreAction.js.map +1 -0
- package/LICENSE +21 -0
- package/README.md +11 -0
- package/Routes/CmsWorkflowEditor.d.ts +2 -0
- package/Routes/CmsWorkflowEditor.js +23 -0
- package/Routes/CmsWorkflowEditor.js.map +1 -0
- package/Routes/CmsWorkflowEditor.test.d.ts +1 -0
- package/Routes/CmsWorkflowEditor.test.js +141 -0
- package/Routes/CmsWorkflowEditor.test.js.map +1 -0
- package/Routes/index.d.ts +1 -0
- package/Routes/index.js +1 -0
- package/features/cache/CmsReviewCacheSyncHandler.d.ts +8 -0
- package/features/cache/CmsReviewCacheSyncHandler.js +14 -0
- package/features/cache/CmsReviewCacheSyncHandler.js.map +1 -0
- package/features/cache/CmsReviewCacheWriter.d.ts +14 -0
- package/features/cache/CmsReviewCacheWriter.js +39 -0
- package/features/cache/CmsReviewCacheWriter.js.map +1 -0
- package/features/cache/CmsReviewCacheWriter.test.d.ts +1 -0
- package/features/cache/CmsReviewCacheWriter.test.js +207 -0
- package/features/cache/CmsReviewCacheWriter.test.js.map +1 -0
- package/features/cache/CmsReviewEntriesCacheProviderDecorator.d.ts +12 -0
- package/features/cache/CmsReviewEntriesCacheProviderDecorator.js +17 -0
- package/features/cache/CmsReviewEntriesCacheProviderDecorator.js.map +1 -0
- package/features/cache/CmsReviewEntriesCacheProviderDecorator.test.d.ts +1 -0
- package/features/cache/CmsReviewEntriesCacheProviderDecorator.test.js +129 -0
- package/features/cache/CmsReviewEntriesCacheProviderDecorator.test.js.map +1 -0
- package/features/cache/ReviewPreservingEntriesCache.d.ts +18 -0
- package/features/cache/ReviewPreservingEntriesCache.js +54 -0
- package/features/cache/ReviewPreservingEntriesCache.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/editorGateway/CmsWorkflowEditorGateway/CmsWorkflowEditorGateway.d.ts +26 -0
- package/features/editorGateway/CmsWorkflowEditorGateway/CmsWorkflowEditorGateway.js +104 -0
- package/features/editorGateway/CmsWorkflowEditorGateway/CmsWorkflowEditorGateway.js.map +1 -0
- package/features/editorGateway/CmsWorkflowEditorGateway/CmsWorkflowEditorGateway.test.d.ts +1 -0
- package/features/editorGateway/CmsWorkflowEditorGateway/CmsWorkflowEditorGateway.test.js +589 -0
- package/features/editorGateway/CmsWorkflowEditorGateway/CmsWorkflowEditorGateway.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 +272 -0
- package/features/editorGateway/feature.test.js.map +1 -0
- package/features/editorGateway/graphql/cmsEntryFolderExists.d.ts +1 -0
- package/features/editorGateway/graphql/cmsEntryFolderExists.js +16 -0
- package/features/editorGateway/graphql/cmsEntryFolderExists.js.map +1 -0
- package/features/editorGateway/graphql/deleteCmsEntryWorkflow.d.ts +1 -0
- package/features/editorGateway/graphql/deleteCmsEntryWorkflow.js +19 -0
- package/features/editorGateway/graphql/deleteCmsEntryWorkflow.js.map +1 -0
- package/features/editorGateway/graphql/getCmsEntryWorkflow.d.ts +1 -0
- package/features/editorGateway/graphql/getCmsEntryWorkflow.js +19 -0
- package/features/editorGateway/graphql/getCmsEntryWorkflow.js.map +1 -0
- package/features/editorGateway/graphql/inspectCmsEntryRouting.d.ts +1 -0
- package/features/editorGateway/graphql/inspectCmsEntryRouting.js +19 -0
- package/features/editorGateway/graphql/inspectCmsEntryRouting.js.map +1 -0
- package/features/editorGateway/graphql/listCmsEntryWorkflowModels.d.ts +1 -0
- package/features/editorGateway/graphql/listCmsEntryWorkflowModels.js +29 -0
- package/features/editorGateway/graphql/listCmsEntryWorkflowModels.js.map +1 -0
- package/features/editorGateway/graphql/storeCmsEntryWorkflow.d.ts +1 -0
- package/features/editorGateway/graphql/storeCmsEntryWorkflow.js +19 -0
- package/features/editorGateway/graphql/storeCmsEntryWorkflow.js.map +1 -0
- package/features/editorMounting/CmsWorkflowEditorAppAdapter.d.ts +25 -0
- package/features/editorMounting/CmsWorkflowEditorAppAdapter.js +51 -0
- package/features/editorMounting/CmsWorkflowEditorAppAdapter.js.map +1 -0
- package/features/editorMounting/CmsWorkflowEditorAppAdapter.test.d.ts +1 -0
- package/features/editorMounting/CmsWorkflowEditorAppAdapter.test.js +185 -0
- package/features/editorMounting/CmsWorkflowEditorAppAdapter.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 +100 -0
- package/features/editorMounting/feature.test.js.map +1 -0
- package/features/editorReview/CmsEntryReview.d.ts +8 -0
- package/features/editorReview/CmsEntryReview.js +14 -0
- package/features/editorReview/CmsEntryReview.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/editorReview/feature.test.d.ts +1 -0
- package/features/editorReview/feature.test.js +46 -0
- package/features/editorReview/feature.test.js.map +1 -0
- package/features/editorReview/useCmsEntryReview.d.ts +2 -0
- package/features/editorReview/useCmsEntryReview.js +8 -0
- package/features/editorReview/useCmsEntryReview.js.map +1 -0
- package/features/feature.d.ts +1 -0
- package/features/feature.js +15 -0
- package/features/feature.js.map +1 -0
- package/features/gateway/CmsReviewChangeMessageHandler.d.ts +8 -0
- package/features/gateway/CmsReviewChangeMessageHandler.js +16 -0
- package/features/gateway/CmsReviewChangeMessageHandler.js.map +1 -0
- package/features/gateway/CmsReviewContentAdapter/CmsReviewContentAdapter.d.ts +16 -0
- package/features/gateway/CmsReviewContentAdapter/CmsReviewContentAdapter.js +39 -0
- package/features/gateway/CmsReviewContentAdapter/CmsReviewContentAdapter.js.map +1 -0
- package/features/gateway/CmsReviewContentAdapter/CmsReviewContentAdapter.test.d.ts +1 -0
- package/features/gateway/CmsReviewContentAdapter/CmsReviewContentAdapter.test.js +83 -0
- package/features/gateway/CmsReviewContentAdapter/CmsReviewContentAdapter.test.js.map +1 -0
- package/features/gateway/CmsReviewContentAdapter/abstractions.d.ts +5 -0
- package/features/gateway/CmsReviewContentAdapter/abstractions.js +5 -0
- package/features/gateway/CmsReviewContentAdapter/abstractions.js.map +1 -0
- package/features/gateway/CmsReviewGateway/CmsReviewGateway.d.ts +52 -0
- package/features/gateway/CmsReviewGateway/CmsReviewGateway.js +221 -0
- package/features/gateway/CmsReviewGateway/CmsReviewGateway.js.map +1 -0
- package/features/gateway/CmsReviewGateway/CmsReviewGateway.test.d.ts +1 -0
- package/features/gateway/CmsReviewGateway/CmsReviewGateway.test.js +689 -0
- package/features/gateway/CmsReviewGateway/CmsReviewGateway.test.js.map +1 -0
- package/features/gateway/CmsReviewNotificationHandler.d.ts +8 -0
- package/features/gateway/CmsReviewNotificationHandler.js +16 -0
- package/features/gateway/CmsReviewNotificationHandler.js.map +1 -0
- package/features/gateway/CmsReviewRowProvider/CmsReviewRowProvider.d.ts +8 -0
- package/features/gateway/CmsReviewRowProvider/CmsReviewRowProvider.js +14 -0
- package/features/gateway/CmsReviewRowProvider/CmsReviewRowProvider.js.map +1 -0
- package/features/gateway/CmsReviewRowProvider/abstractions.d.ts +5 -0
- package/features/gateway/CmsReviewRowProvider/abstractions.js +5 -0
- package/features/gateway/CmsReviewRowProvider/abstractions.js.map +1 -0
- package/features/gateway/contentReviewsBindings.test.d.ts +1 -0
- package/features/gateway/contentReviewsBindings.test.js +125 -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 +79 -0
- package/features/gateway/feature.test.js.map +1 -0
- package/features/gateway/graphql/CmsOperationResponse.d.ts +3 -0
- package/features/gateway/graphql/CmsOperationResponse.js +0 -0
- package/features/gateway/graphql/approveCmsEntryReviewStep.d.ts +1 -0
- package/features/gateway/graphql/approveCmsEntryReviewStep.js +18 -0
- package/features/gateway/graphql/approveCmsEntryReviewStep.js.map +1 -0
- package/features/gateway/graphql/cancelCmsEntryReview.d.ts +1 -0
- package/features/gateway/graphql/cancelCmsEntryReview.js +18 -0
- package/features/gateway/graphql/cancelCmsEntryReview.js.map +1 -0
- package/features/gateway/graphql/cancelCmsEntryReviewsForDelete.d.ts +1 -0
- package/features/gateway/graphql/cancelCmsEntryReviewsForDelete.js +28 -0
- package/features/gateway/graphql/cancelCmsEntryReviewsForDelete.js.map +1 -0
- package/features/gateway/graphql/getCmsEntryReview.d.ts +1 -0
- package/features/gateway/graphql/getCmsEntryReview.js +18 -0
- package/features/gateway/graphql/getCmsEntryReview.js.map +1 -0
- package/features/gateway/graphql/getCmsEntryReviewStepRun.d.ts +1 -0
- package/features/gateway/graphql/getCmsEntryReviewStepRun.js +18 -0
- package/features/gateway/graphql/getCmsEntryReviewStepRun.js.map +1 -0
- package/features/gateway/graphql/getCmsEntryTargetReview.d.ts +1 -0
- package/features/gateway/graphql/getCmsEntryTargetReview.js +18 -0
- package/features/gateway/graphql/getCmsEntryTargetReview.js.map +1 -0
- package/features/gateway/graphql/listCmsEntryBlockingReviews.d.ts +1 -0
- package/features/gateway/graphql/listCmsEntryBlockingReviews.js +18 -0
- package/features/gateway/graphql/listCmsEntryBlockingReviews.js.map +1 -0
- package/features/gateway/graphql/listCmsEntryReviewStepCandidates.d.ts +1 -0
- package/features/gateway/graphql/listCmsEntryReviewStepCandidates.js +18 -0
- package/features/gateway/graphql/listCmsEntryReviewStepCandidates.js.map +1 -0
- package/features/gateway/graphql/listCmsEntryReviews.d.ts +1 -0
- package/features/gateway/graphql/listCmsEntryReviews.js +34 -0
- package/features/gateway/graphql/listCmsEntryReviews.js.map +1 -0
- package/features/gateway/graphql/listCmsEntryStepCandidates.d.ts +1 -0
- package/features/gateway/graphql/listCmsEntryStepCandidates.js +28 -0
- package/features/gateway/graphql/listCmsEntryStepCandidates.js.map +1 -0
- package/features/gateway/graphql/listCmsEntryWorkflows.d.ts +1 -0
- package/features/gateway/graphql/listCmsEntryWorkflows.js +18 -0
- package/features/gateway/graphql/listCmsEntryWorkflows.js.map +1 -0
- package/features/gateway/graphql/reassignCmsEntryReviewStep.d.ts +1 -0
- package/features/gateway/graphql/reassignCmsEntryReviewStep.js +18 -0
- package/features/gateway/graphql/reassignCmsEntryReviewStep.js.map +1 -0
- package/features/gateway/graphql/rejectCmsEntryReviewStep.d.ts +1 -0
- package/features/gateway/graphql/rejectCmsEntryReviewStep.js +18 -0
- package/features/gateway/graphql/rejectCmsEntryReviewStep.js.map +1 -0
- package/features/gateway/graphql/requestCmsEntryReview.d.ts +1 -0
- package/features/gateway/graphql/requestCmsEntryReview.js +28 -0
- package/features/gateway/graphql/requestCmsEntryReview.js.map +1 -0
- package/features/gateway/graphql/restartCmsEntryReviewStep.d.ts +1 -0
- package/features/gateway/graphql/restartCmsEntryReviewStep.js +18 -0
- package/features/gateway/graphql/restartCmsEntryReviewStep.js.map +1 -0
- package/features/gateway/graphql/startCmsEntryReviewStep.d.ts +1 -0
- package/features/gateway/graphql/startCmsEntryReviewStep.js +18 -0
- package/features/gateway/graphql/startCmsEntryReviewStep.js.map +1 -0
- package/features/gateway/graphql/takeOverCmsEntryReviewStep.d.ts +1 -0
- package/features/gateway/graphql/takeOverCmsEntryReviewStep.js +22 -0
- package/features/gateway/graphql/takeOverCmsEntryReviewStep.js.map +1 -0
- package/features/trash/BulkDeletePresenterReviewDecorator.d.ts +20 -0
- package/features/trash/BulkDeletePresenterReviewDecorator.js +81 -0
- package/features/trash/BulkDeletePresenterReviewDecorator.js.map +1 -0
- package/features/trash/BulkDeletePresenterReviewDecorator.test.d.ts +1 -0
- package/features/trash/BulkDeletePresenterReviewDecorator.test.js +693 -0
- package/features/trash/BulkDeletePresenterReviewDecorator.test.js.map +1 -0
- package/features/trash/DeleteEntryRevisionUseCaseReviewDecorator.d.ts +13 -0
- package/features/trash/DeleteEntryRevisionUseCaseReviewDecorator.js +23 -0
- package/features/trash/DeleteEntryRevisionUseCaseReviewDecorator.js.map +1 -0
- package/features/trash/DeleteEntryRevisionUseCaseReviewDecorator.test.d.ts +1 -0
- package/features/trash/DeleteEntryRevisionUseCaseReviewDecorator.test.js +123 -0
- package/features/trash/DeleteEntryRevisionUseCaseReviewDecorator.test.js.map +1 -0
- package/features/trash/DeleteEntryUseCaseReviewDecorator.d.ts +13 -0
- package/features/trash/DeleteEntryUseCaseReviewDecorator.js +23 -0
- package/features/trash/DeleteEntryUseCaseReviewDecorator.js.map +1 -0
- package/features/trash/DeleteEntryUseCaseReviewDecorator.test.d.ts +1 -0
- package/features/trash/DeleteEntryUseCaseReviewDecorator.test.js +139 -0
- package/features/trash/DeleteEntryUseCaseReviewDecorator.test.js.map +1 -0
- package/features/trash/PermanentlyDeleteEntryUseCaseReviewDecorator.d.ts +13 -0
- package/features/trash/PermanentlyDeleteEntryUseCaseReviewDecorator.js +23 -0
- package/features/trash/PermanentlyDeleteEntryUseCaseReviewDecorator.js.map +1 -0
- package/features/trash/PermanentlyDeleteEntryUseCaseReviewDecorator.test.d.ts +1 -0
- package/features/trash/PermanentlyDeleteEntryUseCaseReviewDecorator.test.js +122 -0
- package/features/trash/PermanentlyDeleteEntryUseCaseReviewDecorator.test.js.map +1 -0
- package/features/trash/feature.d.ts +1 -0
- package/features/trash/feature.js +17 -0
- package/features/trash/feature.js.map +1 -0
- package/features/trash/feature.test.d.ts +1 -0
- package/features/trash/feature.test.js +213 -0
- package/features/trash/feature.test.js.map +1 -0
- package/index.d.ts +2 -0
- package/index.editor.test.d.ts +1 -0
- package/index.editor.test.js +149 -0
- package/index.editor.test.js.map +1 -0
- package/index.js +41 -0
- package/index.js.map +1 -0
- package/index.lists.test.d.ts +1 -0
- package/index.lists.test.js +172 -0
- package/index.lists.test.js.map +1 -0
- package/index.mount.test.d.ts +1 -0
- package/index.mount.test.js +49 -0
- package/index.mount.test.js.map +1 -0
- package/index.test.d.ts +1 -0
- package/index.test.js +414 -0
- package/index.test.js.map +1 -0
- package/package.json +54 -0
- package/presentation/CmsEntryContentReloader.d.ts +8 -0
- package/presentation/CmsEntryContentReloader.js +20 -0
- package/presentation/CmsEntryContentReloader.js.map +1 -0
- package/presentation/CmsEntryContentReloader.test.d.ts +1 -0
- package/presentation/CmsEntryContentReloader.test.js +118 -0
- package/presentation/CmsEntryContentReloader.test.js.map +1 -0
- package/presentation/CmsEntryFormPresenterReviewDecorator.d.ts +27 -0
- package/presentation/CmsEntryFormPresenterReviewDecorator.js +167 -0
- package/presentation/CmsEntryFormPresenterReviewDecorator.js.map +1 -0
- package/presentation/CmsEntryFormPresenterReviewDecorator.test.d.ts +1 -0
- package/presentation/CmsEntryFormPresenterReviewDecorator.test.js +601 -0
- package/presentation/CmsEntryFormPresenterReviewDecorator.test.js.map +1 -0
- package/presentation/CmsEntryUnsavedChanges.d.ts +7 -0
- package/presentation/CmsEntryUnsavedChanges.js +12 -0
- package/presentation/CmsEntryUnsavedChanges.js.map +1 -0
- package/presentation/CmsEntryUnsavedChanges.test.d.ts +1 -0
- package/presentation/CmsEntryUnsavedChanges.test.js +23 -0
- package/presentation/CmsEntryUnsavedChanges.test.js.map +1 -0
- package/presentation/CmsReviewFieldSelections.test.d.ts +1 -0
- package/presentation/CmsReviewFieldSelections.test.js +27 -0
- package/presentation/CmsReviewFieldSelections.test.js.map +1 -0
- package/presentation/CmsReviewGetEntryFieldSelection.d.ts +8 -0
- package/presentation/CmsReviewGetEntryFieldSelection.js +16 -0
- package/presentation/CmsReviewGetEntryFieldSelection.js.map +1 -0
- package/presentation/CmsReviewListEntriesFieldSelection.d.ts +8 -0
- package/presentation/CmsReviewListEntriesFieldSelection.js +16 -0
- package/presentation/CmsReviewListEntriesFieldSelection.js.map +1 -0
- package/presentation/CmsReviewTableRowMapperDecorator.d.ts +11 -0
- package/presentation/CmsReviewTableRowMapperDecorator.js +24 -0
- package/presentation/CmsReviewTableRowMapperDecorator.js.map +1 -0
- package/presentation/CmsReviewTableRowMapperDecorator.test.d.ts +1 -0
- package/presentation/CmsReviewTableRowMapperDecorator.test.js +120 -0
- package/presentation/CmsReviewTableRowMapperDecorator.test.js.map +1 -0
- package/presentation/CmsRevisionsListPresenterDecorator.d.ts +24 -0
- package/presentation/CmsRevisionsListPresenterDecorator.js +66 -0
- package/presentation/CmsRevisionsListPresenterDecorator.js.map +1 -0
- package/presentation/CmsRevisionsListPresenterDecorator.test.d.ts +1 -0
- package/presentation/CmsRevisionsListPresenterDecorator.test.js +174 -0
- package/presentation/CmsRevisionsListPresenterDecorator.test.js.map +1 -0
- package/presentation/contentReviews/CmsContentReviewsPresenter.d.ts +28 -0
- package/presentation/contentReviews/CmsContentReviewsPresenter.js +103 -0
- package/presentation/contentReviews/CmsContentReviewsPresenter.js.map +1 -0
- package/presentation/contentReviews/CmsContentReviewsPresenter.test.d.ts +1 -0
- package/presentation/contentReviews/CmsContentReviewsPresenter.test.js +238 -0
- package/presentation/contentReviews/CmsContentReviewsPresenter.test.js.map +1 -0
- package/presentation/contentReviews/abstractions.d.ts +31 -0
- package/presentation/contentReviews/abstractions.js +5 -0
- package/presentation/contentReviews/abstractions.js.map +1 -0
- package/presentation/contentReviews/feature.d.ts +3 -0
- package/presentation/contentReviews/feature.js +17 -0
- package/presentation/contentReviews/feature.js.map +1 -0
- package/presentation/contentReviews/toContentTypes.d.ts +3 -0
- package/presentation/contentReviews/toContentTypes.js +14 -0
- package/presentation/contentReviews/toContentTypes.js.map +1 -0
- package/presentation/contentReviews/toContentTypes.test.d.ts +1 -0
- package/presentation/contentReviews/toContentTypes.test.js +20 -0
- package/presentation/contentReviews/toContentTypes.test.js.map +1 -0
- package/presentation/feature.d.ts +1 -0
- package/presentation/feature.js +19 -0
- package/presentation/feature.js.map +1 -0
- package/presentation/getCmsEntryReviewContext.d.ts +4 -0
- package/presentation/getCmsEntryReviewContext.js +12 -0
- package/presentation/getCmsEntryReviewContext.js.map +1 -0
- package/presentation/getCmsEntryReviewInitParams.d.ts +13 -0
- package/presentation/getCmsEntryReviewInitParams.js +18 -0
- package/presentation/getCmsEntryReviewInitParams.js.map +1 -0
- package/presentation/getCmsEntryReviewInitParams.test.d.ts +1 -0
- package/presentation/getCmsEntryReviewInitParams.test.js +69 -0
- package/presentation/getCmsEntryReviewInitParams.test.js.map +1 -0
- package/routes.d.ts +11 -0
- package/routes.js +21 -0
- package/routes.js.map +1 -0
- package/testing/createEntry.d.ts +3 -0
- package/testing/createEntry.js +22 -0
- package/testing/createEntry.js.map +1 -0
- package/testing/createEntrySession.d.ts +9 -0
- package/testing/createEntrySession.js +29 -0
- package/testing/createEntrySession.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/createFormVm.d.ts +2 -0
- package/testing/createFormVm.js +22 -0
- package/testing/createFormVm.js.map +1 -0
- package/testing/models.d.ts +4 -0
- package/testing/models.js +23 -0
- package/testing/models.js.map +1 -0
- package/testing/renderEditorTree.d.ts +17 -0
- package/testing/renderEditorTree.js +93 -0
- package/testing/renderEditorTree.js.map +1 -0
- package/testing/reviewStates.d.ts +17 -0
- package/testing/reviewStates.js +65 -0
- package/testing/reviewStates.js.map +1 -0
- package/types.d.ts +10 -0
- package/types.js +0 -0
- package/utils/appName.d.ts +4 -0
- package/utils/appName.js +13 -0
- package/utils/appName.js.map +1 -0
- package/utils/isReviewableModel.d.ts +2 -0
- package/utils/isReviewableModel.js +7 -0
- package/utils/isReviewableModel.js.map +1 -0
- package/utils/renderModelIcon.d.ts +3 -0
- package/utils/renderModelIcon.js +19 -0
- package/utils/renderModelIcon.js.map +1 -0
- package/utils/renderModelIconOrFallback.d.ts +3 -0
- package/utils/renderModelIconOrFallback.js +17 -0
- package/utils/renderModelIconOrFallback.js.map +1 -0
package/index.test.js
ADDED
|
@@ -0,0 +1,414 @@
|
|
|
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 { WebsocketEventHandler } from "@webiny/app-websockets/events/abstractions.js";
|
|
10
|
+
import { FolderModelProvider } from "@webiny/app-aco/features/folders/abstractions.js";
|
|
11
|
+
import { ListFoldersGateway } from "@webiny/app-aco/features/folders/listFolders/abstractions.js";
|
|
12
|
+
import { ModelsCache } from "@webiny/app-headless-cms/features/model/abstractions.js";
|
|
13
|
+
import { AppReviewRowProvider } from "@webiny/app-workflows/review/mounting/AppReviewRowProvider.js";
|
|
14
|
+
import { ReviewNotificationHandler } from "@webiny/app-workflows/review/mounting/ReviewNotificationHandler.js";
|
|
15
|
+
import { ReviewNotificationService } from "@webiny/app-workflows/review/notifications/abstractions.js";
|
|
16
|
+
import { ReviewActivity } from "@webiny/app-workflows/review/activity/abstractions.js";
|
|
17
|
+
import { ReviewChangeMessageHandler } from "@webiny/app-workflows/review/mounting/ReviewChangeMessageHandler.js";
|
|
18
|
+
import { CmsReviewGateway } from "./features/gateway/CmsReviewGateway/CmsReviewGateway.js";
|
|
19
|
+
import { WorkflowEditorAppGateway } from "@webiny/app-workflows/editor/appGateway/abstractions.js";
|
|
20
|
+
import { WorkflowEditorGateway } from "@webiny/app-workflows/editor/gateway/abstractions.js";
|
|
21
|
+
import { WorkflowEditorRepositoryFeature } from "@webiny/app-workflows/editor/repository/feature.js";
|
|
22
|
+
import { InspectRoutingUseCase } from "@webiny/app-workflows/editor/useCases/inspectRouting/abstractions.js";
|
|
23
|
+
import { InspectRoutingFeature } from "@webiny/app-workflows/editor/useCases/inspectRouting/feature.js";
|
|
24
|
+
import { createEditorWorkflowDto } from "@webiny/app-workflows/editor/testing/editorFixtures.js";
|
|
25
|
+
import { createFakeEditorAppGateway } from "@webiny/app-workflows/editor/testing/fakeWorkflowEditorAppGateway.js";
|
|
26
|
+
import { ListModelsUseCase } from "@webiny/app-headless-cms/features/model/listModels/abstractions.js";
|
|
27
|
+
import { Notifications } from "@webiny/app-admin/features/notifications/abstractions.js";
|
|
28
|
+
import { IdentityContext } from "@webiny/app-admin/features/security/IdentityContext/abstractions.js";
|
|
29
|
+
import { createWorkflowsIdentityContext } from "@webiny/app-workflows/review/testing/createWorkflowsIdentityContext.js";
|
|
30
|
+
import { CmsContentReviewsPresenter } from "./presentation/contentReviews/abstractions.js";
|
|
31
|
+
import { CmsReviewRowProvider } from "./features/gateway/CmsReviewRowProvider/abstractions.js";
|
|
32
|
+
import { CmsReviewContentAdapter } from "./features/gateway/CmsReviewContentAdapter/abstractions.js";
|
|
33
|
+
import { CmsWorkflowEditorAppAdapter } from "./features/editorMounting/abstractions.js";
|
|
34
|
+
import { createFolder } from "./testing/createFolder.js";
|
|
35
|
+
import { ReviewAppGateway } from "@webiny/app-workflows/review/appGateway/abstractions.js";
|
|
36
|
+
import { ReviewGateway } from "@webiny/app-workflows/review/gateway/abstractions.js";
|
|
37
|
+
import { ReviewServicesFeature } from "@webiny/app-workflows/review/feature.js";
|
|
38
|
+
import { createFakeReviewAppGateway } from "@webiny/app-workflows/review/testing/fakeReviewAppGateway.js";
|
|
39
|
+
import { createReviewDto, createReviewWithFlagsDto } from "@webiny/app-workflows/review/testing/reviewFixtures.js";
|
|
40
|
+
import { CmsWorkflows } from "./index.js";
|
|
41
|
+
vi.mock("~/Components/CmsEntriesList/CmsReviewMoveEntryAction.js", ()=>({
|
|
42
|
+
CmsReviewMoveEntryAction: ()=>null
|
|
43
|
+
}));
|
|
44
|
+
vi.mock("~/Components/CmsEntriesList/CmsReviewScheduleEntryAction.js", ()=>({
|
|
45
|
+
CmsReviewScheduleEntryAction: ()=>null
|
|
46
|
+
}));
|
|
47
|
+
vi.mock("~/Components/ModelDelete/ModelDeleteWorkflowError.js", ()=>({
|
|
48
|
+
ModelDeleteWorkflowError: ()=>null
|
|
49
|
+
}));
|
|
50
|
+
vi.mock("~/Routes/index.js", ()=>({
|
|
51
|
+
CmsWorkflowEditor: ()=>null
|
|
52
|
+
}));
|
|
53
|
+
vi.mock("~/Components/ContentEntryForm/index.js", ()=>({
|
|
54
|
+
CmsEntryReviewBar: ()=>null,
|
|
55
|
+
CmsEntryReviewBlockedActions: ()=>null,
|
|
56
|
+
CmsEntryReviewFormLock: ()=>null,
|
|
57
|
+
CmsEntryReviewNewRevision: ()=>null,
|
|
58
|
+
CmsEntryReviewScheduleMenuItem: ()=>null
|
|
59
|
+
}));
|
|
60
|
+
vi.mock("~/Components/ContentReviews/CmsContentReviews.js", ()=>({
|
|
61
|
+
CmsContentReviews: ()=>/*#__PURE__*/ react.createElement("div", {
|
|
62
|
+
"data-testid": "cms-content-reviews"
|
|
63
|
+
})
|
|
64
|
+
}));
|
|
65
|
+
vi.mock("~/Components/ContentReviews/CmsContentReviewsSidebarItem.js", ()=>({
|
|
66
|
+
CmsContentReviewsSidebarItem: ()=>/*#__PURE__*/ react.createElement("div", {
|
|
67
|
+
"data-testid": "cms-content-reviews-sidebar"
|
|
68
|
+
})
|
|
69
|
+
}));
|
|
70
|
+
vi.mock("~/presentation/feature.js", ()=>({
|
|
71
|
+
CmsWorkflowsFeature: {
|
|
72
|
+
name: "Mock",
|
|
73
|
+
register: ()=>void 0,
|
|
74
|
+
resolve: ()=>void 0
|
|
75
|
+
}
|
|
76
|
+
}));
|
|
77
|
+
vi.mock("~/features/feature.js", ()=>({
|
|
78
|
+
CmsWorkflowsCacheFeature: {
|
|
79
|
+
name: "Mock",
|
|
80
|
+
register: ()=>void 0,
|
|
81
|
+
resolve: ()=>void 0
|
|
82
|
+
}
|
|
83
|
+
}));
|
|
84
|
+
describe("CmsWorkflows composition", ()=>{
|
|
85
|
+
const createContainer = (isEnabled)=>{
|
|
86
|
+
const flagsService = {
|
|
87
|
+
getFlags: ()=>new FeatureFlags({
|
|
88
|
+
advancedPublishingWorkflow: isEnabled
|
|
89
|
+
}),
|
|
90
|
+
isLoaded: ()=>true,
|
|
91
|
+
loadFlags: async ()=>void 0
|
|
92
|
+
};
|
|
93
|
+
const container = new Container();
|
|
94
|
+
container.registerInstance(FeatureFlagsService, flagsService);
|
|
95
|
+
const client = {
|
|
96
|
+
execute: vi.fn()
|
|
97
|
+
};
|
|
98
|
+
container.registerInstance(MainGraphQLClient, client);
|
|
99
|
+
container.registerInstance(ModelsCache, {
|
|
100
|
+
getItem: ()=>void 0,
|
|
101
|
+
getItems: ()=>[],
|
|
102
|
+
hasItems: ()=>true
|
|
103
|
+
});
|
|
104
|
+
container.registerInstance(ReviewNotificationService, {
|
|
105
|
+
handle: vi.fn()
|
|
106
|
+
});
|
|
107
|
+
container.registerInstance(ReviewActivity, {
|
|
108
|
+
subscribe: vi.fn(),
|
|
109
|
+
notify: vi.fn()
|
|
110
|
+
});
|
|
111
|
+
container.registerInstance(ListModelsUseCase, {
|
|
112
|
+
execute: async ()=>[]
|
|
113
|
+
});
|
|
114
|
+
container.registerInstance(IdentityContext, createWorkflowsIdentityContext());
|
|
115
|
+
container.registerInstance(Notifications, {
|
|
116
|
+
error: vi.fn()
|
|
117
|
+
});
|
|
118
|
+
container.registerInstance(FolderModelProvider, {
|
|
119
|
+
getModel: vi.fn().mockRejectedValue(new Error("The folder model is not needed here.")),
|
|
120
|
+
getGraphQLSelection: vi.fn().mockResolvedValue("{ id title parentId }")
|
|
121
|
+
});
|
|
122
|
+
return container;
|
|
123
|
+
};
|
|
124
|
+
it("sends the routing inspection of the editor through the CMS gateway with the flag on", async ()=>{
|
|
125
|
+
const container = createContainer(true);
|
|
126
|
+
WorkflowEditorRepositoryFeature.register(container);
|
|
127
|
+
InspectRoutingFeature.register(container);
|
|
128
|
+
render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
|
|
129
|
+
container: container
|
|
130
|
+
}, /*#__PURE__*/ react.createElement(CmsWorkflows, null)));
|
|
131
|
+
const client = container.resolve(MainGraphQLClient);
|
|
132
|
+
vi.mocked(client.execute).mockResolvedValue({
|
|
133
|
+
cms: {
|
|
134
|
+
inspectCmsEntryRouting: {
|
|
135
|
+
data: {
|
|
136
|
+
owner: null,
|
|
137
|
+
source: "pool",
|
|
138
|
+
ruleId: null,
|
|
139
|
+
strategy: "none",
|
|
140
|
+
narrowedTeamId: null,
|
|
141
|
+
candidateIds: [],
|
|
142
|
+
candidateCount: 0,
|
|
143
|
+
trace: [],
|
|
144
|
+
skipped: []
|
|
145
|
+
},
|
|
146
|
+
error: null
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
const useCase = container.resolve(InspectRoutingUseCase);
|
|
151
|
+
const inspection = await useCase.execute({
|
|
152
|
+
app: "cms",
|
|
153
|
+
stepConfig: {
|
|
154
|
+
teams: [
|
|
155
|
+
"team-1"
|
|
156
|
+
],
|
|
157
|
+
assignment: {
|
|
158
|
+
strategy: "none",
|
|
159
|
+
rules: []
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
requesterId: "user-1",
|
|
163
|
+
folderId: null,
|
|
164
|
+
modelId: "article"
|
|
165
|
+
});
|
|
166
|
+
const calls = vi.mocked(client.execute).mock.calls;
|
|
167
|
+
const lastRequest = calls[calls.length - 1][0];
|
|
168
|
+
expect(inspection.source).toBe("pool");
|
|
169
|
+
expect(inspection.owner).toBeNull();
|
|
170
|
+
expect(lastRequest.query).toContain("inspectCmsEntryRouting");
|
|
171
|
+
});
|
|
172
|
+
it("registers the Content Reviews row provider and the notification handler with the flag on", ()=>{
|
|
173
|
+
const container = createContainer(true);
|
|
174
|
+
render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
|
|
175
|
+
container: container
|
|
176
|
+
}, /*#__PURE__*/ react.createElement(CmsWorkflows, null)));
|
|
177
|
+
expect(container.resolve(CmsReviewRowProvider)).toBeInstanceOf(AppReviewRowProvider);
|
|
178
|
+
const handlers = container.resolveAll(WebsocketEventHandler);
|
|
179
|
+
expect(handlers.some((handler)=>handler instanceof ReviewNotificationHandler)).toBe(true);
|
|
180
|
+
});
|
|
181
|
+
it("registers neither the row provider nor the notification handler with the flag off", ()=>{
|
|
182
|
+
const container = createContainer(false);
|
|
183
|
+
render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
|
|
184
|
+
container: container
|
|
185
|
+
}, /*#__PURE__*/ react.createElement(CmsWorkflows, null)));
|
|
186
|
+
expect(()=>container.resolve(CmsReviewRowProvider)).toThrow("No registration found");
|
|
187
|
+
const handlers = container.resolveAll(WebsocketEventHandler);
|
|
188
|
+
expect(handlers.some((handler)=>handler instanceof ReviewNotificationHandler)).toBe(false);
|
|
189
|
+
});
|
|
190
|
+
it("registers the change message handler with the flag on", ()=>{
|
|
191
|
+
const container = createContainer(true);
|
|
192
|
+
render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
|
|
193
|
+
container: container
|
|
194
|
+
}, /*#__PURE__*/ react.createElement(CmsWorkflows, null)));
|
|
195
|
+
const handlers = container.resolveAll(WebsocketEventHandler);
|
|
196
|
+
expect(handlers.some((handler)=>handler instanceof ReviewChangeMessageHandler)).toBe(true);
|
|
197
|
+
});
|
|
198
|
+
it("registers no change message handler with the flag off", ()=>{
|
|
199
|
+
const container = createContainer(false);
|
|
200
|
+
render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
|
|
201
|
+
container: container
|
|
202
|
+
}, /*#__PURE__*/ react.createElement(CmsWorkflows, null)));
|
|
203
|
+
const handlers = container.resolveAll(WebsocketEventHandler);
|
|
204
|
+
expect(handlers.some((handler)=>handler instanceof ReviewChangeMessageHandler)).toBe(false);
|
|
205
|
+
});
|
|
206
|
+
it("mounts the Content Reviews route and sidebar item and registers the presenter with the flag on", ()=>{
|
|
207
|
+
const container = createContainer(true);
|
|
208
|
+
render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
|
|
209
|
+
container: container
|
|
210
|
+
}, /*#__PURE__*/ react.createElement(CmsWorkflows, null)));
|
|
211
|
+
expect(screen.queryByTestId("cms-content-reviews")).not.toBeNull();
|
|
212
|
+
expect(screen.queryByTestId("cms-content-reviews-sidebar")).not.toBeNull();
|
|
213
|
+
expect(container.resolve(CmsContentReviewsPresenter)).toBeDefined();
|
|
214
|
+
});
|
|
215
|
+
it("mounts no Content Reviews glue and registers no presenter with the flag off", ()=>{
|
|
216
|
+
const container = createContainer(false);
|
|
217
|
+
render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
|
|
218
|
+
container: container
|
|
219
|
+
}, /*#__PURE__*/ react.createElement(CmsWorkflows, null)));
|
|
220
|
+
expect(screen.queryByTestId("cms-content-reviews")).toBeNull();
|
|
221
|
+
expect(screen.queryByTestId("cms-content-reviews-sidebar")).toBeNull();
|
|
222
|
+
expect(()=>container.resolve(CmsContentReviewsPresenter)).toThrow("No registration found");
|
|
223
|
+
});
|
|
224
|
+
it("registers the CMS editor gateway under the shared token and the CMS editor adapter with the flag on (R347)", ()=>{
|
|
225
|
+
const container = createContainer(true);
|
|
226
|
+
render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
|
|
227
|
+
container: container
|
|
228
|
+
}, /*#__PURE__*/ react.createElement(CmsWorkflows, null)));
|
|
229
|
+
const adapter = container.resolve(CmsWorkflowEditorAppAdapter);
|
|
230
|
+
const contentAdapter = container.resolve(CmsReviewContentAdapter);
|
|
231
|
+
expect(adapter.appKind).toBe("cms");
|
|
232
|
+
expect(adapter.contentAdapter).toBe(contentAdapter);
|
|
233
|
+
const gateways = container.resolveAll(WorkflowEditorAppGateway);
|
|
234
|
+
expect(gateways).toHaveLength(1);
|
|
235
|
+
expect(gateways[0].app).toBe("cms");
|
|
236
|
+
});
|
|
237
|
+
it("lists the folders of a model through the editor adapter with the flag on", async ()=>{
|
|
238
|
+
const container = createContainer(true);
|
|
239
|
+
render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
|
|
240
|
+
container: container
|
|
241
|
+
}, /*#__PURE__*/ react.createElement(CmsWorkflows, null)));
|
|
242
|
+
const client = container.resolve(MainGraphQLClient);
|
|
243
|
+
vi.mocked(client.execute).mockResolvedValue({
|
|
244
|
+
aco: {
|
|
245
|
+
listFolders: {
|
|
246
|
+
data: [
|
|
247
|
+
createFolder("folder-a", "Campaigns", "root")
|
|
248
|
+
],
|
|
249
|
+
error: null
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
const adapter = container.resolve(CmsWorkflowEditorAppAdapter);
|
|
254
|
+
const folders = await adapter.listFolders("article");
|
|
255
|
+
expect(adapter.getFolderType("article")).toBe("cms:article");
|
|
256
|
+
expect(folders).toEqual([
|
|
257
|
+
{
|
|
258
|
+
id: "folder-a",
|
|
259
|
+
path: "/Campaigns"
|
|
260
|
+
}
|
|
261
|
+
]);
|
|
262
|
+
});
|
|
263
|
+
it("registers no folder gateway with the flag off", ()=>{
|
|
264
|
+
const container = createContainer(false);
|
|
265
|
+
render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
|
|
266
|
+
container: container
|
|
267
|
+
}, /*#__PURE__*/ react.createElement(CmsWorkflows, null)));
|
|
268
|
+
expect(()=>container.resolve(ListFoldersGateway)).toThrow("No registration found");
|
|
269
|
+
});
|
|
270
|
+
it("registers neither the CMS editor gateway nor the CMS editor adapter with the flag off", ()=>{
|
|
271
|
+
const container = createContainer(false);
|
|
272
|
+
render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
|
|
273
|
+
container: container
|
|
274
|
+
}, /*#__PURE__*/ react.createElement(CmsWorkflows, null)));
|
|
275
|
+
expect(()=>container.resolve(CmsWorkflowEditorAppAdapter)).toThrow("No registration found");
|
|
276
|
+
expect(container.resolveAll(WorkflowEditorAppGateway)).toEqual([]);
|
|
277
|
+
});
|
|
278
|
+
it("routes the editor by app only after the render: cms to the CMS gateway, wb to the other app (R349, R362)", async ()=>{
|
|
279
|
+
const container = createContainer(true);
|
|
280
|
+
WorkflowEditorRepositoryFeature.register(container);
|
|
281
|
+
const wbGateway = createFakeEditorAppGateway("wb");
|
|
282
|
+
wbGateway.getWorkflow.mockResolvedValue({
|
|
283
|
+
data: createEditorWorkflowDto({
|
|
284
|
+
id: "workflow-wb",
|
|
285
|
+
models: [
|
|
286
|
+
"wb.page"
|
|
287
|
+
]
|
|
288
|
+
}),
|
|
289
|
+
error: null
|
|
290
|
+
});
|
|
291
|
+
const createWbGateway = vi.fn(()=>wbGateway);
|
|
292
|
+
container.registerFactory(WorkflowEditorAppGateway, createWbGateway);
|
|
293
|
+
render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
|
|
294
|
+
container: container
|
|
295
|
+
}, /*#__PURE__*/ react.createElement(CmsWorkflows, null)));
|
|
296
|
+
expect(createWbGateway).not.toHaveBeenCalled();
|
|
297
|
+
const client = container.resolve(MainGraphQLClient);
|
|
298
|
+
vi.mocked(client.execute).mockClear();
|
|
299
|
+
vi.mocked(client.execute).mockResolvedValue({
|
|
300
|
+
cms: {
|
|
301
|
+
getCmsEntryWorkflow: {
|
|
302
|
+
data: createEditorWorkflowDto({
|
|
303
|
+
id: "workflow-cms"
|
|
304
|
+
}),
|
|
305
|
+
error: null
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
});
|
|
309
|
+
const gateway = container.resolve(WorkflowEditorGateway);
|
|
310
|
+
const cms = await gateway.getWorkflow({
|
|
311
|
+
app: "cms",
|
|
312
|
+
id: "workflow-cms"
|
|
313
|
+
});
|
|
314
|
+
const wb = await gateway.getWorkflow({
|
|
315
|
+
app: "wb",
|
|
316
|
+
id: "workflow-wb"
|
|
317
|
+
});
|
|
318
|
+
expect(createWbGateway).toHaveBeenCalledTimes(1);
|
|
319
|
+
expect(cms.id).toBe("workflow-cms");
|
|
320
|
+
expect(wb.id).toBe("workflow-wb");
|
|
321
|
+
expect(vi.mocked(client.execute)).toHaveBeenCalledTimes(1);
|
|
322
|
+
expect(vi.mocked(client.execute).mock.calls[0][0].query).toContain("getCmsEntryWorkflow");
|
|
323
|
+
expect(wbGateway.getWorkflow).toHaveBeenCalledWith("workflow-wb");
|
|
324
|
+
});
|
|
325
|
+
it("routes no editor operation to the CMS with the flag off", async ()=>{
|
|
326
|
+
const container = createContainer(false);
|
|
327
|
+
WorkflowEditorRepositoryFeature.register(container);
|
|
328
|
+
const wbGateway = createFakeEditorAppGateway("wb");
|
|
329
|
+
container.registerInstance(WorkflowEditorAppGateway, wbGateway);
|
|
330
|
+
render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
|
|
331
|
+
container: container
|
|
332
|
+
}, /*#__PURE__*/ react.createElement(CmsWorkflows, null)));
|
|
333
|
+
const gateway = container.resolve(WorkflowEditorGateway);
|
|
334
|
+
const client = container.resolve(MainGraphQLClient);
|
|
335
|
+
await expect(gateway.getWorkflow({
|
|
336
|
+
app: "cms",
|
|
337
|
+
id: "workflow-cms"
|
|
338
|
+
})).rejects.toThrow('No workflows app is registered for "cms".');
|
|
339
|
+
expect(vi.mocked(client.execute)).not.toHaveBeenCalled();
|
|
340
|
+
});
|
|
341
|
+
it("registers CmsReviewGateway itself under the shared token only with the flag on (R358)", ()=>{
|
|
342
|
+
const enabled = createContainer(true);
|
|
343
|
+
const disabled = createContainer(false);
|
|
344
|
+
render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
|
|
345
|
+
container: enabled
|
|
346
|
+
}, /*#__PURE__*/ react.createElement(CmsWorkflows, null)));
|
|
347
|
+
render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
|
|
348
|
+
container: disabled
|
|
349
|
+
}, /*#__PURE__*/ react.createElement(CmsWorkflows, null)));
|
|
350
|
+
const registered = enabled.resolveAll(ReviewAppGateway);
|
|
351
|
+
expect(registered.map((appGateway)=>appGateway.app)).toEqual([
|
|
352
|
+
"cms"
|
|
353
|
+
]);
|
|
354
|
+
expect(Object.getPrototypeOf(registered[0])).toBe(CmsReviewGateway.prototype);
|
|
355
|
+
expect(disabled.resolveAll(ReviewAppGateway)).toEqual([]);
|
|
356
|
+
});
|
|
357
|
+
it("routes CMS namespaces to the CMS gateway and the page namespace to the other app, built after the render (Review Focus 10, R362)", async ()=>{
|
|
358
|
+
const container = createContainer(true);
|
|
359
|
+
ReviewServicesFeature.register(container);
|
|
360
|
+
const wbStub = createFakeReviewAppGateway("wb", [
|
|
361
|
+
"wb.page"
|
|
362
|
+
]);
|
|
363
|
+
const phases = [];
|
|
364
|
+
let phase = "render";
|
|
365
|
+
container.registerFactory(ReviewAppGateway, ()=>{
|
|
366
|
+
phases.push(phase);
|
|
367
|
+
return wbStub;
|
|
368
|
+
});
|
|
369
|
+
render(/*#__PURE__*/ react.createElement(DiContainerProvider, {
|
|
370
|
+
container: container
|
|
371
|
+
}, /*#__PURE__*/ react.createElement(CmsWorkflows, null)));
|
|
372
|
+
phase = "after";
|
|
373
|
+
const gateway = container.resolve(ReviewGateway);
|
|
374
|
+
const client = container.resolve(MainGraphQLClient);
|
|
375
|
+
vi.mocked(client.execute).mockResolvedValue({
|
|
376
|
+
cms: {
|
|
377
|
+
getCmsEntryReview: {
|
|
378
|
+
data: createReviewWithFlagsDto(),
|
|
379
|
+
error: null
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
});
|
|
383
|
+
const pageReviewDto = createReviewDto({
|
|
384
|
+
id: "review-2"
|
|
385
|
+
});
|
|
386
|
+
const pageReview = createReviewWithFlagsDto({
|
|
387
|
+
review: pageReviewDto
|
|
388
|
+
});
|
|
389
|
+
wbStub.getReview.mockResolvedValue({
|
|
390
|
+
data: pageReview,
|
|
391
|
+
error: null
|
|
392
|
+
});
|
|
393
|
+
const cmsReview = await gateway.getReview({
|
|
394
|
+
namespace: "cms.article",
|
|
395
|
+
reviewId: "review-1"
|
|
396
|
+
});
|
|
397
|
+
const wbReview = await gateway.getReview({
|
|
398
|
+
namespace: "wb.page",
|
|
399
|
+
reviewId: "review-2"
|
|
400
|
+
});
|
|
401
|
+
expect(phases).toEqual([
|
|
402
|
+
"after"
|
|
403
|
+
]);
|
|
404
|
+
expect(gateway.getApp("cms.article")).toBe("cms");
|
|
405
|
+
expect(gateway.getApp("wb.page")).toBe("wb");
|
|
406
|
+
expect(cmsReview.review.id).toBe("review-1");
|
|
407
|
+
expect(wbReview.review.id).toBe("review-2");
|
|
408
|
+
const queries = vi.mocked(client.execute).mock.calls.map((call)=>call[0].query);
|
|
409
|
+
expect(queries.filter((query)=>query.includes("getCmsEntryReview("))).toHaveLength(1);
|
|
410
|
+
expect(wbStub.getReview).toHaveBeenCalledWith("review-2");
|
|
411
|
+
});
|
|
412
|
+
});
|
|
413
|
+
|
|
414
|
+
//# 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 { WebsocketEventHandler } from \"@webiny/app-websockets/events/abstractions.js\";\nimport { FolderModelProvider } from \"@webiny/app-aco/features/folders/abstractions.js\";\nimport { ListFoldersGateway } from \"@webiny/app-aco/features/folders/listFolders/abstractions.js\";\nimport { ModelsCache } from \"@webiny/app-headless-cms/features/model/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 { CmsReviewGateway } from \"~/features/gateway/CmsReviewGateway/CmsReviewGateway.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 { 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 { ListModelsUseCase } from \"@webiny/app-headless-cms/features/model/listModels/abstractions.js\";\nimport { Notifications } from \"@webiny/app-admin/features/notifications/abstractions.js\";\nimport { IdentityContext } from \"@webiny/app-admin/features/security/IdentityContext/abstractions.js\";\nimport { createWorkflowsIdentityContext } from \"@webiny/app-workflows/review/testing/createWorkflowsIdentityContext.js\";\nimport { CmsContentReviewsPresenter } from \"~/presentation/contentReviews/abstractions.js\";\nimport { CmsReviewRowProvider } from \"~/features/gateway/CmsReviewRowProvider/abstractions.js\";\nimport { CmsReviewContentAdapter } from \"~/features/gateway/CmsReviewContentAdapter/abstractions.js\";\nimport { CmsWorkflowEditorAppAdapter } 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 { CmsWorkflows } from \"./index.js\";\n\nvi.mock(\"~/Components/CmsEntriesList/CmsReviewMoveEntryAction.js\", () => {\n return { CmsReviewMoveEntryAction: () => null };\n});\n\nvi.mock(\"~/Components/CmsEntriesList/CmsReviewScheduleEntryAction.js\", () => {\n return { CmsReviewScheduleEntryAction: () => null };\n});\n\nvi.mock(\"~/Components/ModelDelete/ModelDeleteWorkflowError.js\", () => {\n return { ModelDeleteWorkflowError: () => null };\n});\n\nvi.mock(\"~/Routes/index.js\", () => {\n return { CmsWorkflowEditor: () => null };\n});\n\nvi.mock(\"~/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(\"~/Components/ContentReviews/CmsContentReviews.js\", () => {\n return { CmsContentReviews: () => <div data-testid=\"cms-content-reviews\" /> };\n});\n\nvi.mock(\"~/Components/ContentReviews/CmsContentReviewsSidebarItem.js\", () => {\n return {\n CmsContentReviewsSidebarItem: () => <div data-testid=\"cms-content-reviews-sidebar\" />\n };\n});\n\nvi.mock(\"~/presentation/feature.js\", () => {\n return {\n CmsWorkflowsFeature: { name: \"Mock\", register: () => undefined, resolve: () => undefined }\n };\n});\n\nvi.mock(\"~/features/feature.js\", () => {\n return {\n CmsWorkflowsCacheFeature: {\n name: \"Mock\",\n register: () => undefined,\n resolve: () => undefined\n }\n };\n});\n\ndescribe(\"CmsWorkflows composition\", () => {\n const createContainer = (isEnabled: boolean): Container => {\n const flagsService: FeatureFlagsService.Interface = {\n getFlags: () => {\n return new FeatureFlags({ advancedPublishingWorkflow: isEnabled });\n },\n isLoaded: () => true,\n loadFlags: async () => undefined\n };\n const container = new Container();\n container.registerInstance(FeatureFlagsService, flagsService);\n const client = { execute: vi.fn() };\n container.registerInstance(MainGraphQLClient, client);\n container.registerInstance(ModelsCache, {\n getItem: () => undefined,\n getItems: () => [],\n hasItems: () => true\n } as unknown as ModelsCache.Interface);\n container.registerInstance(ReviewNotificationService, { handle: vi.fn() });\n container.registerInstance(ReviewActivity, { subscribe: vi.fn(), notify: vi.fn() });\n container.registerInstance(ListModelsUseCase, {\n execute: async () => []\n } as unknown as ListModelsUseCase.Interface);\n // The admin registers the signed-in identity; the model list waits for one.\n container.registerInstance(IdentityContext, createWorkflowsIdentityContext());\n container.registerInstance(Notifications, {\n error: vi.fn()\n } as unknown as Notifications.Interface);\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 CMS 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 <CmsWorkflows />\n </DiContainerProvider>\n );\n const client = container.resolve(MainGraphQLClient);\n vi.mocked(client.execute).mockResolvedValue({\n cms: {\n inspectCmsEntryRouting: {\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: \"cms\",\n stepConfig: { teams: [\"team-1\"], assignment: { strategy: \"none\", rules: [] } },\n requesterId: \"user-1\",\n folderId: null,\n modelId: \"article\"\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(inspection.owner).toBeNull();\n expect(lastRequest.query).toContain(\"inspectCmsEntryRouting\");\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 <CmsWorkflows />\n </DiContainerProvider>\n );\n\n expect(container.resolve(CmsReviewRowProvider)).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 <CmsWorkflows />\n </DiContainerProvider>\n );\n\n expect(() => container.resolve(CmsReviewRowProvider)).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 <CmsWorkflows />\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 <CmsWorkflows />\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 and sidebar item and registers the presenter with the flag on\", () => {\n const container = createContainer(true);\n\n render(\n <DiContainerProvider container={container}>\n <CmsWorkflows />\n </DiContainerProvider>\n );\n\n expect(screen.queryByTestId(\"cms-content-reviews\")).not.toBeNull();\n expect(screen.queryByTestId(\"cms-content-reviews-sidebar\")).not.toBeNull();\n expect(container.resolve(CmsContentReviewsPresenter)).toBeDefined();\n });\n\n it(\"mounts no Content Reviews glue and registers no presenter with the flag off\", () => {\n const container = createContainer(false);\n\n render(\n <DiContainerProvider container={container}>\n <CmsWorkflows />\n </DiContainerProvider>\n );\n\n expect(screen.queryByTestId(\"cms-content-reviews\")).toBeNull();\n expect(screen.queryByTestId(\"cms-content-reviews-sidebar\")).toBeNull();\n expect(() => container.resolve(CmsContentReviewsPresenter)).toThrow(\n \"No registration found\"\n );\n });\n\n it(\"registers the CMS editor gateway under the shared token and the CMS editor adapter with the flag on (R347)\", () => {\n const container = createContainer(true);\n\n render(\n <DiContainerProvider container={container}>\n <CmsWorkflows />\n </DiContainerProvider>\n );\n\n const adapter = container.resolve(CmsWorkflowEditorAppAdapter);\n const contentAdapter = container.resolve(CmsReviewContentAdapter);\n\n expect(adapter.appKind).toBe(\"cms\");\n expect(adapter.contentAdapter).toBe(contentAdapter);\n // The CMS 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(\"cms\");\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 <CmsWorkflows />\n </DiContainerProvider>\n );\n const client = container.resolve(MainGraphQLClient);\n vi.mocked(client.execute).mockResolvedValue({\n aco: {\n listFolders: {\n data: [createFolder(\"folder-a\", \"Campaigns\", \"root\")],\n error: null\n }\n }\n });\n\n const adapter = container.resolve(CmsWorkflowEditorAppAdapter);\n const folders = await adapter.listFolders(\"article\");\n\n expect(adapter.getFolderType(\"article\")).toBe(\"cms:article\");\n expect(folders).toEqual([{ id: \"folder-a\", path: \"/Campaigns\" }]);\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 <CmsWorkflows />\n </DiContainerProvider>\n );\n\n expect(() => container.resolve(ListFoldersGateway)).toThrow(\"No registration found\");\n });\n\n it(\"registers neither the CMS editor gateway nor the CMS editor adapter with the flag off\", () => {\n const container = createContainer(false);\n\n render(\n <DiContainerProvider container={container}>\n <CmsWorkflows />\n </DiContainerProvider>\n );\n\n expect(() => container.resolve(CmsWorkflowEditorAppAdapter)).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: cms to the CMS gateway, wb to the other app (R349, R362)\", async () => {\n const container = createContainer(true);\n WorkflowEditorRepositoryFeature.register(container);\n const wbGateway = createFakeEditorAppGateway(\"wb\");\n wbGateway.getWorkflow.mockResolvedValue({\n data: createEditorWorkflowDto({ id: \"workflow-wb\", models: [\"wb.page\"] }),\n error: null\n });\n // A factory runs each time a routing gateway collects the app gateways, so it counts the builds.\n const createWbGateway = vi.fn(() => wbGateway);\n container.registerFactory(WorkflowEditorAppGateway, createWbGateway);\n\n render(\n <DiContainerProvider container={container}>\n <CmsWorkflows />\n </DiContainerProvider>\n );\n\n expect(createWbGateway).not.toHaveBeenCalled();\n const client = container.resolve(MainGraphQLClient);\n vi.mocked(client.execute).mockClear();\n vi.mocked(client.execute).mockResolvedValue({\n cms: {\n getCmsEntryWorkflow: {\n data: createEditorWorkflowDto({ id: \"workflow-cms\" }),\n error: null\n }\n }\n });\n\n const gateway = container.resolve(WorkflowEditorGateway);\n const cms = await gateway.getWorkflow({ app: \"cms\", id: \"workflow-cms\" });\n const wb = await gateway.getWorkflow({ app: \"wb\", id: \"workflow-wb\" });\n\n expect(createWbGateway).toHaveBeenCalledTimes(1);\n expect(cms.id).toBe(\"workflow-cms\");\n expect(wb.id).toBe(\"workflow-wb\");\n expect(vi.mocked(client.execute)).toHaveBeenCalledTimes(1);\n expect(vi.mocked(client.execute).mock.calls[0][0].query).toContain(\"getCmsEntryWorkflow\");\n expect(wbGateway.getWorkflow).toHaveBeenCalledWith(\"workflow-wb\");\n });\n\n it(\"routes no editor operation to the CMS with the flag off\", async () => {\n const container = createContainer(false);\n WorkflowEditorRepositoryFeature.register(container);\n const wbGateway = createFakeEditorAppGateway(\"wb\");\n container.registerInstance(WorkflowEditorAppGateway, wbGateway);\n\n render(\n <DiContainerProvider container={container}>\n <CmsWorkflows />\n </DiContainerProvider>\n );\n const gateway = container.resolve(WorkflowEditorGateway);\n const client = container.resolve(MainGraphQLClient);\n\n await expect(gateway.getWorkflow({ app: \"cms\", id: \"workflow-cms\" })).rejects.toThrow(\n 'No workflows app is registered for \"cms\".'\n );\n expect(vi.mocked(client.execute)).not.toHaveBeenCalled();\n });\n it(\"registers CmsReviewGateway 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 <CmsWorkflows />\n </DiContainerProvider>\n );\n render(\n <DiContainerProvider container={disabled}>\n <CmsWorkflows />\n </DiContainerProvider>\n );\n\n const registered = enabled.resolveAll(ReviewAppGateway);\n expect(registered.map(appGateway => appGateway.app)).toEqual([\"cms\"]);\n expect(Object.getPrototypeOf(registered[0])).toBe(CmsReviewGateway.prototype);\n expect(disabled.resolveAll(ReviewAppGateway)).toEqual([]);\n });\n\n it(\"routes CMS namespaces to the CMS gateway and the page namespace 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 wbStub = createFakeReviewAppGateway(\"wb\", [\"wb.page\"]);\n const phases: string[] = [];\n let phase = \"render\";\n // The routing gateway collects the app gateways once, when it is built (R349).\n container.registerFactory(ReviewAppGateway, () => {\n phases.push(phase);\n return wbStub;\n });\n\n render(\n <DiContainerProvider container={container}>\n <CmsWorkflows />\n </DiContainerProvider>\n );\n phase = \"after\";\n\n const gateway = container.resolve(ReviewGatewayAbstraction);\n const client = container.resolve(MainGraphQLClient);\n vi.mocked(client.execute).mockResolvedValue({\n cms: { getCmsEntryReview: { data: createReviewWithFlagsDto(), error: null } }\n });\n const pageReviewDto = createReviewDto({ id: \"review-2\" });\n const pageReview = createReviewWithFlagsDto({ review: pageReviewDto });\n wbStub.getReview.mockResolvedValue({ data: pageReview, error: null });\n\n const cmsReview = await gateway.getReview({\n namespace: \"cms.article\",\n reviewId: \"review-1\"\n });\n const wbReview = await gateway.getReview({ namespace: \"wb.page\", reviewId: \"review-2\" });\n\n expect(phases).toEqual([\"after\"]);\n expect(gateway.getApp(\"cms.article\")).toBe(\"cms\");\n expect(gateway.getApp(\"wb.page\")).toBe(\"wb\");\n expect(cmsReview.review.id).toBe(\"review-1\");\n expect(wbReview.review.id).toBe(\"review-2\");\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(wbStub.getReview).toHaveBeenCalledWith(\"review-2\");\n });\n});\n"],"names":["vi","undefined","describe","createContainer","isEnabled","flagsService","FeatureFlags","container","Container","FeatureFlagsService","client","MainGraphQLClient","ModelsCache","ReviewNotificationService","ReviewActivity","ListModelsUseCase","IdentityContext","createWorkflowsIdentityContext","Notifications","FolderModelProvider","Error","it","WorkflowEditorRepositoryFeature","InspectRoutingFeature","render","DiContainerProvider","CmsWorkflows","useCase","InspectRoutingUseCase","inspection","calls","lastRequest","expect","CmsReviewRowProvider","AppReviewRowProvider","handlers","WebsocketEventHandler","handler","ReviewNotificationHandler","ReviewChangeMessageHandler","screen","CmsContentReviewsPresenter","adapter","CmsWorkflowEditorAppAdapter","contentAdapter","CmsReviewContentAdapter","gateways","WorkflowEditorAppGateway","createFolder","folders","ListFoldersGateway","wbGateway","createFakeEditorAppGateway","createEditorWorkflowDto","createWbGateway","gateway","WorkflowEditorGateway","cms","wb","enabled","disabled","registered","ReviewAppGateway","appGateway","Object","CmsReviewGateway","ReviewServicesFeature","wbStub","createFakeReviewAppGateway","phases","phase","ReviewGatewayAbstraction","createReviewWithFlagsDto","pageReviewDto","createReviewDto","pageReview","cmsReview","wbReview","queries","call","query"],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@webiny/app-headless-cms-workflows",
|
|
3
|
+
"version": "0.0.0-unstable.0156a4c312",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"exports": {
|
|
6
|
+
".": "./index.js",
|
|
7
|
+
"./*": "./*"
|
|
8
|
+
},
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "https://github.com/webiny/webiny-js.git"
|
|
12
|
+
},
|
|
13
|
+
"author": "Webiny Ltd",
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"dependencies": {
|
|
16
|
+
"@fortawesome/react-fontawesome": "3.5.0",
|
|
17
|
+
"@webiny/admin-ui": "0.0.0-unstable.0156a4c312",
|
|
18
|
+
"@webiny/app": "0.0.0-unstable.0156a4c312",
|
|
19
|
+
"@webiny/app-aco": "0.0.0-unstable.0156a4c312",
|
|
20
|
+
"@webiny/app-admin": "0.0.0-unstable.0156a4c312",
|
|
21
|
+
"@webiny/app-headless-cms": "0.0.0-unstable.0156a4c312",
|
|
22
|
+
"@webiny/app-headless-cms-common": "0.0.0-unstable.0156a4c312",
|
|
23
|
+
"@webiny/app-websockets": "0.0.0-unstable.0156a4c312",
|
|
24
|
+
"@webiny/app-workflows": "0.0.0-unstable.0156a4c312",
|
|
25
|
+
"@webiny/feature": "0.0.0-unstable.0156a4c312",
|
|
26
|
+
"@webiny/icons": "0.0.0-unstable.0156a4c312",
|
|
27
|
+
"mobx": "7.1.4",
|
|
28
|
+
"react": "19.3.1",
|
|
29
|
+
"react-dom": "19.3.1"
|
|
30
|
+
},
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"@testing-library/react": "16.3.3",
|
|
33
|
+
"@types/react": "19.3.0",
|
|
34
|
+
"@webiny/build-tools": "0.0.0-unstable.0156a4c312",
|
|
35
|
+
"@webiny/di": "2.0.0",
|
|
36
|
+
"@webiny/feature-flags": "0.0.0-unstable.0156a4c312",
|
|
37
|
+
"@webiny/react-composition": "0.0.0-unstable.0156a4c312",
|
|
38
|
+
"rimraf": "6.1.3",
|
|
39
|
+
"typescript": "7.0.2",
|
|
40
|
+
"vitest": "5.0.5"
|
|
41
|
+
},
|
|
42
|
+
"publishConfig": {
|
|
43
|
+
"access": "public"
|
|
44
|
+
},
|
|
45
|
+
"svgo": {
|
|
46
|
+
"plugins": {
|
|
47
|
+
"removeViewBox": false
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"gitHead": "b8aec8a1be3f25c3b428b357fe1e352c7cbff9ae",
|
|
51
|
+
"webiny": {
|
|
52
|
+
"publishFrom": "dist"
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ContentEntryFormPresenter } from "@webiny/app-headless-cms/presentation/contentEntries/form/abstractions.js";
|
|
2
|
+
import type { IReviewContentReloader } from "@webiny/app-workflows/review/content/IReviewContentReloader.js";
|
|
3
|
+
export declare class CmsEntryContentReloader implements IReviewContentReloader {
|
|
4
|
+
private readonly form;
|
|
5
|
+
private readonly revisionId;
|
|
6
|
+
constructor(form: ContentEntryFormPresenter.Interface, revisionId: string);
|
|
7
|
+
reload(): Promise<boolean>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
class CmsEntryContentReloader {
|
|
2
|
+
constructor(form, revisionId){
|
|
3
|
+
this.form = form;
|
|
4
|
+
this.revisionId = revisionId;
|
|
5
|
+
}
|
|
6
|
+
async reload() {
|
|
7
|
+
const before = this.form.vm.entry;
|
|
8
|
+
if (!before || before.id !== this.revisionId) return false;
|
|
9
|
+
if (this.form.vm.isDirty) return false;
|
|
10
|
+
await this.form.loadRevision(this.revisionId);
|
|
11
|
+
const after = this.form.vm.entry;
|
|
12
|
+
if (!after || after.id !== this.revisionId) return false;
|
|
13
|
+
const sameSavedOn = after.revisionSavedOn === before.revisionSavedOn;
|
|
14
|
+
const sameModifiedOn = after.revisionModifiedOn === before.revisionModifiedOn;
|
|
15
|
+
return !sameSavedOn || !sameModifiedOn;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export { CmsEntryContentReloader };
|
|
19
|
+
|
|
20
|
+
//# sourceMappingURL=CmsEntryContentReloader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentation/CmsEntryContentReloader.js","sources":["../../src/presentation/CmsEntryContentReloader.ts"],"sourcesContent":["import type { ContentEntryFormPresenter } from \"@webiny/app-headless-cms/presentation/contentEntries/form/abstractions.js\";\nimport type { IReviewContentReloader } from \"@webiny/app-workflows/review/content/IReviewContentReloader.js\";\n\n/*\n * Reloads the revision a review is tracking after an AI or automation step may have changed it\n * (R262). It works on the undecorated form presenter and never touches the review presenter, so\n * the review bar is not re-initialised. `true` means the reloaded revision differs from the loaded\n * one.\n */\nexport class CmsEntryContentReloader implements IReviewContentReloader {\n constructor(\n private readonly form: ContentEntryFormPresenter.Interface,\n private readonly revisionId: string\n ) {}\n\n async reload(): Promise<boolean> {\n const before = this.form.vm.entry;\n\n // The editor moved to another revision, or has none loaded: there is nothing to reload.\n if (!before || before.id !== this.revisionId) {\n return false;\n }\n\n // An unsaved edit is never overwritten. While a review locks the form it cannot be dirty.\n if (this.form.vm.isDirty) {\n return false;\n }\n\n await this.form.loadRevision(this.revisionId);\n\n const after = this.form.vm.entry;\n\n if (!after || after.id !== this.revisionId) {\n return false;\n }\n\n const sameSavedOn = after.revisionSavedOn === before.revisionSavedOn;\n const sameModifiedOn = after.revisionModifiedOn === before.revisionModifiedOn;\n\n return !sameSavedOn || !sameModifiedOn;\n }\n}\n"],"names":["CmsEntryContentReloader","form","revisionId","before","after","sameSavedOn","sameModifiedOn"],"mappings":"AASO,MAAMA;IACT,YACqBC,IAAyC,EACzCC,UAAkB,CACrC;aAFmBD,IAAI,GAAJA;aACAC,UAAU,GAAVA;IAClB;IAEH,MAAM,SAA2B;QAC7B,MAAMC,SAAS,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK;QAGjC,IAAI,CAACA,UAAUA,OAAO,EAAE,KAAK,IAAI,CAAC,UAAU,EACxC,OAAO;QAIX,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EACpB,OAAO;QAGX,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU;QAE5C,MAAMC,QAAQ,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK;QAEhC,IAAI,CAACA,SAASA,MAAM,EAAE,KAAK,IAAI,CAAC,UAAU,EACtC,OAAO;QAGX,MAAMC,cAAcD,MAAM,eAAe,KAAKD,OAAO,eAAe;QACpE,MAAMG,iBAAiBF,MAAM,kBAAkB,KAAKD,OAAO,kBAAkB;QAE7E,OAAO,CAACE,eAAe,CAACC;IAC5B;AACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|