Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Migrate multi-currency e2e tests to Playwright #9175

Merged
merged 41 commits into from
Aug 21, 2024

Conversation

cesarcosta99
Copy link
Contributor

@cesarcosta99 cesarcosta99 commented Jul 26, 2024

Resolves #8750.

Changes proposed in this Pull Request

This PR migrates all multi-currency specs we have in Puppeteer to Playwright:

  • merchant-admin-multi-currency.spec.jsmulti-currency.spec.ts
  • merchant-admin-multi-currency-on-boarding.spec.jsmulti-currency-on-boarding.spec.ts
  • merchant-admin-multi-currency-setup.spec.jsmulti-currency-setup.spec.ts
  • shopper-checkout-multi-currency.spec.jsmulti-currency-checkout.spec.ts

Some background on decisions I've made while migrating the specs:

  • The Playwright setup and new specs has been written in TypeScript, so I wrote the new helpers and multi-currency specs in TypeScript too.
  • I dropped the merchant-admin/shopper prefix in the filenames because they are within folders with the same name and it sounds redundant.
  • I kept the old utility functions in Puppeteer to reduce risks and also because they might be needed while we don't fully migrate.

Testing instructions

Setup

  1. Make sure you have the e2e environment setup before running the tests: npm run test:e2e-setup.
  2. If you need to set it up from scratch, see the README.

Ensure all GH actions below are passing, particularly the E2E Playwright Tests.

Test: Ensure all tests pass locally consistently

You can run the e2e tests multiple times and try different combinations to confirm they all pass and are stable. Some suggestions:

  • npm run test:e2e-pw multi-currency
  • npm run test:e2e-pw shopper/multi-currency
  • npm run test:e2e-pw merchant/multi-currency
  • npm run test:e2e-pw <multi-currency-spec-name>

Test: Ensure the migrated specs test what they're expected to test

You can ensure that by either comparing the old spec code with the new one, and/or watching the tests running via the UI command: npm run test:e2e-pw-ui multi-currency.


  • Run npm run changelog to add a changelog file, choose patch to leave it empty if the change is not significant. You can add multiple changelog files in one PR by running this command a few times.
  • Covered with tests (or have a good reason not to test in description ☝️)
  • Tested on mobile (or does not apply)

Post merge

@botwoo
Copy link
Collaborator

botwoo commented Jul 26, 2024

Test the build

Option 1. Jetpack Beta

  • Install and activate Jetpack Beta.
  • Use this build by searching for PR number 9175 or branch name dev/8750-migrate-mccy-e2e-tests-to-playwright in your-test.site/wp-admin/admin.php?page=jetpack-beta&plugin=woocommerce-payments

Option 2. Jurassic Ninja - available for logged-in A12s

🚀 Launch a JN site with this branch 🚀

ℹ️ Install this Tampermonkey script to get more options.


Build info:

  • Latest commit: 2fed4d8
  • Build time: 2024-08-20 16:47:57 UTC

Note: the build is updated when a new commit is pushed to this PR.

Copy link
Contributor

github-actions bot commented Jul 26, 2024

Size Change: 0 B

Total Size: 1.32 MB

ℹ️ View Unchanged
Filename Size
release/woocommerce-payments/assets/css/admin.css 1.08 kB
release/woocommerce-payments/assets/css/admin.rtl.css 1.08 kB
release/woocommerce-payments/assets/css/success.css 173 B
release/woocommerce-payments/assets/css/success.rtl.css 173 B
release/woocommerce-payments/dist/blocks-checkout-rtl.css 2.36 kB
release/woocommerce-payments/dist/blocks-checkout.css 2.36 kB
release/woocommerce-payments/dist/blocks-checkout.js 65.4 kB
release/woocommerce-payments/dist/cart-block.js 16.3 kB
release/woocommerce-payments/dist/cart.js 5.72 kB
release/woocommerce-payments/dist/checkout-rtl.css 708 B
release/woocommerce-payments/dist/checkout.css 710 B
release/woocommerce-payments/dist/checkout.js 32 kB
release/woocommerce-payments/dist/express-checkout-rtl.css 240 B
release/woocommerce-payments/dist/express-checkout.css 240 B
release/woocommerce-payments/dist/express-checkout.js 14.1 kB
release/woocommerce-payments/dist/frontend-tracks.js 844 B
release/woocommerce-payments/dist/index-rtl.css 39.2 kB
release/woocommerce-payments/dist/index.css 39.2 kB
release/woocommerce-payments/dist/index.js 298 kB
release/woocommerce-payments/dist/multi-currency-analytics.js 1.08 kB
release/woocommerce-payments/dist/multi-currency-rtl.css 3.41 kB
release/woocommerce-payments/dist/multi-currency-switcher-block.js 60.5 kB
release/woocommerce-payments/dist/multi-currency.css 3.41 kB
release/woocommerce-payments/dist/multi-currency.js 55.5 kB
release/woocommerce-payments/dist/order-rtl.css 730 B
release/woocommerce-payments/dist/order.css 730 B
release/woocommerce-payments/dist/order.js 42.7 kB
release/woocommerce-payments/dist/payment-gateways-rtl.css 1.35 kB
release/woocommerce-payments/dist/payment-gateways.css 1.35 kB
release/woocommerce-payments/dist/payment-gateways.js 39.3 kB
release/woocommerce-payments/dist/payment-request-rtl.css 240 B
release/woocommerce-payments/dist/payment-request.css 240 B
release/woocommerce-payments/dist/payment-request.js 13.6 kB
release/woocommerce-payments/dist/plugins-page-rtl.css 386 B
release/woocommerce-payments/dist/plugins-page.css 386 B
release/woocommerce-payments/dist/plugins-page.js 20.1 kB
release/woocommerce-payments/dist/product-details-rtl.css 433 B
release/woocommerce-payments/dist/product-details.css 436 B
release/woocommerce-payments/dist/product-details.js 11.4 kB
release/woocommerce-payments/dist/settings-rtl.css 11.6 kB
release/woocommerce-payments/dist/settings.css 11.5 kB
release/woocommerce-payments/dist/settings.js 224 kB
release/woocommerce-payments/dist/subscription-edit-page.js 703 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal-rtl.css 524 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal.css 524 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal.js 20.2 kB
release/woocommerce-payments/dist/subscription-product-onboarding-toast.js 730 B
release/woocommerce-payments/dist/subscriptions-empty-state-rtl.css 120 B
release/woocommerce-payments/dist/subscriptions-empty-state.css 120 B
release/woocommerce-payments/dist/subscriptions-empty-state.js 19.3 kB
release/woocommerce-payments/dist/tokenized-payment-request-rtl.css 240 B
release/woocommerce-payments/dist/tokenized-payment-request.css 240 B
release/woocommerce-payments/dist/tokenized-payment-request.js 14.4 kB
release/woocommerce-payments/dist/tos-rtl.css 235 B
release/woocommerce-payments/dist/tos.css 235 B
release/woocommerce-payments/dist/tos.js 21.8 kB
release/woocommerce-payments/dist/woopay-direct-checkout.js 6.14 kB
release/woocommerce-payments/dist/woopay-express-button.js 24 kB
release/woocommerce-payments/dist/woopay-rtl.css 4.54 kB
release/woocommerce-payments/dist/woopay.css 4.51 kB
release/woocommerce-payments/dist/woopay.js 71.2 kB
release/woocommerce-payments/includes/subscriptions/assets/css/plugin-page.css 625 B
release/woocommerce-payments/includes/subscriptions/assets/js/plugin-page.js 814 B
release/woocommerce-payments/vendor/automattic/jetpack-assets/build/i18n-loader.js 2.46 kB
release/woocommerce-payments/vendor/automattic/jetpack-assets/src/js/i18n-loader.js 1.02 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-admin-create-user.css 198 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-admin-create-user.js 20 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-admin-create-user.rtl.css 198 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-login.css 625 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-login.js 20 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-login.rtl.css 626 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-users.js 392 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/tracks-ajax.js 521 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/tracks-callables.js 584 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/src/sso/jetpack-sso-admin-create-user.css 215 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/src/sso/jetpack-sso-admin-create-user.js 521 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/src/sso/jetpack-sso-login.css 721 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/src/sso/jetpack-sso-login.js 412 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/src/sso/jetpack-sso-users.js 520 B
release/woocommerce-payments/vendor/automattic/jetpack-identity-crisis/babel.config.js 159 B
release/woocommerce-payments/vendor/automattic/jetpack-identity-crisis/build/index.css 2.36 kB
release/woocommerce-payments/vendor/automattic/jetpack-identity-crisis/build/index.js 13.6 kB
release/woocommerce-payments/vendor/automattic/jetpack-identity-crisis/build/index.rtl.css 2.36 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/about.css 1.04 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/admin-empty-state.css 294 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/admin-order-statuses.css 408 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/admin.css 3.59 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/checkout.css 301 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/modal.css 746 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/view-subscription.css 574 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/wcs-upgrade.css 414 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/admin-pointers.js 543 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/admin.js 9.4 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/jstz.js 6.78 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/jstz.min.js 3.84 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/meta-boxes-coupon.js 545 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/meta-boxes-subscription.js 2.52 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/moment.js 22.2 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/moment.min.js 11.7 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/payment-method-restrictions.js 1.29 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/wcs-meta-boxes-order.js 507 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/payment-methods.js 358 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/single-product.js 428 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/view-subscription.js 1.38 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/wcs-cart.js 782 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/modal.js 1.09 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/wcs-upgrade.js 1.26 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/build/index.css 391 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/build/index.js 3.04 kB

compressed-size-action

@cesarcosta99 cesarcosta99 requested a review from reykjalin August 8, 2024 17:41
Copy link
Contributor

@reykjalin reykjalin left a comment

Choose a reason for hiding this comment

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

Love to see the tests being migrated like this and it's an excellent indicator that the tests are passing in GH actions!

However, I ran npm run test:e2e-pw multi-currency 4 times and it failed 3 out of the 4 times. The zip file of the results is in the team channel in Slack. 2 of the failures were identical, the last failure only failed one of the tests, but in the same way as the first 2 failures:

  4 failed
    [merchant] › merchant/multi-currency.spec.ts:38:6 › Multi-currency › page load without any errors
    [shopper] › shopper/multi-currency-checkout.spec.ts:45:8 › Multi-currency checkout › Checkout with multiple currencies › checkout with EUR
    [shopper] › shopper/multi-currency-checkout.spec.ts:52:8 › Multi-currency checkout › Checkout with multiple currencies › should display EUR in the order received page
    [shopper] › shopper/multi-currency-checkout.spec.ts:60:8 › Multi-currency checkout › Checkout with multiple currencies › should display EUR in the customer order page

The single failure:

  1 failed
    [merchant] › merchant/multi-currency.spec.ts:38:6 › Multi-currency › page load without any errors

I got similar results when I ran npm run test:e2e-pw merchant/multi-currency and npm run test:e2e-pw shopper/multi-currency; same tests failed in the same places when they did not succeed. They failed about half the time to 2/3rds of the time.

Since it's the same tests failing every time it probably has something to do with the tests themselves rather than anything else?

It's also possible this has something to do with my environment. I just set up the e2e testing for this PR so maybe I did something wrong, or didn't do something correctly 🤔

tests/e2e-pw/utils/shopper.ts Outdated Show resolved Hide resolved
tests/e2e-pw/specs/shopper/multi-currency-checkout.spec.ts Outdated Show resolved Hide resolved
@cesarcosta99
Copy link
Contributor Author

@reykjalin, as I mentioned on Slack, I wasn't able to reproduce the errors from your report, instead I was consistently running into a different error: the order received one.

I've made some changes to make the tests more stable. I've run npm run test:e2e-pw merchant/multi-currency and npm run test:e2e-pw shopper/multi-currency locally 10 times each and all tests passed on all runs. Can you please pull and retry? If you continue to experience errors we can pair tomorrow and try to identify what's wrong.

@cesarcosta99 cesarcosta99 requested a review from reykjalin August 15, 2024 22:52
@cesarcosta99 cesarcosta99 requested review from a team and ricardo and removed request for a team August 18, 2024 19:02
@cesarcosta99
Copy link
Contributor Author

cesarcosta99 commented Aug 19, 2024

Just for reference, this is the Slack thread we have been discussing the latest changes: p1723693966218459-slack-C01BZUL57SQ

Copy link
Member

@ricardo ricardo left a comment

Choose a reason for hiding this comment

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

@cesarcosta99 Running the tests locally, the only test that fails consistently for me is should display the correct currency in the my account order history table at shopper/multi-currency-checkout.spec.ts:84:7:

Locator: locator('tr').filter({ has: getByLabel('View order number 142') })
Expected pattern: /USD/
Received string:  ""

The test appears to pass in the CI:

1 skipped
34 passed

Copy link
Member

@ricardo ricardo left a comment

Choose a reason for hiding this comment

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

Locator: locator('tr').filter({ has: getByLabel('View order number 142') })
Expected pattern: /USD/
Received string:  ""

I figured why I was experiencing the error above. I had installed the test environment from scratch but I guess I hadn't removed the cached dependencies, so my WooCommerce version was 8.8.3 still.

Updating it made the test work as the selector was introduced somewhere in between in WooCommerce.

All tests are working consistently for me now. ✅

Copy link
Contributor

@reykjalin reykjalin left a comment

Choose a reason for hiding this comment

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

I think the remaining problem are just my environment being slow (see aforementioned slack thread) so I'm approving this. The tests look good and generally run well 🙌

Awesome work! 🚀

@cesarcosta99 cesarcosta99 added this pull request to the merge queue Aug 21, 2024
Merged via the queue into develop with commit 007356a Aug 21, 2024
23 checks passed
@cesarcosta99 cesarcosta99 deleted the dev/8750-migrate-mccy-e2e-tests-to-playwright branch August 21, 2024 02:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[e2e] Migrate multi-currency e2e tests to playwright
4 participants