woocommerce/plugins/woocommerce-blocks/tests/utils/shopper.js

104 lines
2.5 KiB
JavaScript

/**
* External dependencies
*/
import {
shopper as wcShopper,
uiUnblocked,
SHOP_CART_PAGE,
} from '@woocommerce/e2e-utils';
/**
* Internal dependencies
*/
import { getBlockPagePermalink } from './get-block-page-permalink';
import { SHOP_CART_BLOCK_PAGE, SHOP_CHECKOUT_BLOCK_PAGE } from './constants';
export const shopper = {
...wcShopper,
goToCheckoutBlock: async () => {
await page.goto( SHOP_CHECKOUT_BLOCK_PAGE, {
waitUntil: 'networkidle0',
} );
},
goToCartBlock: async () => {
await page.goto( SHOP_CART_BLOCK_PAGE, {
waitUntil: 'networkidle0',
} );
},
productIsInCheckoutBlock: async ( productTitle, quantity, total ) => {
// Make sure Order summary is expanded
const [ button ] = await page.$x(
`//button[contains(@aria-expanded, 'false')]//span[contains(text(), 'Order summary')]`
);
if ( button ) {
await button.click();
}
await expect( page ).toMatchElement( 'span', {
text: productTitle,
} );
await expect( page ).toMatchElement(
'div.wc-block-components-order-summary-item__quantity',
{
text: quantity,
}
);
await expect( page ).toMatchElement(
'span.wc-block-components-product-price__value',
{
text: total,
}
);
},
goToBlockPage: async ( title ) => {
await page.goto( await getBlockPagePermalink( title ), {
waitUntil: 'networkidle0',
} );
await expect( page ).toMatchElement( 'h1', { text: title } );
},
block: {
goToCart: async () => {
await page.goto( SHOP_CART_BLOCK_PAGE, {
waitUntil: 'networkidle0',
} );
},
/**
* For some reason "wcShopper.emptyCart" sometimes result in an error, but using the same
* implementation here fixes the problem.
*/
emptyCart: async () => {
await page.goto( SHOP_CART_PAGE, {
waitUntil: 'networkidle0',
} );
// Remove products if they exist
if ( ( await page.$( '.remove' ) ) !== null ) {
let products = await page.$$( '.remove' );
while ( products && products.length > 0 ) {
await page.click( '.remove' );
await uiUnblocked();
products = await page.$$( '.remove' );
}
}
// Remove coupons if they exist
if ( ( await page.$( '.woocommerce-remove-coupon' ) ) !== null ) {
await page.click( '.woocommerce-remove-coupon' );
await uiUnblocked();
}
await page.waitForSelector( '.woocommerce-info' );
// eslint-disable-next-line jest/no-standalone-expect
await expect( page ).toMatchElement( '.woocommerce-info', {
text: 'Your cart is currently empty.',
} );
},
},
};