From c72b48da735f44a3ccafb7a6dc9ba5213f3844db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20de=20Juvigny?= <8087692+remidej@users.noreply.github.com> Date: Mon, 26 May 2025 14:14:20 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20don't=20show=20add=20to=20release=20bulk?= =?UTF-8?q?=20actions=20when=20draft=20and=20publish=20di=E2=80=A6=20(#235?= =?UTF-8?q?78)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: don't show add to release bulk actions when draft and publish disabled * fix: force skip guided tour --- .../admin/src/components/ReleaseAction.tsx | 4 +- .../content-releases/releases-page.spec.ts | 44 ++++++++++++++++++- 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/packages/core/content-releases/admin/src/components/ReleaseAction.tsx b/packages/core/content-releases/admin/src/components/ReleaseAction.tsx index ef3d7631db..7de7b5bf08 100644 --- a/packages/core/content-releases/admin/src/components/ReleaseAction.tsx +++ b/packages/core/content-releases/admin/src/components/ReleaseAction.tsx @@ -7,6 +7,7 @@ import { useRBAC, isFetchError, } from '@strapi/admin/strapi-admin'; +import { unstable_useContentManagerContext as useContentManagerContext } from '@strapi/content-manager/strapi-admin'; import { Box, Button, @@ -63,6 +64,7 @@ const ReleaseAction: BulkActionComponent = ({ documents, model }) => { const { allowedActions: { canCreate }, } = useRBAC(releasePermissions); + const { hasDraftAndPublish } = useContentManagerContext(); // Get all the releases not published const response = useGetReleasesQuery(); @@ -139,7 +141,7 @@ const ReleaseAction: BulkActionComponent = ({ documents, model }) => { } }; - if (!canCreate || !canPublish) return null; + if (!hasDraftAndPublish || !canCreate || !canPublish) return null; return { actionType: 'release', diff --git a/tests/e2e/tests/content-releases/releases-page.spec.ts b/tests/e2e/tests/content-releases/releases-page.spec.ts index 6d77e69617..91ef20a480 100644 --- a/tests/e2e/tests/content-releases/releases-page.spec.ts +++ b/tests/e2e/tests/content-releases/releases-page.spec.ts @@ -1,17 +1,25 @@ import { test, expect } from '@playwright/test'; -import { clickAndWait, describeOnCondition } from '../../utils/shared'; +import { clickAndWait, describeOnCondition, skipCtbTour } from '../../utils/shared'; import { resetDatabaseAndImportDataFromPath } from '../../utils/dts-import'; import { login } from '../../utils/login'; +import { waitForRestart } from '../../utils/restart'; +import { resetFiles } from '../../utils/file-reset'; const edition = process.env.STRAPI_DISABLE_EE === 'true' ? 'CE' : 'EE'; describeOnCondition(edition === 'EE')('Releases page', () => { test.beforeEach(async ({ page }) => { await resetDatabaseAndImportDataFromPath('with-admin.tar'); + await resetFiles(); await page.goto('/admin'); + await page.evaluate(() => window.localStorage.setItem('GUIDED_TOUR_SKIPPED', 'true')); await login({ page }); }); + test.afterAll(async () => { + await resetFiles(); + }); + test('A user should be able to create a release without scheduling it and view their pending and done releases', async ({ page, }) => { @@ -138,4 +146,38 @@ describeOnCondition(edition === 'EE')('Releases page', () => { await expect(page.getByText('The Diamond Dogs')).toBeVisible(); }); }); + + test('Should not show "add to release" bulk action for content types without draft & publish enabled', async ({ + page, + }) => { + // Publish articles, otherwise they'll be deleted when we disable draft & publish + await clickAndWait(page, page.getByRole('link', { name: 'Content Manager' })); + await clickAndWait(page, page.getByRole('link', { name: 'Article' })); + await page.getByRole('checkbox', { name: 'Select all entries' }).check(); + await clickAndWait(page, page.getByRole('button', { name: 'Publish' })); + await page.getByRole('button', { name: 'Publish' }).click(); + const publishConfirmationDialog = page.getByRole('alertdialog', { name: 'Confirmation' }); + await expect(publishConfirmationDialog).toBeVisible(); + await publishConfirmationDialog.getByRole('button', { name: 'Publish' }).click(); + + // Disable draft & publish for the Article content type + await clickAndWait(page, page.getByRole('link', { name: 'Content-Type Builder' })); + await skipCtbTour(page); + await clickAndWait(page, page.getByRole('link', { name: 'Article' })); + await clickAndWait(page, page.getByRole('button', { name: 'Edit', exact: true })); + await clickAndWait(page, page.getByRole('tab', { name: /advanced settings/i })); + await page.getByLabel('Draft & publish').click(); + const ctbConfirmationDialog = page.getByRole('alertdialog', { name: 'Confirmation' }); + await expect(ctbConfirmationDialog).toBeVisible(); + await ctbConfirmationDialog.getByRole('button', { name: /disable/i }).click(); + await clickAndWait(page, page.getByRole('button', { name: 'Finish' })); + await waitForRestart(page); + + // Go to the content manager and bulk select articlesto make sure the "add to release" does not show up + await clickAndWait(page, page.getByRole('link', { name: 'Content Manager' })); + await clickAndWait(page, page.getByRole('link', { name: 'Article' })); + await expect(page.getByRole('heading', { name: 'Article' })).toBeVisible(); + await page.getByRole('checkbox', { name: 'Select all entries' }).check(); + await expect(page.getByRole('button', { name: /add to release/i })).not.toBeVisible(); + }); });