diff --git a/packages/e2e-tests/specs/editor/various/publish-button.test.js b/packages/e2e-tests/specs/editor/various/publish-button.test.js deleted file mode 100644 index 90ef0950e535bb..00000000000000 --- a/packages/e2e-tests/specs/editor/various/publish-button.test.js +++ /dev/null @@ -1,46 +0,0 @@ -/** - * WordPress dependencies - */ -import { - arePrePublishChecksEnabled, - disablePrePublishChecks, - enablePrePublishChecks, - createNewPost, - canvas, -} from '@wordpress/e2e-test-utils'; - -describe( 'PostPublishButton', () => { - let werePrePublishChecksEnabled; - beforeEach( async () => { - await createNewPost(); - werePrePublishChecksEnabled = await arePrePublishChecksEnabled(); - if ( werePrePublishChecksEnabled ) { - await disablePrePublishChecks(); - } - } ); - - afterEach( async () => { - if ( werePrePublishChecksEnabled ) { - await enablePrePublishChecks(); - } - } ); - - it( 'should be disabled when post is not saveable', async () => { - const publishButton = await page.$( - '.editor-post-publish-button[aria-disabled="true"]' - ); - expect( publishButton ).not.toBeNull(); - } ); - - it( 'should be disabled when post is being saved', async () => { - await canvas().type( '.editor-post-title__input', 'E2E Test Post' ); // Make it saveable. - expect( - await page.$( '.editor-post-publish-button[aria-disabled="true"]' ) - ).toBeNull(); - - await page.click( '.editor-post-save-draft' ); - expect( - await page.$( '.editor-post-publish-button[aria-disabled="true"]' ) - ).not.toBeNull(); - } ); -} ); diff --git a/test/e2e/specs/editor/various/publish-button.spec.js b/test/e2e/specs/editor/various/publish-button.spec.js new file mode 100644 index 00000000000000..b1e4b07a28580f --- /dev/null +++ b/test/e2e/specs/editor/various/publish-button.spec.js @@ -0,0 +1,103 @@ +/** + * WordPress dependencies + */ +const { test, expect } = require( '@wordpress/e2e-test-utils-playwright' ); + +function defer() { + let resolve; + const deferred = new Promise( ( res ) => { + resolve = res; + } ); + deferred.resolve = resolve; + return deferred; +} + +test.describe( 'Post publish button', () => { + test( 'should be disabled when post is not saveable', async ( { + admin, + page, + } ) => { + await admin.createNewPost(); + await expect( + page + .getByRole( 'region', { name: 'Editor top bar' } ) + .getByRole( 'button', { name: 'Publish' } ) + ).toBeDisabled(); + } ); + + test( 'should be disabled when post is being saved', async ( { + admin, + editor, + page, + } ) => { + await admin.createNewPost(); + await editor.canvas + .getByRole( 'textbox', { + name: 'Add title', + } ) + .fill( 'Test post' ); + + const topBar = page.getByRole( 'region', { name: 'Editor top bar' } ); + await expect( + topBar.getByRole( 'button', { name: 'Publish' } ) + ).toBeEnabled(); + + const postId = new URL( page.url() ).searchParams.get( 'post' ); + const deferred = defer(); + + await page.route( + ( url ) => + url.searchParams.has( + 'rest_route', + encodeURIComponent( `/wp/v2/posts/${ postId }` ) + ), + async ( route ) => { + await deferred; + await route.continue(); + } + ); + + await topBar.getByRole( 'button', { name: 'Save draft' } ).click(); + await expect( + topBar.getByRole( 'button', { name: 'Publish' } ) + ).toBeDisabled(); + deferred.resolve(); + } ); + + test( 'should be disabled when metabox is being saved', async ( { + admin, + page, + requestUtils, + } ) => { + await requestUtils.activatePlugin( 'gutenberg-test-plugin-meta-box' ); + await admin.createNewPost(); + await page + .getByRole( 'textbox', { + name: 'Add title', + } ) + .fill( 'Test post' ); + + const topBar = page.getByRole( 'region', { name: 'Editor top bar' } ); + await expect( + topBar.getByRole( 'button', { name: 'Publish' } ) + ).toBeEnabled(); + + const deferred = defer(); + + await page.route( + ( url ) => url.searchParams.has( 'meta-box-loader', 1 ), + async ( route ) => { + await deferred; + await route.continue(); + } + ); + + await topBar.getByRole( 'button', { name: 'Save draft' } ).click(); + await expect( + topBar.getByRole( 'button', { name: 'Publish' } ) + ).toBeDisabled(); + deferred.resolve(); + + await requestUtils.deactivatePlugin( 'gutenberg-test-plugin-meta-box' ); + } ); +} );