From 9c86166ee63064d3a2c714d8a89a380ed668f9bc Mon Sep 17 00:00:00 2001 From: Carolina Gonzalez Date: Mon, 6 May 2024 18:05:04 -0400 Subject: [PATCH] fix: use discard when doc is not published (#6535) --- .../document-pair/serverOperations/delete.ts | 21 ++++++++++++-- .../e2e/tests/document-actions/delete.spec.ts | 29 +++++++++++++++++++ 2 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 test/e2e/tests/document-actions/delete.spec.ts diff --git a/packages/sanity/src/core/store/_legacy/document/document-pair/serverOperations/delete.ts b/packages/sanity/src/core/store/_legacy/document/document-pair/serverOperations/delete.ts index 29d1ea6cc58..d6ba20e6f8a 100644 --- a/packages/sanity/src/core/store/_legacy/document/document-pair/serverOperations/delete.ts +++ b/packages/sanity/src/core/store/_legacy/document/document-pair/serverOperations/delete.ts @@ -3,16 +3,33 @@ import {isLiveEditEnabled} from '../utils/isLiveEditEnabled' export const del: OperationImpl<[], 'NOTHING_TO_DELETE'> = { disabled: ({snapshots}) => (snapshots.draft || snapshots.published ? false : 'NOTHING_TO_DELETE'), - execute: ({client: globalClient, schema, idPair, typeName}) => { + execute: ({client: globalClient, schema, idPair, typeName, snapshots}) => { if (isLiveEditEnabled(schema, typeName)) { const tx = globalClient.observable.transaction().delete(idPair.publishedId) return tx.commit({tag: 'document.delete'}) } const vXClient = globalClient.withConfig({apiVersion: 'X'}) - const {dataset} = globalClient.config() + //the delete action requires a published doc -- discard if not present + if (!snapshots.published) { + return vXClient.observable.request({ + url: `/data/actions/${dataset}`, + method: 'post', + tag: 'document.discard', + body: { + actions: [ + { + actionType: 'sanity.action.document.discard', + draftId: idPair.draftId, + publishedId: idPair.publishedId, + }, + ], + }, + }) + } + return vXClient.observable.request({ url: `/data/actions/${dataset}`, method: 'post', diff --git a/test/e2e/tests/document-actions/delete.spec.ts b/test/e2e/tests/document-actions/delete.spec.ts new file mode 100644 index 00000000000..8f0f6fa047e --- /dev/null +++ b/test/e2e/tests/document-actions/delete.spec.ts @@ -0,0 +1,29 @@ +import {expect} from '@playwright/test' +import {test} from '@sanity/test' + +const name = 'Test Name' + +test(`unpublished documents can be deleted`, async ({page, createDraftDocument}) => { + await createDraftDocument('/test/content/author') + await page.getByTestId('field-name').getByTestId('string-input').fill(name) + + await page.getByTestId('action-menu-button').click() + await page.getByTestId('action-Delete').click() + await page.getByRole('button', {name: 'Delete now'}).click() + + await expect(page.getByText('The document was successfully deleted')).toBeVisible() +}) + +test(`published documents can be deleted`, async ({page, createDraftDocument}) => { + await createDraftDocument('/test/content/author') + await page.getByTestId('field-name').getByTestId('string-input').fill(name) + + await page.getByTestId('action-Publish').click() + await expect(page.getByText('was published')).toBeVisible() + + await page.getByTestId('action-menu-button').click() + await page.getByTestId('action-Delete').click() + await page.getByRole('button', {name: 'Delete now'}).click() + + await expect(page.getByText('The document was successfully deleted')).toBeVisible() +})