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

Playwright E2E tests: Multiple signed in roles #10561

Merged
merged 40 commits into from
Dec 8, 2023

Conversation

tarhi-saad
Copy link
Contributor

@tarhi-saad tarhi-saad commented Aug 14, 2023

This PR moves the following tests to playwright and removes the puppeteer equivalent:

  • Guest user can place order
  • Logged in user can place an order

Setting up Playwright's multiple sign up roles

We are using Multiple signed in roles to test for authenticated vs. unauthenticated users. There are some required adjustments to fix #10561 (comment). We will update this section when the PR is ready to be merged!

  • Implement login/logout util function
  • Clean up code
  • Setup Playwright's multiple sign up roles

Other Checks

  • This PR has either a [type] label or a [skip-changelog] label.
  • This PR adds/removes a feature flag & I've updated this doc.
  • This PR adds/removes an experimental interfaces and I've updated this doc.
  • I tagged two reviewers because this PR makes queries to the database or I think it might have some security impact.

Testing

Automated Tests

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

User Facing Testing

Ensure Playwright E2E tests pass and ensure Puppeteer E2Es also pass, so that we can be sure the removed tests don't impact on anything.

Test the multiple sign-in roles feature
  1. In your local Woo Blocks plugin, set breakpoints in the test file tests/e2e/tests/checkout/checkout-block.block_theme.side_effects.spec.ts at the lines 39 and 114
  2. Run the test file tests/e2e/tests/checkout/checkout-block.block_theme.side_effects.spec.ts in debug mode
  3. The first time the code is paused, check the Playwright's browser. Ensure you are on the shop page
  4. Open the My Account page in a new tab. Ensure the customer Jane Smith is logged in
  5. The second time the code is paused, check the Playwright's browser. Ensure you are on the shop page
  6. Open the My Account page in a new tab. Ensure the user is logged out
  • Do not include in the Testing Notes
  • Should be tested by the development team exclusively

WooCommerce Visibility

  • WooCommerce Core
  • Feature plugin
  • Experimental

@tarhi-saad tarhi-saad added skip-changelog PRs that you don't want to appear in the changelog. block: checkout Issues related to the checkout block. category: tests labels Aug 14, 2023
@github-actions
Copy link
Contributor

github-actions bot commented Aug 14, 2023

The release ZIP for this PR is accessible via:

https://wcblocks.wpcomstaging.com/wp-content/uploads/woocommerce-gutenberg-products-block-10561.zip

Script Dependencies Report

There is no changed script dependency between this branch and trunk.

This comment was automatically generated by the ./github/compare-assets action.

TypeScript Errors Report

  • Files with errors: 506
  • Total errors: 1876

🎉 🎉 This PR does not introduce new TS errors.

comments-aggregator

@github-actions
Copy link
Contributor

github-actions bot commented Aug 14, 2023

Size Change: 0 B

Total Size: 1.61 MB

ℹ️ View Unchanged
Filename Size
build/3810-frontend.js 18.3 kB
build/4124-frontend.js 23.9 kB
build/8280-frontend.js 8.47 kB
build/active-filters-frontend.js 6.71 kB
build/active-filters-rtl.css 1.68 kB
build/active-filters-wrapper-frontend.js 6.91 kB
build/active-filters-wrapper-rtl.css 1.53 kB
build/active-filters-wrapper.css 1.53 kB
build/active-filters.css 1.68 kB
build/active-filters.js 6.06 kB
build/add-to-cart-form-rtl.css 443 B
build/add-to-cart-form.css 443 B
build/all-products-frontend.js 9.67 kB
build/all-products-rtl.css 4.54 kB
build/all-products.css 4.54 kB
build/all-products.js 39.7 kB
build/all-reviews-rtl.css 1.75 kB
build/all-reviews.css 1.75 kB
build/all-reviews.js 7.8 kB
build/attribute-filter-frontend.js 19.9 kB
build/attribute-filter-rtl.css 4.03 kB
build/attribute-filter-wrapper-frontend.js 21.1 kB
build/attribute-filter-wrapper-rtl.css 3.89 kB
build/attribute-filter-wrapper.css 3.88 kB
build/attribute-filter.css 4.01 kB
build/attribute-filter.js 11.3 kB
build/blocks-checkout.js 33.7 kB
build/blocks-components.js 32.6 kB
build/breadcrumbs-rtl.css 234 B
build/breadcrumbs.css 234 B
build/breadcrumbs.js 2.13 kB
build/cart-blocks/cart-accepted-payment-methods-frontend.js 1.4 kB
build/cart-blocks/cart-accepted-payment-methods-style.js 153 B
build/cart-blocks/cart-cross-sells-frontend.js 267 B
build/cart-blocks/cart-cross-sells-products-frontend.js 5.57 kB
build/cart-blocks/cart-cross-sells-products-style.js 153 B
build/cart-blocks/cart-cross-sells-style.js 269 B
build/cart-blocks/cart-express-payment-frontend.js 5.38 kB
build/cart-blocks/cart-express-payment-style.js 155 B
build/cart-blocks/cart-items-frontend.js 281 B
build/cart-blocks/cart-items-style.js 240 B
build/cart-blocks/cart-line-items-frontend.js 9.24 kB
build/cart-blocks/cart-line-items-style.js 153 B
build/cart-blocks/cart-order-summary-frontend.js 20.6 kB
build/cart-blocks/cart-order-summary-style.js 339 B
build/cart-blocks/cart-totals-frontend.js 296 B
build/cart-blocks/cart-totals-style.js 253 B
build/cart-blocks/empty-cart-frontend.js 376 B
build/cart-blocks/empty-cart-style.js 375 B
build/cart-blocks/filled-cart-frontend.js 614 B
build/cart-blocks/filled-cart-style.js 332 B
build/cart-blocks/order-summary-coupon-form-frontend.js 21 kB
build/cart-blocks/order-summary-coupon-form-style.js 155 B
build/cart-blocks/order-summary-discount-frontend.js 21 kB
build/cart-blocks/order-summary-discount-style.js 155 B
build/cart-blocks/order-summary-fee-frontend.js 288 B
build/cart-blocks/order-summary-fee-style.js 153 B
build/cart-blocks/order-summary-heading-frontend.js 347 B
build/cart-blocks/order-summary-heading-style.js 351 B
build/cart-blocks/order-summary-shipping-frontend.js 20.6 kB
build/cart-blocks/order-summary-shipping-style.js 154 B
build/cart-blocks/order-summary-subtotal-frontend.js 291 B
build/cart-blocks/order-summary-subtotal-style.js 154 B
build/cart-blocks/order-summary-taxes-frontend.js 454 B
build/cart-blocks/order-summary-taxes-style.js 202 B
build/cart-blocks/proceed-to-checkout-frontend.js 7.64 kB
build/cart-blocks/proceed-to-checkout-style.js 1.09 kB
build/cart-frontend.js 29.1 kB
build/cart-rtl.css 9.22 kB
build/cart.css 9.21 kB
build/cart.js 39.8 kB
build/catalog-sorting-rtl.css 259 B
build/catalog-sorting.css 259 B
build/catalog-sorting.js 1.7 kB
build/checkout-blocks/actions-frontend.js 8.14 kB
build/checkout-blocks/actions-style.js 1.02 kB
build/checkout-blocks/billing-address-frontend.js 9.86 kB
build/checkout-blocks/billing-address-style.js 574 B
build/checkout-blocks/contact-information-frontend.js 1.66 kB
build/checkout-blocks/contact-information-style.js 653 B
build/checkout-blocks/express-payment-frontend.js 5.81 kB
build/checkout-blocks/fields-frontend.js 375 B
build/checkout-blocks/fields-style.js 342 B
build/checkout-blocks/order-note-frontend.js 673 B
build/checkout-blocks/order-summary-cart-items-frontend.js 6.49 kB
build/checkout-blocks/order-summary-cart-items-style.js 153 B
build/checkout-blocks/order-summary-coupon-form-frontend.js 21 kB
build/checkout-blocks/order-summary-coupon-form-style.js 155 B
build/checkout-blocks/order-summary-discount-frontend.js 21.1 kB
build/checkout-blocks/order-summary-discount-style.js 154 B
build/checkout-blocks/order-summary-fee-frontend.js 291 B
build/checkout-blocks/order-summary-fee-style.js 155 B
build/checkout-blocks/order-summary-frontend.js 20.6 kB
build/checkout-blocks/order-summary-shipping-frontend.js 20.6 kB
build/checkout-blocks/order-summary-shipping-style.js 154 B
build/checkout-blocks/order-summary-style.js 341 B
build/checkout-blocks/order-summary-subtotal-frontend.js 289 B
build/checkout-blocks/order-summary-subtotal-style.js 155 B
build/checkout-blocks/order-summary-taxes-frontend.js 455 B
build/checkout-blocks/order-summary-taxes-style.js 201 B
build/checkout-blocks/payment-frontend.js 14.5 kB
build/checkout-blocks/payment-style.js 500 B
build/checkout-blocks/pickup-options-frontend.js 11.2 kB
build/checkout-blocks/pickup-options-style.js 481 B
build/checkout-blocks/shipping-address-frontend.js 9.79 kB
build/checkout-blocks/shipping-address-style.js 517 B
build/checkout-blocks/shipping-method-frontend.js 1.97 kB
build/checkout-blocks/shipping-method-style.js 1.44 kB
build/checkout-blocks/shipping-methods-frontend.js 19 kB
build/checkout-blocks/shipping-methods-style.js 456 B
build/checkout-blocks/terms-frontend.js 1.56 kB
build/checkout-blocks/terms-style.js 1.03 kB
build/checkout-blocks/totals-frontend.js 338 B
build/checkout-blocks/totals-style.js 301 B
build/checkout-frontend.js 30.7 kB
build/checkout-rtl.css 8.34 kB
build/checkout.css 8.33 kB
build/checkout.js 42.6 kB
build/classic-shortcode-rtl.css 242 B
build/classic-shortcode.css 241 B
build/classic-shortcode.js 4.66 kB
build/collection-attribute-filter-frontend.js 494 B
build/collection-attribute-filter-rtl.css 3.5 kB
build/collection-attribute-filter.css 3.5 kB
build/collection-attribute-filter.js 7.75 kB
build/collection-filters.js 1.98 kB
build/collection-price-filter-frontend.js 615 B
build/collection-price-filter-rtl.css 1.07 kB
build/collection-price-filter.css 1.07 kB
build/collection-price-filter.js 3.27 kB
build/collection-stock-filter-frontend.js 396 B
build/collection-stock-filter-rtl.css 4.05 kB
build/collection-stock-filter.css 4.04 kB
build/collection-stock-filter.js 4.17 kB
build/customer-account-rtl.css 410 B
build/customer-account.css 409 B
build/customer-account.js 3.19 kB
build/featured-category-rtl.css 979 B
build/featured-category.css 978 B
build/featured-category.js 13.8 kB
build/featured-product-rtl.css 1.03 kB
build/featured-product.css 1.03 kB
build/featured-product.js 13.9 kB
build/filter-wrapper-frontend.js 14.6 kB
build/filter-wrapper-rtl.css 378 B
build/filter-wrapper.css 378 B
build/filter-wrapper.js 2.38 kB
build/handpicked-products.js 7.34 kB
build/legacy-template-rtl.css 240 B
build/legacy-template.css 240 B
build/legacy-template.js 7.85 kB
build/mini-cart-component-frontend.js 30.8 kB
build/mini-cart-contents-block/cart-button-frontend.js 1.86 kB
build/mini-cart-contents-block/cart-button-style.js 1.23 kB
build/mini-cart-contents-block/checkout-button-frontend.js 1.95 kB
build/mini-cart-contents-block/checkout-button-style.js 1.44 kB
build/mini-cart-contents-block/empty-cart-frontend.js 383 B
build/mini-cart-contents-block/empty-cart-style.js 387 B
build/mini-cart-contents-block/filled-cart-frontend.js 284 B
build/mini-cart-contents-block/filled-cart-style.js 287 B
build/mini-cart-contents-block/footer-frontend.js 3.87 kB
build/mini-cart-contents-block/footer-style.js 1.96 kB
build/mini-cart-contents-block/items-frontend.js 246 B
build/mini-cart-contents-block/items-style.js 250 B
build/mini-cart-contents-block/products-table-frontend.js 8.59 kB
build/mini-cart-contents-block/shopping-button-frontend.js 501 B
build/mini-cart-contents-block/shopping-button-style.js 361 B
build/mini-cart-contents-block/title-frontend.js 2.04 kB
build/mini-cart-contents-block/title-items-counter-frontend.js 1.74 kB
build/mini-cart-contents-block/title-items-counter-style.js 1.2 kB
build/mini-cart-contents-block/title-label-frontend.js 1.68 kB
build/mini-cart-contents-block/title-label-style.js 1.14 kB
build/mini-cart-contents-block/title-style.js 1.38 kB
build/mini-cart-contents-rtl.css 3.23 kB
build/mini-cart-contents.css 3.22 kB
build/mini-cart-contents.js 16 kB
build/mini-cart-frontend.js 2.35 kB
build/mini-cart-rtl.css 2.44 kB
build/mini-cart.css 2.44 kB
build/mini-cart.js 6.1 kB
build/order-confirmation-additional-information-rtl.css 366 B
build/order-confirmation-additional-information.css 366 B
build/order-confirmation-additional-information.js 1.58 kB
build/order-confirmation-billing-address-rtl.css 396 B
build/order-confirmation-billing-address.css 396 B
build/order-confirmation-billing-address.js 1.56 kB
build/order-confirmation-billing-wrapper.js 1.51 kB
build/order-confirmation-downloads-rtl.css 476 B
build/order-confirmation-downloads-wrapper.js 1.58 kB
build/order-confirmation-downloads.css 477 B
build/order-confirmation-downloads.js 1.91 kB
build/order-confirmation-shipping-address-rtl.css 452 B
build/order-confirmation-shipping-address.css 452 B
build/order-confirmation-shipping-address.js 1.56 kB
build/order-confirmation-shipping-wrapper.js 1.52 kB
build/order-confirmation-status-rtl.css 280 B
build/order-confirmation-status.css 280 B
build/order-confirmation-status.js 1.55 kB
build/order-confirmation-summary-rtl.css 460 B
build/order-confirmation-summary.css 460 B
build/order-confirmation-summary.js 1.76 kB
build/order-confirmation-totals-rtl.css 586 B
build/order-confirmation-totals-wrapper.js 1.8 kB
build/order-confirmation-totals.css 585 B
build/order-confirmation-totals.js 2.18 kB
build/packages-style-rtl.css 5.19 kB
build/packages-style.css 5.19 kB
build/page-content-wrapper.js 1.97 kB
build/price-filter-frontend.js 7.94 kB
build/price-filter-rtl.css 2.68 kB
build/price-filter-wrapper-frontend.js 8.11 kB
build/price-filter-wrapper-rtl.css 2.53 kB
build/price-filter-wrapper.css 2.53 kB
build/price-filter.css 2.67 kB
build/price-filter.js 7.53 kB
build/price-format.js 913 B
build/product-add-to-cart-frontend.js 8.12 kB
build/product-add-to-cart-rtl.css 1.37 kB
build/product-add-to-cart.css 1.38 kB
build/product-add-to-cart.js 8.36 kB
build/product-average-rating-frontend.js 1.88 kB
build/product-average-rating.js 1.4 kB
build/product-best-sellers.js 7.13 kB
build/product-button-frontend.js 4.94 kB
build/product-button-interactivity-frontend.js 8.29 kB
build/product-button-rtl.css 1.14 kB
build/product-button.css 1.14 kB
build/product-button.js 4.66 kB
build/product-categories-rtl.css 654 B
build/product-categories.css 654 B
build/product-categories.js 2.6 kB
build/product-category.js 8.07 kB
build/product-collection-no-results.js 1.66 kB
build/product-collection.js 13.9 kB
build/product-details-rtl.css 397 B
build/product-details.css 394 B
build/product-gallery-frontend.js 778 B
build/product-gallery-large-image-frontend.js 604 B
build/product-gallery-large-image-next-previous.js 4.27 kB
build/product-gallery-large-image.js 2.47 kB
build/product-gallery-pager.js 3.48 kB
build/product-gallery-rtl.css 1.65 kB
build/product-gallery-thumbnails.js 3.98 kB
build/product-gallery.css 1.65 kB
build/product-gallery.js 9.67 kB
build/product-image-frontend.js 2.9 kB
build/product-image-gallery-rtl.css 307 B
build/product-image-gallery.css 306 B
build/product-image-rtl.css 996 B
build/product-image.css 994 B
build/product-image.js 2.58 kB
build/product-new.js 8 kB
build/product-on-sale.js 7.39 kB
build/product-price-frontend.js 2.82 kB
build/product-price-rtl.css 644 B
build/product-price.css 643 B
build/product-price.js 2.34 kB
build/product-query-rtl.css 350 B
build/product-query.css 349 B
build/product-query.js 11.7 kB
build/product-rating-counter-frontend.js 2.19 kB
build/product-rating-counter.js 1.7 kB
build/product-rating-frontend.js 2.53 kB
build/product-rating-rtl.css 247 B
build/product-rating-stars-frontend.js 2.43 kB
build/product-rating-stars-rtl.css 899 B
build/product-rating-stars.css 900 B
build/product-rating-stars.js 1.95 kB
build/product-rating.css 246 B
build/product-rating.js 2.04 kB
build/product-results-count-rtl.css 230 B
build/product-results-count.css 230 B
build/product-results-count.js 1.66 kB
build/product-reviews-rtl.css 458 B
build/product-reviews.css 458 B
build/product-sale-badge-frontend.js 2.01 kB
build/product-sale-badge-rtl.css 437 B
build/product-sale-badge.css 437 B
build/product-sale-badge.js 1.52 kB
build/product-search-rtl.css 419 B
build/product-search.css 417 B
build/product-search.js 2.62 kB
build/product-sku-frontend.js 2.02 kB
build/product-sku-rtl.css 240 B
build/product-sku.css 239 B
build/product-sku.js 1.53 kB
build/product-stock-indicator-frontend.js 2.2 kB
build/product-stock-indicator-rtl.css 232 B
build/product-stock-indicator.css 232 B
build/product-stock-indicator.js 1.71 kB
build/product-summary-frontend.js 2.36 kB
build/product-summary-rtl.css 549 B
build/product-summary.css 549 B
build/product-summary.js 1.88 kB
build/product-tag.js 7.53 kB
build/product-template-rtl.css 548 B
build/product-template.css 547 B
build/product-template.js 2.81 kB
build/product-title-frontend.js 2.31 kB
build/product-title-rtl.css 693 B
build/product-title.css 694 B
build/product-title.js 2.05 kB
build/product-top-rated.js 7.67 kB
build/products-by-attribute.js 8.05 kB
build/rating-filter-frontend.js 18.8 kB
build/rating-filter-rtl.css 4.09 kB
build/rating-filter-wrapper-frontend.js 19.7 kB
build/rating-filter-wrapper-rtl.css 3.95 kB
build/rating-filter-wrapper.css 3.95 kB
build/rating-filter.css 4.08 kB
build/rating-filter.js 5.8 kB
build/reviews-by-category-rtl.css 1.75 kB
build/reviews-by-category.css 1.75 kB
build/reviews-by-category.js 11.5 kB
build/reviews-by-product-rtl.css 1.75 kB
build/reviews-by-product.css 1.75 kB
build/reviews-by-product.js 12.7 kB
build/reviews-frontend.js 6.44 kB
build/single-product-rtl.css 378 B
build/single-product.css 378 B
build/single-product.js 11.1 kB
build/stock-filter-frontend.js 19 kB
build/stock-filter-rtl.css 3.88 kB
build/stock-filter-wrapper-frontend.js 20 kB
build/stock-filter-wrapper-rtl.css 3.75 kB
build/stock-filter-wrapper.css 3.74 kB
build/stock-filter.css 3.87 kB
build/stock-filter.js 6.44 kB
build/store-notices-rtl.css 1.31 kB
build/store-notices.css 1.3 kB
build/store-notices.js 2.34 kB
build/wc-blocks-classic-template-revert-button-style-rtl.css 240 B
build/wc-blocks-classic-template-revert-button-style.css 239 B
build/wc-blocks-classic-template-revert-button.js 1.19 kB
build/wc-blocks-data.js 19.7 kB
build/wc-blocks-editor-style-rtl.css 7.29 kB
build/wc-blocks-editor-style.css 7.29 kB
build/wc-blocks-google-analytics.js 1.13 kB
build/wc-blocks-middleware.js 735 B
build/wc-blocks-registry.js 2.75 kB
build/wc-blocks-rtl.css 2.48 kB
build/wc-blocks-shared-context.js 860 B
build/wc-blocks-shared-hocs.js 1.41 kB
build/wc-blocks-vendors.js 61.9 kB
build/wc-blocks.css 2.48 kB
build/wc-blocks.js 9.19 kB
build/wc-interactivity-dropdown.js 493 B
build/wc-interactivity.js 12.7 kB
build/wc-payment-method-bacs.js 405 B
build/wc-payment-method-cheque.js 402 B
build/wc-payment-method-cod.js 508 B
build/wc-payment-method-paypal.js 439 B
build/wc-settings.js 2.42 kB
build/wc-shipping-method-pickup-location.js 29.4 kB

compressed-size-action

@tarhi-saad tarhi-saad force-pushed the add/checkout-place-order-pw-test branch from e15ac5b to 9243cbd Compare August 15, 2023 17:18
@tarhi-saad tarhi-saad marked this pull request as ready for review August 15, 2023 22:14
@tarhi-saad tarhi-saad changed the title [WIP] Convert checkout place order E2E tests to Playwright Convert checkout place order E2E tests to Playwright Aug 15, 2023
@woocommercebot woocommercebot requested review from a team and opr and removed request for a team August 15, 2023 22:14
@tarhi-saad tarhi-saad force-pushed the add/checkout-place-order-pw-test branch from 9702ace to e827123 Compare August 16, 2023 06:22
@tarhi-saad
Copy link
Contributor Author

Hey @opr! My tests are failing, but I can't debug them locally. I can't run a single-file test using CLI or the VS Code extension (all 50 tests get executed in each instance). And for some reason, the tests are failing locally! I followed the suggestion from p1692138789517629-slack-C02UBB1EPEF, but without success!

Copy link
Contributor

@opr opr left a comment

Choose a reason for hiding this comment

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

Hi Saad, thanks for the PR. @gigitux and I discussed about auth a little, and I think we should use Multiple signed in roles to test for authenticated vs unauthenticated users.

Because of this I would recommend the following changes to this PR:

  1. Remove the login, logOut, and isLoggedIn utils from the FrontendUtils class
  2. Consider adding a tests/auth.setup.ts file as outlined in the playwright docs link above, log in as the user there and save the storage state.
  3. In the test, create one context for each user type (logged in, logged out) and run the test for both users in the same test case.

Also, you may consider incorporating these tests in checkout-block-shipping.block_theme.side_effects.spec.ts instead of a new file, adding the cases to the existing test there. (Side note, we may want to rename this file now since it's not really focusing on shipping anymore).

I have been thinking about it more and I think it is actually a better idea to test as much as we can in one test, rather than setting up new ones for each thing we want to check.

Let me know what you think!


I can't run a single-file test using CLI or the VS Code extension (all 50 tests get executed in each instance).

Go to playwright.side-effects.config.ts and remove
dependencies: [ 'blockThemeConfiguration' ],
from the blockThemeWithGlobalSideEffects config object.

Then the command I ran was:

npm run test:e2e:side-effects -- --headed tests/e2e/tests/checkout/checkout-block-place-order.block_theme.side_effects.spec.ts

@tarhi-saad
Copy link
Contributor Author

@opr, I created the tests/auth.setup.ts file that includes the following roles: Guest, Customer, and Admin. I get the error:

Error: Error reading storage state from playwright/.auth/customer.json:
ENOENT: no such file or directory, open 'playwright/.auth/customer.json'

I believe the file tests/auth.setup.ts isn't recognized by the Playwright config. I tried adding it to the playwright.config.ts, but it didn't work. Do you know how to proceed from here?

In the test, create one context for each user type (logged in, logged out) and run the test for both users in the same test case.

I believe the code will look like this:

test( 'Guest and logged in users can place order', async ( {
		pageObject,
		frontendUtils,
		page,
	} ) => {
                const customerContext = await browser.newContext({ storageState: 'playwright/.auth/customer.json' });
                const customerPage = await adminContext.newPage();

		await frontendUtils.emptyCart();
		await frontendUtils.goToShop();
		await frontendUtils.addToCart( SIMPLE_PHYSICAL_PRODUCT_NAME );
		await frontendUtils.goToCheckout();
		await expect(
			await pageObject.selectAndVerifyShippingOption(
				FREE_SHIPPING_NAME,
				FREE_SHIPPING_PRICE
			)
		).toBe( true );
		await pageObject.fillInCheckoutWithTestData();
		await pageObject.placeOrder();
		await expect(
			customerPage.getByText( 'Your order has been received.' )
		).toBeVisible();

               const guestContext = await browser.newContext({ storageState: 'playwright/.auth/guest.json' });
                const guestPage = await adminContext.newPage();

              etc...
	} );

I haven't tested it yet, but I was wondering how frontendUtils object will use the new page for each context (i.e., customPage and guestPage)?

@opr
Copy link
Contributor

opr commented Aug 17, 2023

@opr, I created the tests/auth.setup.ts file that includes the following roles: Guest, Customer, and Admin. I get the error:

Hi @tarhi-saad where does this error appear? What steps can I take to reproduce it?

I haven't tested it yet, but I was wondering how frontendUtils object will use the new page for each context (i.e., customPage and guestPage)?

Apologies, I think I wrote something incorrectly in my review, I spoke more to Luigi and I think we should use one test per user-role. We should therefore write the test like this (from playwright docs)

image (4)

To ensure the auth.setup.js file is executed, I added it as a project in playwright.config.js and playwright.side-effects.config.js like so:

{
	name: 'authSetup',
	testDir: '.',
	testMatch: /auth.setup.ts/,
},

I then made the following projects depend on it: blockThemeConfiguration (in both files), and classicThemeConfiguration in the playwright.config.js file.

Example config:

{
	name: 'blockThemeConfiguration',
	testDir: '.',
	testMatch: /block-theme.setup.ts/,
	dependencies: [ 'authSetup' ],
},

Also, in auth.setup.js I had to ensure the browser was logged out in each case before logging in, similar to how you did it in the authenticate as guest step, I also added this to both admin/customer steps too, just to ensure we're logging out and then back in with the correct account.

Finally, the test.use( { storageState: 'tests/e2e/.auth/customer.json' } ); must be invoked at the test.describe level, meaning we should describe once for the logged in user, and once for the logged out user!

Hope this is useful 😎

@tarhi-saad tarhi-saad force-pushed the add/checkout-place-order-pw-test branch from 273385d to 01559bf Compare August 18, 2023 12:02
@tarhi-saad tarhi-saad requested a review from opr August 18, 2023 12:02
@tarhi-saad tarhi-saad force-pushed the add/checkout-place-order-pw-test branch from 01559bf to 9a47a6b Compare August 18, 2023 12:04
Copy link
Contributor

@opr opr left a comment

Choose a reason for hiding this comment

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

Hey @tarhi-saad thanks for working on this, starting to look good, I think the auth steps are really valuable. I left some inline comments that should be addressed. Thanks!

tests/e2e/auth.setup.ts Outdated Show resolved Hide resolved
tests/e2e/auth.setup.ts Outdated Show resolved Hide resolved
tests/e2e/auth.setup.ts Outdated Show resolved Hide resolved
tests/e2e/auth.setup.ts Outdated Show resolved Hide resolved
tests/e2e/auth.setup.ts Outdated Show resolved Hide resolved
tests/e2e/tests/checkout/constants.ts Outdated Show resolved Hide resolved
tests/e2e/utils/frontend/frontend-utils.page.ts Outdated Show resolved Hide resolved
tests/e2e/utils/frontend/frontend-utils.page.ts Outdated Show resolved Hide resolved
tests/e2e/utils/frontend/frontend-utils.page.ts Outdated Show resolved Hide resolved
@tarhi-saad
Copy link
Contributor Author

@opr, I've incorporated all the feedback! However, the shipping test is failing. It seems that from the beginning, the authentication setup hasn't been functioning properly. We've been placing orders without authentication consistently (even when using customer). I'll continue to investigate to identify a solution!

Comment on lines +14 to +19
// User roles file paths
export const adminFile = '.auth/admin.json';
export const customerFile = '.auth/customer.json';
export const guestFile = '.auth/guest.json';
Copy link
Contributor

Choose a reason for hiding this comment

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

We are saving these at the project root, but the .gitignore only ignores things in e2e. We should update these paths.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@opr, when I run the tests locally, these files are created in tests/e2e/.auth/, not on the project root.

@opr
Copy link
Contributor

opr commented Aug 23, 2023

@opr, I've incorporated all the feedback! However, the shipping test is failing. It seems that from the beginning, the authentication setup hasn't been functioning properly. We've been placing orders without authentication consistently (even when using customer). I'll continue to investigate to identify a solution!

Hi @tarhi-saad - during the auth setup, we were checking if we're logged out, it looks like the same context is used between setup steps, so the admin account is logged in. I reversed the logic, so now instead of checking if we're logged out, we will check if we're logged in (i.e., is the logout link visible) and we will log out before each test.

@opr opr force-pushed the add/checkout-place-order-pw-test branch from eb315c3 to 622200d Compare August 23, 2023 11:06
@tarhi-saad
Copy link
Contributor Author

This is awesome, @opr! I tested it locally, and it worked fine! But, since there are still some failing tests because of this PR: #10611, I linked the fix #10695 as a blocker.

@opr opr force-pushed the add/checkout-place-order-pw-test branch from 622200d to 1f2ccd2 Compare August 24, 2023 09:33
@tarhi-saad tarhi-saad marked this pull request as draft August 24, 2023 15:06
@tarhi-saad
Copy link
Contributor Author

We are putting this PR into draft for now! We will resume working on it when @gigitux is back! We need to figure out how our auth setup steps can be used by the work Luigi did to revert templates. Before proceeding, we need to understand that part fully (see Slack p1692889180189739/1692886577.310339-slack-C8X6Q7XQU).

Slack bug discussion: p1692878370587469/1692714875.315809-slack-C8X6Q7XQU

@github-actions
Copy link
Contributor

github-actions bot commented Sep 1, 2023

This PR has been marked as stale because it has not seen any activity within the past 7 days. Our team uses this tool to help surface pull requests that have slipped through review.

If deemed still relevant, the pr can be kept active by ensuring it's up to date with the main branch and removing the stale label.

tarhi-saad and others added 27 commits December 8, 2023 17:18
Co-authored-by: Thomas Roberts <[email protected]>
Co-authored-by: Thomas Roberts <[email protected]>
Co-authored-by: Thomas Roberts <[email protected]>
Co-authored-by: Thomas Roberts <[email protected]>
Co-authored-by: Thomas Roberts <[email protected]>
Co-authored-by: Thomas Roberts <[email protected]>
In this step of the Playwright's setup, we can add the multiple sign-in
roles and keeping the admin logged by default.
This fixes the issue of failing tests `logged out` error.
The admin profile is set by default
@tarhi-saad tarhi-saad force-pushed the add/checkout-place-order-pw-test branch from b750021 to 4fe2bb8 Compare December 8, 2023 16:18
@tarhi-saad tarhi-saad merged commit d976360 into trunk Dec 8, 2023
32 checks passed
@tarhi-saad tarhi-saad deleted the add/checkout-place-order-pw-test branch December 8, 2023 16:45
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
block: checkout Issues related to the checkout block. focus: checkout Issues related to the checkout flow focus: e2e tests skip-changelog PRs that you don't want to appear in the changelog. team: Rubik
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants