Skip to content

Commit

Permalink
Add: end to end test to InnerBlocks allowed block restriction (#14054)
Browse files Browse the repository at this point in the history
  • Loading branch information
jorgefilipecosta authored Mar 13, 2019
1 parent a06f931 commit cd456f6
Show file tree
Hide file tree
Showing 13 changed files with 323 additions and 38 deletions.
9 changes: 9 additions & 0 deletions packages/e2e-test-utils/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,12 @@
## 1.1.0 (Unreleased)

### New Features

- New Function: `getAllBlockInserterItemTitles` - Returns an array of strings with all inserter item titles.
- New Function: `openAllBlockInserterCategories` - Opens all block inserter categories.
- New Function: `getAllBlockInserterItemTitles` - Opens the global block inserter.


## 1.0.0 (2019-03-06)

- Initial release.
90 changes: 56 additions & 34 deletions packages/e2e-test-utils/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ Clicks on More Menu item, searches for the button with the text provided and cli

### createEmbeddingMatcher

[src/index.js#L48-L48](src/index.js#L48-L48)
[src/index.js#L51-L51](src/index.js#L51-L51)

Creates a function to determine if a request is embedding a certain URL.

Expand All @@ -102,7 +102,7 @@ Creates a function to determine if a request is embedding a certain URL.

### createJSONResponse

[src/index.js#L48-L48](src/index.js#L48-L48)
[src/index.js#L51-L51](src/index.js#L51-L51)

Respond to a request with a JSON response.

Expand Down Expand Up @@ -141,7 +141,7 @@ Creates new URL by parsing base URL, WPPath and query string.

### createURLMatcher

[src/index.js#L48-L48](src/index.js#L48-L48)
[src/index.js#L51-L51](src/index.js#L51-L51)

Creates a function to determine if a request is calling a URL with the substring present.

Expand Down Expand Up @@ -220,10 +220,20 @@ Finds the button responsible for toggling the sidebar panel with the provided ti

`?ElementHandle`: Object that represents an in-page DOM element.

### getAllBlocks
### getAllBlockInserterItemTitles

[src/index.js#L18-L18](src/index.js#L18-L18)

Returns an array of strings with all inserter item titles.

**Returns**

`Promise`: Promise resolving with an array containing all inserter item titles.

### getAllBlocks

[src/index.js#L19-L19](src/index.js#L19-L19)

Returns an array with all blocks; Equivalent to calling wp.data.select( 'core/editor' ).getBlocks();

**Returns**
Expand All @@ -232,7 +242,7 @@ Returns an array with all blocks; Equivalent to calling wp.data.select( 'core/ed

### getAvailableBlockTransforms

[src/index.js#L19-L19](src/index.js#L19-L19)
[src/index.js#L20-L20](src/index.js#L20-L20)

Returns an array of strings with all block titles,
that the current selected block can be transformed into.
Expand All @@ -243,7 +253,7 @@ that the current selected block can be transformed into.

### getEditedPostContent

[src/index.js#L20-L20](src/index.js#L20-L20)
[src/index.js#L21-L21](src/index.js#L21-L21)

Returns a promise which resolves with the edited post content (HTML string).

Expand All @@ -253,7 +263,7 @@ Returns a promise which resolves with the edited post content (HTML string).

### hasBlockSwitcher

[src/index.js#L21-L21](src/index.js#L21-L21)
[src/index.js#L22-L22](src/index.js#L22-L22)

Returns a boolean indicating if the current selected block has a block switcher or not.

Expand All @@ -263,7 +273,7 @@ Returns a boolean indicating if the current selected block has a block switcher

### insertBlock

[src/index.js#L22-L22](src/index.js#L22-L22)
[src/index.js#L23-L23](src/index.js#L23-L23)

Opens the inserter, searches for the given term, then selects the first
result that appears.
Expand All @@ -275,7 +285,7 @@ result that appears.

### installPlugin

[src/index.js#L23-L23](src/index.js#L23-L23)
[src/index.js#L24-L24](src/index.js#L24-L24)

Installs a plugin from the WP.org repository.

Expand All @@ -286,7 +296,7 @@ Installs a plugin from the WP.org repository.

### isCurrentURL

[src/index.js#L24-L24](src/index.js#L24-L24)
[src/index.js#L25-L25](src/index.js#L25-L25)

Checks if current URL is a WordPress path.

Expand All @@ -301,7 +311,7 @@ Checks if current URL is a WordPress path.

### isInDefaultBlock

[src/index.js#L25-L25](src/index.js#L25-L25)
[src/index.js#L26-L26](src/index.js#L26-L26)

Checks if the block that is focused is the default block.

Expand All @@ -311,7 +321,7 @@ Checks if the block that is focused is the default block.

### loginUser

[src/index.js#L26-L26](src/index.js#L26-L26)
[src/index.js#L27-L27](src/index.js#L27-L27)

Performs log in with specified username and password.

Expand All @@ -322,7 +332,7 @@ Performs log in with specified username and password.

### mockOrTransform

[src/index.js#L48-L48](src/index.js#L48-L48)
[src/index.js#L51-L51](src/index.js#L51-L51)

Mocks a request with the supplied mock object, or allows it to run with an optional transform, based on the
deserialised JSON response for the request.
Expand All @@ -339,26 +349,38 @@ deserialised JSON response for the request.

### observeFocusLoss

[src/index.js#L27-L27](src/index.js#L27-L27)
[src/index.js#L28-L28](src/index.js#L28-L28)

Binds to the document on page load which throws an error if a `focusout`
event occurs without a related target (i.e. focus loss).

### openAllBlockInserterCategories

[src/index.js#L29-L29](src/index.js#L29-L29)

Opens all block inserter categories.

### openDocumentSettingsSidebar

[src/index.js#L28-L28](src/index.js#L28-L28)
[src/index.js#L30-L30](src/index.js#L30-L30)

Clicks on the button in the header which opens Document Settings sidebar when it is closed.

### openGlobalBlockInserter

[src/index.js#L31-L31](src/index.js#L31-L31)

Opens the global block inserter.

### openPublishPanel

[src/index.js#L29-L29](src/index.js#L29-L29)
[src/index.js#L32-L32](src/index.js#L32-L32)

Opens the publish panel.

### pressKeyTimes

[src/index.js#L30-L30](src/index.js#L30-L30)
[src/index.js#L33-L33](src/index.js#L33-L33)

Presses the given keyboard key a number of times in sequence.

Expand All @@ -373,7 +395,7 @@ Presses the given keyboard key a number of times in sequence.

### pressKeyWithModifier

[src/index.js#L31-L31](src/index.js#L31-L31)
[src/index.js#L34-L34](src/index.js#L34-L34)

Performs a key press with modifier (Shift, Control, Meta, Alt), where each modifier
is normalized to platform-specific modifier.
Expand All @@ -385,7 +407,7 @@ is normalized to platform-specific modifier.

### publishPost

[src/index.js#L32-L32](src/index.js#L32-L32)
[src/index.js#L35-L35](src/index.js#L35-L35)

Publishes the post, resolving once the request is complete (once a notice
is displayed).
Expand All @@ -396,7 +418,7 @@ is displayed).

### publishPostWithPrePublishChecksDisabled

[src/index.js#L33-L33](src/index.js#L33-L33)
[src/index.js#L36-L36](src/index.js#L36-L36)

Publishes the post without the pre-publish checks,
resolving once the request is complete (once a notice is displayed).
Expand All @@ -407,7 +429,7 @@ resolving once the request is complete (once a notice is displayed).

### saveDraft

[src/index.js#L34-L34](src/index.js#L34-L34)
[src/index.js#L37-L37](src/index.js#L37-L37)

Saves the post as a draft, resolving once the request is complete (once the
"Saved" indicator is displayed).
Expand All @@ -418,7 +440,7 @@ Saves the post as a draft, resolving once the request is complete (once the

### searchForBlock

[src/index.js#L35-L35](src/index.js#L35-L35)
[src/index.js#L38-L38](src/index.js#L38-L38)

Search for block in the global inserter

Expand All @@ -428,7 +450,7 @@ Search for block in the global inserter

### selectBlockByClientId

[src/index.js#L36-L36](src/index.js#L36-L36)
[src/index.js#L39-L39](src/index.js#L39-L39)

Given the clientId of a block, selects the block on the editor.

Expand All @@ -438,7 +460,7 @@ Given the clientId of a block, selects the block on the editor.

### setBrowserViewport

[src/index.js#L37-L37](src/index.js#L37-L37)
[src/index.js#L40-L40](src/index.js#L40-L40)

Sets browser viewport to specified type.

Expand All @@ -448,7 +470,7 @@ Sets browser viewport to specified type.

### setPostContent

[src/index.js#L38-L38](src/index.js#L38-L38)
[src/index.js#L41-L41](src/index.js#L41-L41)

Sets code editor content

Expand All @@ -462,7 +484,7 @@ Sets code editor content

### setUpResponseMocking

[src/index.js#L48-L48](src/index.js#L48-L48)
[src/index.js#L51-L51](src/index.js#L51-L51)

Sets up mock checks and responses. Accepts a list of mock settings with the following properties:

Expand Down Expand Up @@ -493,7 +515,7 @@ If none of the mock settings match the request, the request is allowed to contin

### switchEditorModeTo

[src/index.js#L39-L39](src/index.js#L39-L39)
[src/index.js#L42-L42](src/index.js#L42-L42)

Switches editor mode.

Expand All @@ -503,21 +525,21 @@ Switches editor mode.

### switchUserToAdmin

[src/index.js#L40-L40](src/index.js#L40-L40)
[src/index.js#L43-L43](src/index.js#L43-L43)

Switches the current user to the admin user (if the user
running the test is not already the admin user).

### switchUserToTest

[src/index.js#L41-L41](src/index.js#L41-L41)
[src/index.js#L44-L44](src/index.js#L44-L44)

Switches the current user to whichever user we should be
running the tests as (if we're not already that user).

### toggleScreenOption

[src/index.js#L42-L42](src/index.js#L42-L42)
[src/index.js#L45-L45](src/index.js#L45-L45)

Toggles the screen option with the given label.

Expand All @@ -528,7 +550,7 @@ Toggles the screen option with the given label.

### transformBlockTo

[src/index.js#L43-L43](src/index.js#L43-L43)
[src/index.js#L46-L46](src/index.js#L46-L46)

Converts editor's block type.

Expand All @@ -538,7 +560,7 @@ Converts editor's block type.

### uninstallPlugin

[src/index.js#L44-L44](src/index.js#L44-L44)
[src/index.js#L47-L47](src/index.js#L47-L47)

Uninstalls a plugin.

Expand All @@ -548,7 +570,7 @@ Uninstalls a plugin.

### visitAdminPage

[src/index.js#L45-L45](src/index.js#L45-L45)
[src/index.js#L48-L48](src/index.js#L48-L48)

Visits admin page; if user is not logged in then it logging in it first, then visits admin page.

Expand All @@ -559,7 +581,7 @@ Visits admin page; if user is not logged in then it logging in it first, then vi

### waitForWindowDimensions

[src/index.js#L46-L46](src/index.js#L46-L46)
[src/index.js#L49-L49](src/index.js#L49-L49)

Function that waits until the page viewport has the required dimensions.
It is being used to address a problem where after using setViewport the execution may continue,
Expand Down
24 changes: 24 additions & 0 deletions packages/e2e-test-utils/src/get-all-block-inserter-item-titles.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
/**
* External dependencies
*/
import { sortBy, uniq } from 'lodash';

/**
* Returns an array of strings with all inserter item titles.
*
* @return {Promise} Promise resolving with an array containing all inserter item titles.
*/
export async function getAllBlockInserterItemTitles() {
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 ) );
}
3 changes: 3 additions & 0 deletions packages/e2e-test-utils/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ export { enablePrePublishChecks } from './enable-pre-publish-checks';
export { ensureSidebarOpened } from './ensure-sidebar-opened';
export { findSidebarPanelToggleButtonWithTitle } from './find-sidebar-panel-toggle-button-with-title';
export { findSidebarPanelWithTitle } from './find-sidebar-panel-with-title';
export { getAllBlockInserterItemTitles } from './get-all-block-inserter-item-titles';
export { getAllBlocks } from './get-all-blocks';
export { getAvailableBlockTransforms } from './get-available-block-transforms';
export { getEditedPostContent } from './get-edited-post-content';
Expand All @@ -25,7 +26,9 @@ export { isCurrentURL } from './is-current-url';
export { isInDefaultBlock } from './is-in-default-block';
export { loginUser } from './login-user';
export { observeFocusLoss } from './observe-focus-loss';
export { openAllBlockInserterCategories } from './open-all-block-inserter-categories';
export { openDocumentSettingsSidebar } from './open-document-settings-sidebar';
export { openGlobalBlockInserter } from './open-global-block-inserter';
export { openPublishPanel } from './open-publish-panel';
export { pressKeyTimes } from './press-key-times';
export { pressKeyWithModifier } from './press-key-with-modifier';
Expand Down
11 changes: 11 additions & 0 deletions packages/e2e-test-utils/src/open-all-block-inserter-categories.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
/**
* Opens all block inserter categories.
*/
export async function openAllBlockInserterCategories() {
const notOpenCategoryPanels = await page.$$(
'.editor-inserter__results .components-panel__body:not(.is-opened)'
);
for ( const categoryPanel of notOpenCategoryPanels ) {
await categoryPanel.click();
}
}
Loading

0 comments on commit cd456f6

Please sign in to comment.