Skip to content
This repository has been archived by the owner on Feb 23, 2024. It is now read-only.

Fix site editor E2E tests for Gutenberg latest #6080

Merged

Conversation

tomasztunik
Copy link
Contributor

@tomasztunik tomasztunik commented Mar 22, 2022

This makes the E2E tests on latest Gutenberg to pass again.

  • Add handling of editor context via GUTENBERG_EDITOR_CONTEXT env var. It's set on CI to 'gutenberg' to ensure we are using themes.php admin page to interface with templates as because of the E2E tests failing with the last version of Gutenberg #6071 regression it's not possible to use site-editor.php for installed gutenberg and core gutenberg using the same URL. We already had themes.php and site-editor.php handling in place but it was not used and had a bug in it. Adding the context now makes use of this and fixed the bug that was hidden there.
  • Ensure saveTemplate util completes by waiting for successful response before handing over control to follow up steps
  • Updates wordpress/e2e-test-utils package ⚠️ rolled back the update to 7.0.2 - we are stuck on 6.0.x until further testing. It is causing test flakiness around usage of disableSiteEditorWelcomeGuide

TODO for future after WordPress v6 gets released we should review if we can run all the tests just using site-editor.php and drop the GUTENBERG_EDITOR_CONTEXT usage.

Fixes #6071

Testing

Automated Tests

  • Changes in this PR are covered by Automated Tests.
    • E2E tests

Manual Testing

How to test the changes in this Pull Request:

  1. E2E tests should be passing on CI for latest Gutenberg and Gutenberg included in WP core

@tomasztunik tomasztunik added the skip-changelog PRs that you don't want to appear in the changelog. label Mar 22, 2022
@rubikuserbot rubikuserbot requested a review from a team March 22, 2022 15:16
@github-actions
Copy link
Contributor

update to navigate to site-editor.php and use visitSiteEd...

update to navigate to site-editor.php and use visitSiteEditor util once WordPress 6.0 is released.


https://github.com/woocommerce/woocommerce-gutenberg-products-block/blob/43c7c1be26f5582bbbc87fc8d87ba40af86f4b6b/tests/e2e/utils.js#L159-L170

🚀 This comment was generated by the automations bot based on a todo comment in 43c7c1b in #6080. cc @tomasztunik

@tomasztunik tomasztunik added tools Used for work on build or release tools. category: tests type: bug The issue/PR concerns a confirmed bug. labels Mar 22, 2022
@github-actions
Copy link
Contributor

github-actions bot commented Mar 22, 2022

Size Change: 0 B

Total Size: 862 kB

ℹ️ View Unchanged
Filename Size
build/active-filters-frontend.js 5.92 kB
build/active-filters.js 6.96 kB
build/all-products-frontend.js 18.2 kB
build/all-products.js 33.9 kB
build/all-reviews.js 8.02 kB
build/attribute-filter-frontend.js 16.8 kB
build/attribute-filter.js 13.1 kB
build/blocks-checkout.js 17.4 kB
build/cart-blocks/accepted-payment-methods-frontend.js 1.16 kB
build/cart-blocks/checkout-button-frontend.js 1.15 kB
build/cart-blocks/empty-cart-frontend.js 346 B
build/cart-blocks/express-payment-frontend.js 5.19 kB
build/cart-blocks/filled-cart-frontend.js 759 B
build/cart-blocks/items-frontend.js 300 B
build/cart-blocks/line-items-frontend.js 5.5 kB
build/cart-blocks/order-summary-frontend.js 8.87 kB
build/cart-blocks/totals-frontend.js 320 B
build/cart-frontend.js 45 kB
build/cart.js 43.6 kB
build/checkout-blocks/actions-frontend.js 1.41 kB
build/checkout-blocks/billing-address--checkout-blocks/shipping-address-frontend.js 4.12 kB
build/checkout-blocks/billing-address-frontend.js 891 B
build/checkout-blocks/contact-information-frontend.js 2.83 kB
build/checkout-blocks/express-payment-frontend.js 5.49 kB
build/checkout-blocks/fields-frontend.js 344 B
build/checkout-blocks/order-note-frontend.js 1.52 kB
build/checkout-blocks/order-summary-frontend.js 11.3 kB
build/checkout-blocks/payment-frontend.js 7.77 kB
build/checkout-blocks/shipping-address-frontend.js 998 B
build/checkout-blocks/shipping-methods-frontend.js 4.74 kB
build/checkout-blocks/terms-frontend.js 1.22 kB
build/checkout-blocks/totals-frontend.js 325 B
build/checkout-frontend.js 47.2 kB
build/checkout.js 44.7 kB
build/featured-category.js 8.61 kB
build/featured-product.js 9.71 kB
build/handpicked-products.js 7.09 kB
build/legacy-template.js 2.19 kB
build/mini-cart-component-frontend.js 16.5 kB
build/mini-cart-contents-block/empty-cart-frontend.js 329 B
build/mini-cart-contents-block/filled-cart-frontend.js 230 B
build/mini-cart-contents-block/footer--mini-cart-contents-block/products-table-frontend.js 5.32 kB
build/mini-cart-contents-block/footer-frontend.js 5.67 kB
build/mini-cart-contents-block/items-frontend.js 226 B
build/mini-cart-contents-block/products-table-frontend.js 5.36 kB
build/mini-cart-contents-block/shopping-button-frontend.js 287 B
build/mini-cart-contents-block/title-frontend.js 367 B
build/mini-cart-contents.js 23.6 kB
build/mini-cart-frontend.js 1.72 kB
build/mini-cart.js 6.37 kB
build/price-filter-frontend.js 12.1 kB
build/price-filter.js 8.49 kB
build/price-format.js 1.19 kB
build/product-add-to-cart--product-button--product-category-list--product-image--product-price--product-r--a0326d00.js 222 B
build/product-add-to-cart--product-button--product-image--product-title.js 2.64 kB
build/product-add-to-cart-frontend.js 7 kB
build/product-add-to-cart.js 7.47 kB
build/product-best-sellers.js 7.37 kB
build/product-button--product-category-list--product-image--product-price--product-rating--product-sale-b--e17c7c01.js 500 B
build/product-button-frontend.js 2.08 kB
build/product-button.js 2.29 kB
build/product-categories.js 3.17 kB
build/product-category-list-frontend.js 923 B
build/product-category-list.js 499 B
build/product-category.js 8.48 kB
build/product-image-frontend.js 1.85 kB
build/product-image.js 1.08 kB
build/product-new.js 7.67 kB
build/product-on-sale.js 7.98 kB
build/product-price-frontend.js 1.93 kB
build/product-price.js 1.51 kB
build/product-rating-frontend.js 1.15 kB
build/product-rating.js 730 B
build/product-sale-badge-frontend.js 1.09 kB
build/product-sale-badge.js 680 B
build/product-search.js 2.18 kB
build/product-sku-frontend.js 380 B
build/product-sku.js 382 B
build/product-stock-indicator-frontend.js 1.03 kB
build/product-stock-indicator.js 620 B
build/product-summary-frontend.js 1.33 kB
build/product-summary.js 918 B
build/product-tag-list-frontend.js 917 B
build/product-tag-list.js 495 B
build/product-tag.js 7.81 kB
build/product-title-frontend.js 1.28 kB
build/product-title.js 901 B
build/product-top-rated.js 7.9 kB
build/products-by-attribute.js 8.39 kB
build/reviews-by-category.js 11.4 kB
build/reviews-by-product.js 12.6 kB
build/reviews-frontend.js 6.97 kB
build/single-product-frontend.js 21.6 kB
build/single-product.js 10 kB
build/stock-filter-frontend.js 6.5 kB
build/stock-filter.js 6.57 kB
build/vendors--cart-blocks/line-items--cart-blocks/order-summary--checkout-blocks/order-summary--checkout--6efbf40e-frontend.js 5.26 kB
build/vendors--cart-blocks/line-items--checkout-blocks/order-summary--mini-cart-contents-block/products-table-frontend.js 3.14 kB
build/vendors--cart-blocks/order-summary--checkout-blocks/billing-address--checkout-blocks/order-summary---4f3822fa-frontend.js 19.3 kB
build/vendors--cart-blocks/order-summary--checkout-blocks/billing-address--checkout-blocks/order-summary---eb4d2cec-frontend.js 4.74 kB
build/vendors--mini-cart-contents-block/footer--mini-cart-contents-block/products-table-frontend.js 7.35 kB
build/vendors--product-add-to-cart-frontend.js 7.54 kB
build/wc-blocks-data.js 9.83 kB
build/wc-blocks-editor-style-rtl.css 4.86 kB
build/wc-blocks-editor-style.css 4.86 kB
build/wc-blocks-google-analytics.js 1.56 kB
build/wc-blocks-middleware.js 930 B
build/wc-blocks-registry.js 2.7 kB
build/wc-blocks-shared-context.js 1.52 kB
build/wc-blocks-shared-hocs.js 1.14 kB
build/wc-blocks-style-rtl.css 22.1 kB
build/wc-blocks-style.css 22.1 kB
build/wc-blocks-vendors-style-rtl.css 1.28 kB
build/wc-blocks-vendors-style.css 1.28 kB
build/wc-blocks-vendors.js 70.7 kB
build/wc-blocks.js 2.62 kB
build/wc-payment-method-bacs.js 816 B
build/wc-payment-method-cheque.js 811 B
build/wc-payment-method-cod.js 909 B
build/wc-payment-method-paypal.js 837 B
build/wc-settings.js 2.61 kB

compressed-size-action

@github-actions
Copy link
Contributor

update to always use site-editor.php once WordPress 6.0 i...

update to always use site-editor.php once WordPress 6.0 is released and verified. Remove usage of GUTENBERG_EDITOR_CONTEXT from from here and from workflows.


https://github.com/woocommerce/woocommerce-gutenberg-products-block/blob/44aeb8a7408eb416b221781e16621f051af867a5/tests/e2e/utils.js#L160-L172

🚀 This comment was generated by the automations bot based on a todo comment in 44aeb8a in #6080. cc @tomasztunik

@tjcafferkey tjcafferkey mentioned this pull request Mar 23, 2022
3 tasks
Copy link
Contributor

@sunyatasattva sunyatasattva left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nothing major, code looks excellent, just some small refactoring and you're good to go :)

tests/e2e/specs/backend/site-editing-templates.test.js Outdated Show resolved Hide resolved
@@ -167,6 +170,8 @@ describe( 'Store Editing Templates', () => {
await visitTemplateAndAddCustomParagraph( 'single-product' );

await goToSiteEditor( '?postType=wp_template' );
// we need to wait for the selctor to show up, sometimes the loading is delayed and test becomes falky
await page.waitForSelector( SELECTORS.templates.templateActions );
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In the interest of separating business logic from testing (like I mentioned in the E2E workshop), it'd be better to move this line within goToSiteEditor. Basically, it's goToSiteEditor responsibility to make sure we are in the right place and give back control to the program only when we are (and handle errors when we aren't).

Copy link
Contributor Author

@tomasztunik tomasztunik Mar 23, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But these wouldn't be there always. It's not a generic check. These would appear only if there were any edited templates available. Should we provide "states" along the path to distinguish what to wait for? We'd probably need another helper ie. goToSiteEditorTemplates(target: 'templates' | 'parts', hasEdits: boolean) or something - maybe then it would make sense.

Should we make it a separate issue to extract these as a separate helpers and think bit more about what utils we actually need there? These page objects would be great for this!

(resolved others for clarity)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Or maybe if we were extracting this to a separate hellper util we could use the waitForRespponse to ensure the templates data was loaded like I did it with the saveTemplate? Templates data is loaded async after the page was loaded first so we could improve it like so - should make it much more stable and maybe allow us to get rid of the try-catch?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Alright, because I know this is a blocker right now for many people, let's merge it. I'd be thankful if you created a new issue so we won't forget about this. Maybe link this thread. 🙏

* 1. `themes.php?page=gutenberg-edit-site` is the one used and available if the Gutenberg plugin is enabled.
* 2. `site-editor.php` is the one available in WP Core.
* 1. `themes.php?page=gutenberg-edit-site` this is legacy editor access used for wp <=5.8 compatibility
* themes.php is not accessible in 5.9+ when local Gutenberg is active.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing some backticks for consistency around themes.php. But, more importantly, I am not sure I understand this comment, could you clarify it a bit?

So themes.php?page=gutenberg-edit-site seems to be the way to go whenever Gutenberg is installed on <6.0, right? At least that's what I get by reading your code. The comment says themes is not accessible in 5.9+ when local Gutenberg is active, and I'm not sure I understand.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Argh, was tweaking text and made error - should be site-editor is not accessible!

Will reword it :)

await page.click( confirmSave );
await page.waitForSelector( `${ saveButton }[aria-disabled="true"]` );
await page.waitForResponse( ( res ) => {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Very excellent solution! 👌 +100 for this!

@github-actions
Copy link
Contributor

Update to always use site-editor.php once WordPress 6.0 i...

Update to always use site-editor.php once WordPress 6.0 is released and fix is verified. Remove usage of GUTENBERG_EDITOR_CONTEXT from from here and from workflows.


https://github.com/woocommerce/woocommerce-gutenberg-products-block/blob/75abdb9db044bc7f4f4e0a5bfb587f7308c9642c/tests/e2e/utils.js#L159-L171

🚀 This comment was generated by the automations bot based on a todo comment in 75abdb9 in #6080. cc @tomasztunik

Copy link
Contributor

@sunyatasattva sunyatasattva left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved (with reservation 😬 ). It is a blocker for many people so this solution is ok for now. I'm not fond of the repetition and the mixing of business logic and test logic, but we'll take care of it in another issue.

@@ -167,6 +170,8 @@ describe( 'Store Editing Templates', () => {
await visitTemplateAndAddCustomParagraph( 'single-product' );

await goToSiteEditor( '?postType=wp_template' );
// we need to wait for the selctor to show up, sometimes the loading is delayed and test becomes falky
await page.waitForSelector( SELECTORS.templates.templateActions );
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Alright, because I know this is a blocker right now for many people, let's merge it. I'd be thankful if you created a new issue so we won't forget about this. Maybe link this thread. 🙏

@github-actions github-actions bot added this to the 7.3.0 milestone Mar 23, 2022
@sunyatasattva sunyatasattva merged commit f5d386e into trunk Mar 23, 2022
@sunyatasattva sunyatasattva deleted the fix/6071-fix-test-env-editor-context-failing-fse-tests branch March 23, 2022 13:18
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
skip-changelog PRs that you don't want to appear in the changelog. tools Used for work on build or release tools. type: bug The issue/PR concerns a confirmed bug.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

E2E tests failing with the last version of Gutenberg
2 participants