diff --git a/.github/workflows/pr-smoke-test.yml b/.github/workflows/pr-smoke-test.yml index 72f6ad376fd..1bff56c666e 100644 --- a/.github/workflows/pr-smoke-test.yml +++ b/.github/workflows/pr-smoke-test.yml @@ -13,10 +13,10 @@ jobs: steps: - name: Create dirs. run: | - mkdir -p code/woocommerce - mkdir -p package/woocommerce - mkdir -p tmp/woocommerce - mkdir -p node_modules + mkdir -p code/woocommerce + mkdir -p package/woocommerce + mkdir -p tmp/woocommerce + mkdir -p node_modules - name: Checkout code. uses: actions/checkout@v2 @@ -32,10 +32,10 @@ jobs: pnpm nx composer-install-no-dev woocommerce pnpm nx build-assets woocommerce pnpm install jest - + - name: Run smoke test. working-directory: package/woocommerce/plugins/woocommerce - if: steps.installation.outcome == 'success' + if: always() env: SMOKE_TEST_URL: ${{ secrets.SMOKE_TEST_URL }} SMOKE_TEST_ADMIN_USER: ${{ secrets.SMOKE_TEST_ADMIN_USER }} @@ -55,7 +55,7 @@ jobs: - name: Post Smoke tests results comment on PR if: always() uses: actions/github-script@v5 - env: + env: TITLE: 'Smoke Test Results' SMOKE_TEST_URL: ${{ secrets.SMOKE_TEST_URL }} with: @@ -66,7 +66,7 @@ jobs: - name: Run E2E tests. working-directory: package/woocommerce/plugins/woocommerce - if: steps.installation.outcome == 'success' + if: always() env: SMOKE_TEST_URL: ${{ secrets.SMOKE_TEST_URL }} SMOKE_TEST_ADMIN_USER: ${{ secrets.SMOKE_TEST_ADMIN_USER }} @@ -86,7 +86,7 @@ jobs: - name: Post E2E tests results comment on PR if: always() uses: actions/github-script@v5 - env: + env: TITLE: 'E2E Test Results' SMOKE_TEST_URL: ${{ secrets.SMOKE_TEST_URL }} with: @@ -96,7 +96,7 @@ jobs: await script({github, context}) - name: Remove label from pull request. - if: "${{ contains(github.event.pull_request.labels.*.name, 'run: smoke tests') }}" + if: always() && ${{ contains(github.event.label.name, format( 'run{0} smoke tests', ':') ) }} uses: actions-ecosystem/action-remove-labels@v1 with: github_token: ${{ secrets.GITHUB_TOKEN }} diff --git a/packages/js/e2e-core-tests/CHANGELOG.md b/packages/js/e2e-core-tests/CHANGELOG.md index 991e80a5324..38a7e3b33f2 100644 --- a/packages/js/e2e-core-tests/CHANGELOG.md +++ b/packages/js/e2e-core-tests/CHANGELOG.md @@ -1,5 +1,12 @@ # Unreleased +## Changes + +- Removed the node-config dependency + +## Fixed +- Moved `merchant.login()` out of `beforeAll()` block and into test body for retried runs. + ## Added - This package is now transpiled with Babel, which allows the usage of modern, yet compatible JS code. diff --git a/packages/js/e2e-core-tests/package.json b/packages/js/e2e-core-tests/package.json index 382e9b909a8..b60de7e0381 100644 --- a/packages/js/e2e-core-tests/package.json +++ b/packages/js/e2e-core-tests/package.json @@ -13,7 +13,6 @@ "dependencies": { "@jest/globals": "^26.4.2", "@wordpress/deprecated": "^3.2.3", - "config": "3.3.3", "faker": "^5.1.0" }, "devDependencies": { @@ -31,7 +30,8 @@ }, "peerDependencies": { "@woocommerce/api": "^0.2.0", - "@woocommerce/e2e-utils": "^0.1.6" + "@woocommerce/e2e-utils": "^0.1.6", + "@woocommerce/e2e-environment": "^0.2.3" }, "publishConfig": { "access": "public" diff --git a/packages/js/e2e-core-tests/src/specs/activate-and-setup/onboarding-tasklist.test.js b/packages/js/e2e-core-tests/src/specs/activate-and-setup/onboarding-tasklist.test.js index a54fabc13c7..c6e03feb6cd 100644 --- a/packages/js/e2e-core-tests/src/specs/activate-and-setup/onboarding-tasklist.test.js +++ b/packages/js/e2e-core-tests/src/specs/activate-and-setup/onboarding-tasklist.test.js @@ -12,7 +12,7 @@ const { /** * External dependencies */ -const config = require( 'config' ); +const { config } = require( '@woocommerce/e2e-environment' ); import deprecated from '@wordpress/deprecated'; const { it, diff --git a/packages/js/e2e-core-tests/src/specs/api/coupon.test.js b/packages/js/e2e-core-tests/src/specs/api/coupon.test.js index 512cb6d8249..d41dbb958ba 100644 --- a/packages/js/e2e-core-tests/src/specs/api/coupon.test.js +++ b/packages/js/e2e-core-tests/src/specs/api/coupon.test.js @@ -6,7 +6,7 @@ const { HTTPClientFactory, Coupon } = require( '@woocommerce/api' ); /** * External dependencies */ -const config = require( 'config' ); +const { config } = require( '@woocommerce/e2e-environment' ); const { it, describe, beforeAll } = require( '@jest/globals' ); /** diff --git a/packages/js/e2e-core-tests/src/specs/api/external-product.test.js b/packages/js/e2e-core-tests/src/specs/api/external-product.test.js index 6f8882aedf6..5e4b3ed3f83 100644 --- a/packages/js/e2e-core-tests/src/specs/api/external-product.test.js +++ b/packages/js/e2e-core-tests/src/specs/api/external-product.test.js @@ -6,7 +6,7 @@ const { HTTPClientFactory, ExternalProduct } = require( '@woocommerce/api' ); /** * External dependencies */ -const config = require( 'config' ); +const { config } = require( '@woocommerce/e2e-environment' ); const { it, describe, beforeAll } = require( '@jest/globals' ); /** diff --git a/packages/js/e2e-core-tests/src/specs/api/grouped-product.test.js b/packages/js/e2e-core-tests/src/specs/api/grouped-product.test.js index 3a1cf785dd0..ad1d5717991 100644 --- a/packages/js/e2e-core-tests/src/specs/api/grouped-product.test.js +++ b/packages/js/e2e-core-tests/src/specs/api/grouped-product.test.js @@ -10,7 +10,7 @@ const { /** * External dependencies */ -const config = require( 'config' ); +const { config } = require( '@woocommerce/e2e-environment' ); const { it, describe, beforeAll } = require( '@jest/globals' ); /** diff --git a/packages/js/e2e-core-tests/src/specs/api/order.test.js b/packages/js/e2e-core-tests/src/specs/api/order.test.js index 0f4b5d75bed..6bf560f10fa 100644 --- a/packages/js/e2e-core-tests/src/specs/api/order.test.js +++ b/packages/js/e2e-core-tests/src/specs/api/order.test.js @@ -6,7 +6,7 @@ const { HTTPClientFactory, Order } = require( '@woocommerce/api' ); /** * External dependencies */ -const config = require( 'config' ); +const { config } = require( '@woocommerce/e2e-environment' ); const { it, describe, beforeAll } = require( '@jest/globals' ); /** diff --git a/packages/js/e2e-core-tests/src/specs/api/telemetry.test.js b/packages/js/e2e-core-tests/src/specs/api/telemetry.test.js index 7def25552ba..139f1c0d376 100644 --- a/packages/js/e2e-core-tests/src/specs/api/telemetry.test.js +++ b/packages/js/e2e-core-tests/src/specs/api/telemetry.test.js @@ -6,7 +6,7 @@ const { HTTPClientFactory } = require( '@woocommerce/api' ); /** * External dependencies */ -const config = require( 'config' ); +const { config } = require( '@woocommerce/e2e-environment' ); const { it, describe, beforeAll } = require( '@jest/globals' ); /** diff --git a/packages/js/e2e-core-tests/src/specs/api/variable-product.test.js b/packages/js/e2e-core-tests/src/specs/api/variable-product.test.js index 3fcea7a8792..4579b6222fe 100644 --- a/packages/js/e2e-core-tests/src/specs/api/variable-product.test.js +++ b/packages/js/e2e-core-tests/src/specs/api/variable-product.test.js @@ -7,7 +7,7 @@ const { HTTPClientFactory, VariableProduct, ProductVariation } = require( '@wooc /** * External dependencies */ -const config = require( 'config' ); +const { config } = require( '@woocommerce/e2e-environment' ); const { it, describe, diff --git a/packages/js/e2e-core-tests/src/specs/merchant/wp-admin-order-apply-coupon.test.js b/packages/js/e2e-core-tests/src/specs/merchant/wp-admin-order-apply-coupon.test.js index 6e70fa8f95a..1696fa6fecf 100644 --- a/packages/js/e2e-core-tests/src/specs/merchant/wp-admin-order-apply-coupon.test.js +++ b/packages/js/e2e-core-tests/src/specs/merchant/wp-admin-order-apply-coupon.test.js @@ -11,8 +11,8 @@ const { utils, } = require( '@woocommerce/e2e-utils' ); -const config = require( 'config' ); -const simpleProductPrice = config.has('products.simple.price') ? config.get('products.simple.price') : '9.99'; +const { config } = require( '@woocommerce/e2e-environment' ); +const simpleProductPrice = config.get( 'products.simple.price', '9.99' ); const discountedPrice = simpleProductPrice - 5.00; const couponDialogMessage = 'Enter a coupon code to apply. Discounts are applied to line totals, before taxes.'; diff --git a/packages/js/e2e-core-tests/src/specs/merchant/wp-admin-order-customer-payment-page.test.js b/packages/js/e2e-core-tests/src/specs/merchant/wp-admin-order-customer-payment-page.test.js index 988dc193d30..92e047962bc 100644 --- a/packages/js/e2e-core-tests/src/specs/merchant/wp-admin-order-customer-payment-page.test.js +++ b/packages/js/e2e-core-tests/src/specs/merchant/wp-admin-order-customer-payment-page.test.js @@ -9,9 +9,9 @@ const { } = require( '@woocommerce/e2e-utils' ); // TODO create a function for the logic below getConfigSimpleProduct(), see: https://github.com/woocommerce/woocommerce/issues/29072 -const config = require( 'config' ); +const { config } = require( '@woocommerce/e2e-environment' ); const simpleProductName = config.get( 'products.simple.name' ); -const simpleProductPrice = config.has( 'products.simple.price' ) ? config.get( 'products.simple.price' ) : '9.99'; +const simpleProductPrice = config.get( 'products.simple.price', '9.99' ); const runMerchantOrdersCustomerPaymentPage = () => { let orderId; diff --git a/packages/js/e2e-core-tests/src/specs/merchant/wp-admin-order-emails.test.js b/packages/js/e2e-core-tests/src/specs/merchant/wp-admin-order-emails.test.js index 1fbb5a0099f..8d9b7e2fbc0 100644 --- a/packages/js/e2e-core-tests/src/specs/merchant/wp-admin-order-emails.test.js +++ b/packages/js/e2e-core-tests/src/specs/merchant/wp-admin-order-emails.test.js @@ -9,10 +9,10 @@ const { deleteAllEmailLogs, } = require( '@woocommerce/e2e-utils' ); -const config = require( 'config' ); +const { config } = require( '@woocommerce/e2e-environment' ); const customerEmail = config.get( 'addresses.customer.billing.email' ); -const adminEmail = config.has( 'users.admin.email' ) ? config.get( 'users.admin.email' ) : 'admin@woocommercecoree2etestsuite.com'; -const storeName = 'WooCommerce Core E2E Test Suite'; +const adminEmail = config.get( 'users.admin.email', 'admin@woocommercecoree2etestsuite.com' ); +const storeName = config.get( 'storeName', 'WooCommerce Core E2E Test Suite' ); let orderId; diff --git a/packages/js/e2e-core-tests/src/specs/merchant/wp-admin-order-new.test.js b/packages/js/e2e-core-tests/src/specs/merchant/wp-admin-order-new.test.js index 3dd15e2d758..39f510c437e 100644 --- a/packages/js/e2e-core-tests/src/specs/merchant/wp-admin-order-new.test.js +++ b/packages/js/e2e-core-tests/src/specs/merchant/wp-admin-order-new.test.js @@ -7,7 +7,7 @@ const { withRestApi, AdminEdit, } = require( '@woocommerce/e2e-utils' ); -const config = require( 'config' ); +const { config } = require( '@woocommerce/e2e-environment' ); const { HTTPClientFactory, VariableProduct, diff --git a/packages/js/e2e-core-tests/src/specs/merchant/wp-admin-order-refund.test.js b/packages/js/e2e-core-tests/src/specs/merchant/wp-admin-order-refund.test.js index a2cc152406f..f90f29ac36f 100644 --- a/packages/js/e2e-core-tests/src/specs/merchant/wp-admin-order-refund.test.js +++ b/packages/js/e2e-core-tests/src/specs/merchant/wp-admin-order-refund.test.js @@ -12,8 +12,8 @@ const { clickAndWaitForSelector, } = require( '@woocommerce/e2e-utils' ); -const config = require( 'config' ); -const simpleProductPrice = config.has('products.simple.price') ? config.get('products.simple.price') : '9.99'; +const { config } = require( '@woocommerce/e2e-environment' ); +const simpleProductPrice = config.get( 'products.simple.price', '9.99' ); const runRefundOrderTest = () => { describe('WooCommerce Orders > Refund an order', () => { diff --git a/packages/js/e2e-core-tests/src/specs/merchant/wp-admin-order-status-filters.test.js b/packages/js/e2e-core-tests/src/specs/merchant/wp-admin-order-status-filters.test.js index 5a2740774cd..75b970184c1 100644 --- a/packages/js/e2e-core-tests/src/specs/merchant/wp-admin-order-status-filters.test.js +++ b/packages/js/e2e-core-tests/src/specs/merchant/wp-admin-order-status-filters.test.js @@ -1,8 +1,6 @@ /** * Internal dependencies */ -const config = require( 'config' ); - const { merchant, withRestApi, diff --git a/packages/js/e2e-core-tests/src/specs/merchant/wp-admin-product-new.test.js b/packages/js/e2e-core-tests/src/specs/merchant/wp-admin-product-new.test.js index d22f6f33834..419d93abb68 100644 --- a/packages/js/e2e-core-tests/src/specs/merchant/wp-admin-product-new.test.js +++ b/packages/js/e2e-core-tests/src/specs/merchant/wp-admin-product-new.test.js @@ -23,13 +23,12 @@ const { const { it, describe, - beforeAll, } = require( '@jest/globals' ); -const config = require( 'config' ); +const { config } = require( '@woocommerce/e2e-environment' ); const VirtualProductName = 'Virtual Product Name'; const NonVirtualProductName = 'Non-Virtual Product Name'; -const simpleProductPrice = config.has('products.simple.price') ? config.get('products.simple.price') : '9.99'; +const simpleProductPrice = config.get( 'products.simple.price', '9.99' ); const openNewProductAndVerify = async () => { // Go to "add product" page @@ -41,10 +40,6 @@ const openNewProductAndVerify = async () => { const runAddSimpleProductTest = () => { describe('Add New Simple Product Page', () => { - beforeAll(async () => { - await merchant.login(); - }); - it('can create simple virtual product and add it to the cart', async () => { // @todo: remove this once https://github.com/woocommerce/woocommerce/issues/31337 has been addressed @@ -53,6 +48,7 @@ const runAddSimpleProductTest = () => { height: 700, } ); + await merchant.login(); await openNewProductAndVerify(); // Set product data and publish the product @@ -120,11 +116,8 @@ const runAddSimpleProductTest = () => { const runAddVariableProductTest = () => { describe('Add New Variable Product Page', () => { - beforeAll(async () => { - await merchant.login(); - }); - it('can create product with variations', async () => { + await merchant.login(); await openNewProductAndVerify(); // Set product data diff --git a/packages/js/e2e-core-tests/src/specs/merchant/wp-admin-product-search.test.js b/packages/js/e2e-core-tests/src/specs/merchant/wp-admin-product-search.test.js index d397c5685dc..a4f39b9ae03 100644 --- a/packages/js/e2e-core-tests/src/specs/merchant/wp-admin-product-search.test.js +++ b/packages/js/e2e-core-tests/src/specs/merchant/wp-admin-product-search.test.js @@ -8,9 +8,9 @@ const { createSimpleProduct } = require( '@woocommerce/e2e-utils' ); -const config = require( 'config' ); +const { config } = require( '@woocommerce/e2e-environment' ); const simpleProductName = config.get( 'products.simple.name' ); -const simpleProductPrice = config.has('products.simple.price') ? config.get('products.simple.price') : '9.99'; +const simpleProductPrice = config.get( 'products.simple.price', '9.99' ); const runProductSearchTest = () => { describe('Products > Search and View a product', () => { diff --git a/packages/js/e2e-core-tests/src/specs/merchant/wp-admin-settings-shipping-zones.test.js b/packages/js/e2e-core-tests/src/specs/merchant/wp-admin-settings-shipping-zones.test.js index ec59ac1df15..53716c179a5 100644 --- a/packages/js/e2e-core-tests/src/specs/merchant/wp-admin-settings-shipping-zones.test.js +++ b/packages/js/e2e-core-tests/src/specs/merchant/wp-admin-settings-shipping-zones.test.js @@ -21,8 +21,8 @@ const { beforeAll, } = require( '@jest/globals' ); -const config = require( 'config' ); -const simpleProductPrice = config.has( 'products.simple.price' ) ? config.get( 'products.simple.price' ) : '9.99'; +const { config } = require( '@woocommerce/e2e-environment' ); +const simpleProductPrice = config.get( 'products.simple.price', '9.99' ); const california = 'state:US:CA'; const sanFranciscoZIP = '94107'; const shippingZoneNameUS = 'US with Flat rate'; diff --git a/packages/js/e2e-core-tests/src/specs/shopper/front-end-cart-calculate-shipping.test.js b/packages/js/e2e-core-tests/src/specs/shopper/front-end-cart-calculate-shipping.test.js index 98add6b0d52..45a537c3db4 100644 --- a/packages/js/e2e-core-tests/src/specs/shopper/front-end-cart-calculate-shipping.test.js +++ b/packages/js/e2e-core-tests/src/specs/shopper/front-end-cart-calculate-shipping.test.js @@ -18,8 +18,8 @@ const { beforeAll, } = require( '@jest/globals' ); -const config = require( 'config' ); -const firstProductPrice = config.has( 'products.simple.price' ) ? config.get( 'products.simple.price' ) : '9.99'; +const { config } = require( '@woocommerce/e2e-environment' ); +const firstProductPrice = config.get( 'products.simple.price', '9.99' ); const secondProductPrice = '4.99'; const fourProductPrice = firstProductPrice * 4; var twoProductsPrice = (+firstProductPrice) + (+secondProductPrice); diff --git a/packages/js/e2e-core-tests/src/specs/shopper/front-end-cart-redirection.test.js b/packages/js/e2e-core-tests/src/specs/shopper/front-end-cart-redirection.test.js index e91262de4cd..f83f3948362 100644 --- a/packages/js/e2e-core-tests/src/specs/shopper/front-end-cart-redirection.test.js +++ b/packages/js/e2e-core-tests/src/specs/shopper/front-end-cart-redirection.test.js @@ -21,7 +21,7 @@ afterAll, } = require( '@jest/globals' ); -const config = require( 'config' ); +const { config } = require( '@woocommerce/e2e-environment' ); const simpleProductName = config.get( 'products.simple.name' ); const runCartRedirectionTest = () => { diff --git a/packages/js/e2e-core-tests/src/specs/shopper/front-end-cart.test.js b/packages/js/e2e-core-tests/src/specs/shopper/front-end-cart.test.js index fea98893cf7..fa70f769e39 100644 --- a/packages/js/e2e-core-tests/src/specs/shopper/front-end-cart.test.js +++ b/packages/js/e2e-core-tests/src/specs/shopper/front-end-cart.test.js @@ -17,9 +17,9 @@ const { beforeAll, } = require( '@jest/globals' ); -const config = require( 'config' ); +const { config } = require( '@woocommerce/e2e-environment' ); const simpleProductName = config.get( 'products.simple.name' ); -const singleProductPrice = config.has('products.simple.price') ? config.get('products.simple.price') : '9.99'; +const singleProductPrice = config.get( 'products.simple.price', '9.99' ); const twoProductPrice = singleProductPrice * 2; const runCartPageTest = () => { diff --git a/packages/js/e2e-core-tests/src/specs/shopper/front-end-checkout-create-account.test.js b/packages/js/e2e-core-tests/src/specs/shopper/front-end-checkout-create-account.test.js index 71dc37a1bdf..629185ada8e 100644 --- a/packages/js/e2e-core-tests/src/specs/shopper/front-end-checkout-create-account.test.js +++ b/packages/js/e2e-core-tests/src/specs/shopper/front-end-checkout-create-account.test.js @@ -21,7 +21,7 @@ const { beforeAll, } = require( '@jest/globals' ); -const config = require( 'config' ); +const { config } = require( '@woocommerce/e2e-environment' ); const customerBilling = config.get( 'addresses.customer.billing' ); const runCheckoutCreateAccountTest = () => { diff --git a/packages/js/e2e-core-tests/src/specs/shopper/front-end-checkout-login-account.test.js b/packages/js/e2e-core-tests/src/specs/shopper/front-end-checkout-login-account.test.js index b81d115cd36..33141c6495e 100644 --- a/packages/js/e2e-core-tests/src/specs/shopper/front-end-checkout-login-account.test.js +++ b/packages/js/e2e-core-tests/src/specs/shopper/front-end-checkout-login-account.test.js @@ -19,7 +19,7 @@ const { beforeAll, } = require( '@jest/globals' ); -const config = require('config'); +const { config } = require( '@woocommerce/e2e-environment' ); const runCheckoutLoginAccountTest = () => { describe('Shopper Checkout Login Account', () => { diff --git a/packages/js/e2e-core-tests/src/specs/shopper/front-end-checkout.test.js b/packages/js/e2e-core-tests/src/specs/shopper/front-end-checkout.test.js index 47999a5d07d..ea00b8911b3 100644 --- a/packages/js/e2e-core-tests/src/specs/shopper/front-end-checkout.test.js +++ b/packages/js/e2e-core-tests/src/specs/shopper/front-end-checkout.test.js @@ -9,9 +9,9 @@ const { uiUnblocked, } = require( '@woocommerce/e2e-utils' ); -const config = require( 'config' ); +const { config } = require( '@woocommerce/e2e-environment' ); const simpleProductName = config.get( 'products.simple.name' ); -const singleProductPrice = config.has('products.simple.price') ? config.get('products.simple.price') : '9.99'; +const singleProductPrice = config.get( 'products.simple.price', '9.99' ); const twoProductPrice = singleProductPrice * 2; const threeProductPrice = singleProductPrice * 3; const fourProductPrice = singleProductPrice * 4; diff --git a/packages/js/e2e-core-tests/src/specs/shopper/front-end-my-account-pay-order.test.js b/packages/js/e2e-core-tests/src/specs/shopper/front-end-my-account-pay-order.test.js index 4b6e9ca6609..f0ed8206fa7 100644 --- a/packages/js/e2e-core-tests/src/specs/shopper/front-end-my-account-pay-order.test.js +++ b/packages/js/e2e-core-tests/src/specs/shopper/front-end-my-account-pay-order.test.js @@ -11,7 +11,7 @@ const { let simplePostIdValue; let orderNum; -const config = require( 'config' ); +const { config } = require( '@woocommerce/e2e-environment' ); const simpleProductName = config.get( 'products.simple.name' ); const runMyAccountPayOrderTest = () => { diff --git a/packages/js/e2e-core-tests/src/specs/shopper/front-end-order-email-receiving.test.js b/packages/js/e2e-core-tests/src/specs/shopper/front-end-order-email-receiving.test.js index 45961523c36..095122e2861 100644 --- a/packages/js/e2e-core-tests/src/specs/shopper/front-end-order-email-receiving.test.js +++ b/packages/js/e2e-core-tests/src/specs/shopper/front-end-order-email-receiving.test.js @@ -12,7 +12,7 @@ let simplePostIdValue; let orderId; -const config = require( 'config' ); +const { config } = require( '@woocommerce/e2e-environment' ); const simpleProductName = config.get( 'products.simple.name' ); const customerEmail = config.get( 'addresses.customer.billing.email' ); const storeName = 'WooCommerce Core E2E Test Suite'; diff --git a/packages/js/e2e-core-tests/src/specs/shopper/front-end-product-browse-search-sort.test.js b/packages/js/e2e-core-tests/src/specs/shopper/front-end-product-browse-search-sort.test.js index a0a1a298582..fab50e10b7d 100644 --- a/packages/js/e2e-core-tests/src/specs/shopper/front-end-product-browse-search-sort.test.js +++ b/packages/js/e2e-core-tests/src/specs/shopper/front-end-product-browse-search-sort.test.js @@ -17,11 +17,11 @@ const { beforeAll, } = require( '@jest/globals' ); -const config = require( 'config' ); +const { config } = require( '@woocommerce/e2e-environment' ); const simpleProductName = config.get( 'products.simple.name' ); -const singleProductPrice = config.has('products.simple.price') ? config.get('products.simple.price') : '9.99'; -const singleProductPrice2 = config.has('products.simple.price') ? '1' + singleProductPrice : '19.99'; -const singleProductPrice3 = config.has('products.simple.price') ? '2' + singleProductPrice : '29.99'; +const singleProductPrice = config.get( 'products.simple.price', '9.99' ); +const singleProductPrice2 = '1' + singleProductPrice; +const singleProductPrice3 = '2' + singleProductPrice; const clothing = 'Clothing'; const audio = 'Audio'; const hardware = 'Hardware'; diff --git a/packages/js/e2e-core-tests/src/specs/shopper/front-end-single-product.test.js b/packages/js/e2e-core-tests/src/specs/shopper/front-end-single-product.test.js index 6a04850ca52..213e2d52aa6 100644 --- a/packages/js/e2e-core-tests/src/specs/shopper/front-end-single-product.test.js +++ b/packages/js/e2e-core-tests/src/specs/shopper/front-end-single-product.test.js @@ -9,7 +9,7 @@ const { uiUnblocked } = require( '@woocommerce/e2e-utils' ); -const config = require( 'config' ); +const { config } = require( '@woocommerce/e2e-environment' ); // Variables for simple product const simpleProductName = config.get( 'products.simple.name' ); @@ -20,7 +20,7 @@ const defaultVariableProduct = config.get( 'products.variable' ); let variableProductId; // Variables for grouped product -const simpleProductPrice = config.has('products.simple.price') ? config.get('products.simple.price') : '9.99'; +const simpleProductPrice = config.get( 'products.simple.price', '9.99' ); const simple1 = { name: simpleProductName + ' 1', regularPrice: simpleProductPrice diff --git a/packages/js/e2e-core-tests/src/specs/shopper/front-end-variable-product-updates.test.js b/packages/js/e2e-core-tests/src/specs/shopper/front-end-variable-product-updates.test.js index 8c0ac5a9c5f..bb64ca46c89 100644 --- a/packages/js/e2e-core-tests/src/specs/shopper/front-end-variable-product-updates.test.js +++ b/packages/js/e2e-core-tests/src/specs/shopper/front-end-variable-product-updates.test.js @@ -6,7 +6,7 @@ const { shopper, createVariableProduct, } = require( '@woocommerce/e2e-utils' ); -const config = require('config'); +const { config } = require( '@woocommerce/e2e-environment' ); let variablePostIdValue; @@ -100,7 +100,7 @@ const runVariableProductUpdateTest = () => { }); }); - + }; module.exports = runVariableProductUpdateTest; diff --git a/packages/js/e2e-environment/CHANGELOG.md b/packages/js/e2e-environment/CHANGELOG.md index a73b7838292..7fabf853710 100644 --- a/packages/js/e2e-environment/CHANGELOG.md +++ b/packages/js/e2e-environment/CHANGELOG.md @@ -1,11 +1,17 @@ # Unreleased + +## Added + +- Added a `config` export to the `@woocommerce/e2e-environment` package that has all data and methods of the [config](https://github.com/lorenwest/node-config) package + - it provides its own `get()` method that accepts an optional default parameter to be used if the property is not found in the config file. + ## Added - Added `post-results-to-github-pr.js` to post smoke test results to a GitHub PR. - Added jest flags to generate a json test report - Added more entries to `default.json` - + ## Added - Added `await` for every call to `shopper.logout` diff --git a/packages/js/e2e-environment/README.md b/packages/js/e2e-environment/README.md index e18973d5f3a..0aef343c41e 100644 --- a/packages/js/e2e-environment/README.md +++ b/packages/js/e2e-environment/README.md @@ -98,6 +98,22 @@ The E2E environment has the following methods to let us control Jest's overall b E2E_RETRY_TIMES=2 pnpx wc-e2e test:e2e ``` +### Default Environment Configurations + +The E2E environment exports a config object which provides all the functionality of the [config](https://www.npmjs.com/package/config) package along with extending the `get` method to accept an optional second argument that will be used if the property is not found in the config file. + +```js +const { config } = require( '@woocommerce/e2e-environment' ); + +// 'users.admin.email' doesn't exist +const adminEmail = config.get( 'users.admin.email', 'admin@woocommercecoree2etestsuite.com' ); + +console.log( adminEmail ); +// admin@woocommercecoree2etestsuite.com +``` + +**Note**: If the default parameter is not found and no optional parameter is provided, an error will be thrown. + #### Test Screenshots The test sequencer provides a screenshot function for test failures. To enable screenshots on test failure use diff --git a/packages/js/e2e-environment/config/config.js b/packages/js/e2e-environment/config/config.js new file mode 100644 index 00000000000..7cb078255fd --- /dev/null +++ b/packages/js/e2e-environment/config/config.js @@ -0,0 +1,32 @@ +/** + * External Dependencies + */ +const config = require( 'config' ); + +/** + * Since the 'config' object is not extensible, we create an empty 'e2eConfig' object and map + * its prototype to the 'config' object. This allows us to extend the new 'e2eConfig' object + * while still having access to all the data and methods of 'config' + */ +const e2eConfig = Object.create( config ); + +/** + * + * @param property { string } - the property to be fetched from the config file + * @param defaultValue { string | number | boolean | null } - default value if 'property' is not found + * @returns { string | number | boolean } + * @throws Error + */ +e2eConfig.get = ( property, defaultValue = null ) => { + if ( config.has( property ) ) { + return config.get( property ); + } else if ( defaultValue ) { + return defaultValue; + } + + throw new Error( + `Configuration property "${ property }" is not defined and no defaultValue has been provided` + ); +}; + +module.exports = e2eConfig; diff --git a/packages/js/e2e-environment/config/index.js b/packages/js/e2e-environment/config/index.js index ba96035504a..b4fd540211c 100644 --- a/packages/js/e2e-environment/config/index.js +++ b/packages/js/e2e-environment/config/index.js @@ -1,6 +1,7 @@ /** * Internal dependencies */ +const config = require('./config'); const jestConfig = require( './jest.config' ); const jestPuppeteerConfig = require( './jest-puppeteer.config' ); const jestobjectConfig = require('./jest-object.config'); @@ -12,6 +13,7 @@ const { } = require( './use-config' ); module.exports = { + config, jestConfig, ...jestobjectConfig, jestPuppeteerConfig, diff --git a/packages/js/e2e-utils/CHANGELOG.md b/packages/js/e2e-utils/CHANGELOG.md index d5f40537e1c..490cf0e5cde 100644 --- a/packages/js/e2e-utils/CHANGELOG.md +++ b/packages/js/e2e-utils/CHANGELOG.md @@ -1,4 +1,9 @@ # Unreleased +## Changes + +- Removed node-config dependency +- Added @woocommerce/e2e-environment peerDependency +- Updated the package to use the custom node-config object from @woocommerce/e2e-environment ## Fixed diff --git a/packages/js/e2e-utils/package.json b/packages/js/e2e-utils/package.json index 9ab299798d2..891c3d52630 100644 --- a/packages/js/e2e-utils/package.json +++ b/packages/js/e2e-utils/package.json @@ -14,7 +14,6 @@ "@automattic/puppeteer-utils": "github:Automattic/puppeteer-utils#0f3ec50", "@wordpress/deprecated": "^3.2.3", "@wordpress/e2e-test-utils": "^4.16.1", - "config": "3.3.3", "faker": "^5.1.0", "fishery": "^1.2.0" }, @@ -35,7 +34,8 @@ "eslint": "^8.1.0" }, "peerDependencies": { - "@woocommerce/api": "^0.2.0" + "@woocommerce/api": "^0.2.0", + "@woocommerce/e2e-environment": "^0.2.3" }, "publishConfig": { "access": "public" diff --git a/packages/js/e2e-utils/src/factories.js b/packages/js/e2e-utils/src/factories.js index 4ebc5e38041..fb7f080f825 100644 --- a/packages/js/e2e-utils/src/factories.js +++ b/packages/js/e2e-utils/src/factories.js @@ -1,5 +1,5 @@ import { HTTPClientFactory } from '@woocommerce/api'; -const config = require( 'config' ); +const { config } = require( '@woocommerce/e2e-environment' ); import { simpleProductFactory } from './factories/simple-product'; import { variableProductFactory } from './factories/variable-product'; import { variationFactory } from './factories/variation'; diff --git a/packages/js/e2e-utils/src/flows/constants.js b/packages/js/e2e-utils/src/flows/constants.js index 118a207bdd6..17010823f52 100644 --- a/packages/js/e2e-utils/src/flows/constants.js +++ b/packages/js/e2e-utils/src/flows/constants.js @@ -1,7 +1,7 @@ /** * External dependencies */ -const config = require( 'config' ); +const { config } = require( '@woocommerce/e2e-environment' ); const baseUrl = config.get( 'url' ); /** diff --git a/packages/js/e2e-utils/src/flows/merchant.js b/packages/js/e2e-utils/src/flows/merchant.js index ab880f255de..ec5b2986492 100644 --- a/packages/js/e2e-utils/src/flows/merchant.js +++ b/packages/js/e2e-utils/src/flows/merchant.js @@ -1,7 +1,7 @@ /** * External dependencies */ -const config = require( 'config' ); +const { config } = require( '@woocommerce/e2e-environment' ); /** * Internal dependencies @@ -440,10 +440,9 @@ const merchant = { */ collapseAdminMenu: async ( collapse = true ) => { const collapseButton = await page.$( '.folded #collapse-button' ); - if ( ( ! collapseButton ) == collapse ) { + if ( ( ! collapse ) == collapseButton ) { await collapseButton.click(); } - }, }; diff --git a/packages/js/e2e-utils/src/flows/shopper.js b/packages/js/e2e-utils/src/flows/shopper.js index 3f9e2cb43ff..92fbecb291a 100644 --- a/packages/js/e2e-utils/src/flows/shopper.js +++ b/packages/js/e2e-utils/src/flows/shopper.js @@ -2,7 +2,7 @@ * External dependencies */ const { pressKeyWithModifier } = require( '@wordpress/e2e-test-utils' ); -const config = require( 'config' ); +const { config } = require( '@woocommerce/e2e-environment' ); /** * Internal dependencies diff --git a/plugins/woocommerce/includes/class-wc-template-loader.php b/plugins/woocommerce/includes/class-wc-template-loader.php index d8c1182c931..cd621431b34 100644 --- a/plugins/woocommerce/includes/class-wc-template-loader.php +++ b/plugins/woocommerce/includes/class-wc-template-loader.php @@ -103,6 +103,9 @@ class WC_Template_Loader { /** * Checks whether a block template with that name exists. * + * **Note: ** This checks both the `templates` and `block-templates` directories + * as both conventions should be supported. + * * @since 5.5.0 * @param string $template_name Template to check. * @return boolean @@ -112,7 +115,31 @@ class WC_Template_Loader { return false; } - $has_template = is_readable( get_stylesheet_directory() . '/block-templates/' . $template_name . '.html' ); + $has_template = false; + $template_filename = $template_name . '.html'; + // Since Gutenberg 12.1.0, the conventions for block templates directories have changed, + // we should check both these possible directories for backwards-compatibility. + $possible_templates_dirs = array( 'templates', 'block-templates' ); + + // Combine the possible root directory names with either the template directory + // or the stylesheet directory for child themes, getting all possible block templates + // locations combinations. + $filepath = DIRECTORY_SEPARATOR . 'templates' . DIRECTORY_SEPARATOR . $template_filename; + $legacy_filepath = DIRECTORY_SEPARATOR . 'block-templates' . DIRECTORY_SEPARATOR . $template_filename; + $possible_paths = array( + get_stylesheet_directory() . $filepath, + get_stylesheet_directory() . $legacy_filepath, + get_template_directory() . $filepath, + get_template_directory() . $legacy_filepath, + ); + + // Check the first matching one. + foreach ( $possible_paths as $path ) { + if ( is_readable( $path ) ) { + $has_template = true; + break; + } + } /** * Filters the value of the result of the block template check. diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b87ac777b3f..6fcb3f28f4f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -113,12 +113,10 @@ importers: '@wordpress/babel-preset-default': 3.0.2 '@wordpress/browserslist-config': ^4.1.0 '@wordpress/deprecated': ^3.2.3 - config: 3.3.3 faker: ^5.1.0 dependencies: '@jest/globals': 26.6.2 '@wordpress/deprecated': 3.2.3 - config: 3.3.3 faker: 5.5.3 devDependencies: '@babel/cli': 7.12.8_@babel+core@7.12.9 @@ -218,7 +216,6 @@ importers: '@wordpress/browserslist-config': ^4.1.0 '@wordpress/deprecated': ^3.2.3 '@wordpress/e2e-test-utils': ^4.16.1 - config: 3.3.3 eslint: ^8.1.0 faker: ^5.1.0 fishery: ^1.2.0 @@ -226,7 +223,6 @@ importers: '@automattic/puppeteer-utils': github.com/Automattic/puppeteer-utils/0f3ec50 '@wordpress/deprecated': 3.2.3 '@wordpress/e2e-test-utils': 4.16.1_jest@27.3.1 - config: 3.3.3 faker: 5.5.3 fishery: 1.4.0 devDependencies: @@ -7572,6 +7568,7 @@ packages: engines: {node: '>= 6.0.0'} dependencies: json5: 2.2.0 + dev: true /config/3.3.6: resolution: {integrity: sha512-Hj5916C5HFawjYJat1epbyY2PlAgLpBtDUlr0MxGLgo3p5+7kylyvnRY18PqJHgnNWXcdd0eWDemT7eYWuFgwg==}