From f7ffd8429247db63890053aa428304bd10c8e7e7 Mon Sep 17 00:00:00 2001 From: Jorge Date: Fri, 22 Feb 2019 12:00:02 +0000 Subject: [PATCH] Add: End 2 end test global block inserter restrictions --- packages/e2e-test-utils/src/index.js | 1 + .../src/open-global-inserter.js | 9 ++ .../e2e-test-utils/src/search-for-block.js | 10 ++- .../specs/__snapshots__/inserter.test.js.snap | 83 +++++++++++++++++++ packages/e2e-tests/specs/inserter.test.js | 68 +++++++++++++++ 5 files changed, 167 insertions(+), 4 deletions(-) create mode 100644 packages/e2e-test-utils/src/open-global-inserter.js create mode 100644 packages/e2e-tests/specs/__snapshots__/inserter.test.js.snap create mode 100644 packages/e2e-tests/specs/inserter.test.js diff --git a/packages/e2e-test-utils/src/index.js b/packages/e2e-test-utils/src/index.js index 6f48ab320a206..283dba120c7fc 100644 --- a/packages/e2e-test-utils/src/index.js +++ b/packages/e2e-test-utils/src/index.js @@ -24,6 +24,7 @@ export { isCurrentURL } from './is-current-url'; export { loginUser } from './login-user'; export { observeFocusLoss } from './observe-focus-loss'; export { openDocumentSettingsSidebar } from './open-document-settings-sidebar'; +export { openGlobalInserter } from './open-global-inserter'; export { openPublishPanel } from './open-publish-panel'; export { pressKeyTimes } from './press-key-times'; export { pressKeyWithModifier } from './press-key-with-modifier'; diff --git a/packages/e2e-test-utils/src/open-global-inserter.js b/packages/e2e-test-utils/src/open-global-inserter.js new file mode 100644 index 0000000000000..40347b076c567 --- /dev/null +++ b/packages/e2e-test-utils/src/open-global-inserter.js @@ -0,0 +1,9 @@ +/** + * Opens the global inserter + */ +export async function openGlobalInserter() { + await page.click( '.edit-post-header [aria-label="Add block"]' ); + // Waiting here is necessary because sometimes the inserter takes more time to + // render than Puppeteer takes to complete the 'click' action + await page.waitForSelector( '.editor-inserter__menu' ); +} diff --git a/packages/e2e-test-utils/src/search-for-block.js b/packages/e2e-test-utils/src/search-for-block.js index e96b92839221a..03978f987502b 100644 --- a/packages/e2e-test-utils/src/search-for-block.js +++ b/packages/e2e-test-utils/src/search-for-block.js @@ -1,12 +1,14 @@ +/** + * Internal dependencies + */ +import { openGlobalInserter } from './open-global-inserter'; + /** * Search for block in the global inserter * * @param {string} searchTerm The text to search the inserter for. */ export async function searchForBlock( searchTerm ) { - await page.click( '.edit-post-header [aria-label="Add block"]' ); - // Waiting here is necessary because sometimes the inserter takes more time to - // render than Puppeteer takes to complete the 'click' action - await page.waitForSelector( '.editor-inserter__menu' ); + await openGlobalInserter(); await page.keyboard.type( searchTerm ); } diff --git a/packages/e2e-tests/specs/__snapshots__/inserter.test.js.snap b/packages/e2e-tests/specs/__snapshots__/inserter.test.js.snap new file mode 100644 index 0000000000000..0f10ed188f7ad --- /dev/null +++ b/packages/e2e-tests/specs/__snapshots__/inserter.test.js.snap @@ -0,0 +1,83 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Inserter all blocks should appear 1`] = ` +Array [ + "Amazon Kindle", + "Animoto", + "Archives", + "Audio", + "Button", + "Calendar", + "Categories", + "Classic", + "Cloudup", + "Code", + "CollegeHumor", + "Columns", + "Cover", + "Crowdsignal", + "Custom HTML", + "Dailymotion", + "Embed", + "Facebook", + "File", + "Flickr", + "Gallery", + "Heading", + "Hulu", + "Image", + "Imgur", + "Inline Image", + "Instagram", + "Issuu", + "Kickstarter", + "Latest Comments", + "Latest Posts", + "List", + "Media & Text", + "Meetup.com", + "Mixcloud", + "More", + "Page Break", + "Paragraph", + "Preformatted", + "Pullquote", + "Quote", + "RSS", + "Reddit", + "ReverbNation", + "Screencast", + "Scribd", + "Search", + "Separator", + "Shortcode", + "Slideshare", + "SmugMug", + "SoundCloud", + "Spacer", + "Speaker Deck", + "Spotify", + "TED", + "Table", + "Tag Cloud", + "Tumblr", + "Twitter", + "Verse", + "Video", + "VideoPress", + "Vimeo", + "WordPress", + "WordPress.tv", + "YouTube", +] +`; + +exports[`Inserter media & text block should restrict allowed blocks 1`] = ` +Array [ + "Button", + "Heading", + "Inline Image", + "List", + "Paragraph", +] +`; diff --git a/packages/e2e-tests/specs/inserter.test.js b/packages/e2e-tests/specs/inserter.test.js new file mode 100644 index 0000000000000..5405bd95bd8ae --- /dev/null +++ b/packages/e2e-tests/specs/inserter.test.js @@ -0,0 +1,68 @@ +/** + * External dependencies + */ +import { sortBy, uniq } from 'lodash'; + +/** + * WordPress dependencies + */ +import { + createNewPost, + insertBlock, + openGlobalInserter, +} from '@wordpress/e2e-test-utils'; + +describe( 'Inserter', () => { + const openAllInserterCategories = async () => { + const notOpenCategoryPanels = await page.$$( + '.editor-inserter__results .components-panel__body:not(.is-opened)' + ); + for ( const categoryPanel of notOpenCategoryPanels ) { + await categoryPanel.click(); + } + }; + + const getAllInserterItemTitles = async () => { + const inserterItemTitles = await page.evaluate( () => { + return Array.from( + document.querySelectorAll( + '.editor-inserter__results .editor-block-types-list__item-title' + ) + ).map( + ( inserterItem ) => { + return inserterItem.innerText; + } + ); + } ); + return sortBy( uniq( inserterItemTitles ) ); + }; + + beforeEach( async () => { + await createNewPost(); + } ); + + it( 'all blocks should appear', async () => { + await page.click( '.editor-default-block-appender' ); + await openGlobalInserter(); + await openAllInserterCategories(); + expect( await getAllInserterItemTitles() ).toMatchSnapshot(); + } ); + + it( 'media & text block should restrict allowed blocks', async () => { + await insertBlock( 'Media & Text' ); + await page.click( '.wp-block-media-text .editor-rich-text' ); + await openGlobalInserter(); + await openAllInserterCategories(); + expect( await getAllInserterItemTitles() ).toMatchSnapshot(); + } ); + + it( 'no blocks should be allowed inside columns', async () => { + await insertBlock( 'Columns' ); + await page.click( '[aria-label="Block Navigation"]' ); + const columnBlockMenuItem = ( await page.$x( '//button[contains(concat(" ", @class, " "), " editor-block-navigation__item-button ")][text()="Column"]' ) )[ 0 ]; + await columnBlockMenuItem.click(); + await openGlobalInserter(); + await openAllInserterCategories(); + expect( await getAllInserterItemTitles() ).toHaveLength( 0 ); + } ); +} );