From d18dc96158e28904b2d547dba2c6590e75ef89b6 Mon Sep 17 00:00:00 2001 From: Ron Rennick Date: Wed, 27 Jan 2021 17:15:39 -0400 Subject: [PATCH] make cart coupon test more granular --- .../front-end-checkout-coupons.test.js | 132 +++++++++--------- 1 file changed, 65 insertions(+), 67 deletions(-) diff --git a/tests/e2e/core-tests/specs/shopper/front-end-checkout-coupons.test.js b/tests/e2e/core-tests/specs/shopper/front-end-checkout-coupons.test.js index 446c3af5c6a..2ed84a84310 100644 --- a/tests/e2e/core-tests/specs/shopper/front-end-checkout-coupons.test.js +++ b/tests/e2e/core-tests/specs/shopper/front-end-checkout-coupons.test.js @@ -19,11 +19,36 @@ const { beforeAll, } = require( '@jest/globals' ); +/** + * Apply a coupon code to the cart. + * + * @param couponCode string + * @returns {Promise} + */ +const applyCouponToCart = async ( couponCode ) => { + await expect(page).toClick('a', {text: 'Click here to enter your code'}); + await uiUnblocked(); + await expect(page).toFill('#coupon_code', couponCode); + await expect(page).toClick('button', {text: 'Apply coupon'}); + await uiUnblocked(); +}; + +/** + * Remove one coupon from the cart. + * + * @returns {Promise} + */ +const removeCouponFromCart = async () => { + await expect(page).toClick('.woocommerce-remove-coupon', {text: '[Remove]'}); + await uiUnblocked(); + await expect(page).toMatchElement('.woocommerce-message', {text: 'Coupon has been removed.'}); +} const runCheckoutApplyCouponsTest = () => { + let couponFixedCart; + let couponPercentage; + let couponFixedProduct; + describe('Checkout applying coupons', () => { - let couponFixedCart; - let couponPercentage; - let couponFixedProduct; beforeAll(async () => { await merchant.login(); await createSimpleProduct(); @@ -31,86 +56,59 @@ const runCheckoutApplyCouponsTest = () => { couponPercentage = await createCoupon('50', 'Percentage discount'); couponFixedProduct = await createCoupon('5', 'Fixed product discount'); await merchant.logout(); - }); - - it('allows customer to apply coupons in the checkout', async () => { await shopper.goToShop(); await shopper.addToCartFromShopPage('Simple product'); await uiUnblocked(); await shopper.goToCheckout(); + }); - // Apply Fixed cart discount coupon - await expect(page).toClick('a', {text: 'Click here to enter your code'}); - await uiUnblocked(); - await expect(page).toFill('#coupon_code', couponFixedCart); - await expect(page).toClick('button', {text: 'Apply coupon'}); - await uiUnblocked(); - await page.waitForSelector('.woocommerce-message', {text: 'Coupon code applied successfully.'}); + it('allows customer to apply fixed cart coupon', async () => { + await applyCouponToCart( couponFixedCart ); + await expect(page).toMatchElement('.woocommerce-message', {text: 'Coupon code applied successfully.'}); // Wait for page to expand total calculations to avoid flakyness await page.waitForSelector('.order-total'); // Verify discount applied and order total - await page.waitForSelector('.cart-discount .amount', {text: '$5.00'}); - await page.waitForSelector('.order-total .amount', {text: '$4.99'}); + await expect(page).toMatchElement('.cart-discount .amount', {text: '$5.00'}); + await expect(page).toMatchElement('.order-total .amount', {text: '$4.99'}); + await removeCouponFromCart(); + }); - // Remove coupon - await expect(page).toClick('.woocommerce-remove-coupon', {text: '[Remove]'}); - await uiUnblocked(); - await page.waitForSelector('.woocommerce-message', {text: 'Coupon has been removed.'}); + it('allows customer to apply percentage coupon', async () => { + await applyCouponToCart( couponPercentage ); + await expect(page).toMatchElement('.woocommerce-message', {text: 'Coupon code applied successfully.'}); - // Apply Percentage discount coupon - await expect(page).toClick('a', {text: 'Click here to enter your code'}); - await uiUnblocked(); - await expect(page).toFill('#coupon_code', couponPercentage); - await expect(page).toClick('button', {text: 'Apply coupon'}); - await uiUnblocked(); - await page.waitForSelector('.woocommerce-message', {text: 'Coupon code applied successfully.'}); - await page.waitForSelector('.cart-discount .amount', {text: '$4.99'}); - await page.waitForSelector('.order-total .amount', {text: '$5.00'}); + // Verify discount applied and order total + await expect(page).toMatchElement('.cart-discount .amount', {text: '$4.99'}); + await expect(page).toMatchElement('.order-total .amount', {text: '$5.00'}); + await removeCouponFromCart(); + }); - // Remove coupon - await expect(page).toClick('.woocommerce-remove-coupon', {text: '[Remove]'}); - await uiUnblocked(); - await page.waitForSelector('.woocommerce-message', {text: 'Coupon has been removed.'}); + it('allows customer to apply fixed product coupon', async () => { + await applyCouponToCart( couponFixedProduct ); + await expect(page).toMatchElement('.woocommerce-message', {text: 'Coupon code applied successfully.'}); + await expect(page).toMatchElement('.cart-discount .amount', {text: '$5.00'}); + await expect(page).toMatchElement('.order-total .amount', {text: '$4.99'}); + await removeCouponFromCart(); + }); - // Apply Fixed product discount coupon - await expect(page).toClick('a', {text: 'Click here to enter your code'}); - await uiUnblocked(); - await expect(page).toFill('#coupon_code', couponFixedProduct); - await expect(page).toClick('button', {text: 'Apply coupon'}); - await uiUnblocked(); - await page.waitForSelector('.woocommerce-message', {text: 'Coupon code applied successfully.'}); - await page.waitForSelector('.cart-discount .amount', {text: '$5.00'}); - await page.waitForSelector('.order-total .amount', {text: '$4.99'}); + it('prevents customer applying same coupon twice', async () => { + await applyCouponToCart( couponFixedProduct ); + await applyCouponToCart( couponFixedProduct ); + await expect(page).toMatchElement('.woocommerce-error', { text: 'Coupon code already applied!' }); + }); - // Try to apply the same coupon - await expect(page).toClick('a', {text: 'Click here to enter your code'}); - await uiUnblocked(); - await expect(page).toFill('#coupon_code', couponFixedProduct); - await expect(page).toClick('button', {text: 'Apply coupon'}); - await uiUnblocked(); - await page.waitForSelector('.woocommerce-error', { text: 'Coupon code already applied!' }); + it('allows customer to apply multiple coupon', async () => { + await applyCouponToCart( couponFixedCart ); + await expect(page).toMatchElement('.woocommerce-message', {text: 'Coupon code applied successfully.'}); + await expect(page).toMatchElement('.order-total .amount', {text: '$0.00'}); + }); - // Try to apply multiple coupons - await expect(page).toClick('a', {text: 'Click here to enter your code'}); - await uiUnblocked(); - await expect(page).toFill('#coupon_code', couponFixedCart); - await expect(page).toClick('button', {text: 'Apply coupon'}); - await uiUnblocked(); - await page.waitForSelector('.woocommerce-message', {text: 'Coupon code applied successfully.'}); - await page.waitForSelector('.order-total .amount', {text: '$0.00'}); - - // Remove coupon - await expect(page).toClick('.woocommerce-remove-coupon', {text: '[Remove]'}); - await uiUnblocked(); - await page.waitForSelector('.woocommerce-message', {text: 'Coupon has been removed.'}); - await expect(page).toClick('.woocommerce-remove-coupon', {text: '[Remove]'}); - await uiUnblocked(); - await page.waitForSelector('.woocommerce-message', {text: 'Coupon has been removed.'}); - - // Verify the total amount after all coupons removal - await page.waitForSelector('.order-total .amount', {text: '$9.99'}); + it('restores cart total when coupons are removed', async () => { + await removeCouponFromCart(); + await removeCouponFromCart(); + await expect(page).toMatchElement('.order-total .amount', {text: '$9.99'}); }); }); };