mirror of
https://github.com/woocommerce/woocommerce-paypal-payments.git
synced 2025-08-30 05:00:51 +08:00
207 lines
6.2 KiB
JavaScript
207 lines
6.2 KiB
JavaScript
const {test, expect} = require('@playwright/test');
|
|
const {serverExec} = require("./utils/server");
|
|
const {fillCheckoutForm, expectOrderReceivedPage, acceptTerms} = require("./utils/checkout");
|
|
const {openPaypalPopup, loginIntoPaypal, waitForPaypalShippingList, completePaypalPayment} = require("./utils/paypal-popup");
|
|
|
|
const {
|
|
CREDIT_CARD_NUMBER,
|
|
CREDIT_CARD_EXPIRATION,
|
|
CREDIT_CARD_CVV,
|
|
PRODUCT_URL,
|
|
PRODUCT_ID,
|
|
CHECKOUT_URL,
|
|
CHECKOUT_PAGE_ID,
|
|
CART_URL,
|
|
BLOCK_CHECKOUT_URL,
|
|
BLOCK_CHECKOUT_PAGE_ID,
|
|
BLOCK_CART_URL,
|
|
APM_ID,
|
|
} = process.env;
|
|
|
|
async function completeBlockContinuation(page) {
|
|
await expect(page.locator('#radio-control-wc-payment-method-options-ppcp-gateway')).toBeChecked();
|
|
|
|
await expect(page.locator('.component-frame')).toHaveCount(0);
|
|
|
|
await Promise.all(
|
|
page.waitForNavigation(),
|
|
page.locator('.wc-block-components-checkout-place-order-button').click(),
|
|
);
|
|
}
|
|
|
|
async function expectContinuation(page) {
|
|
await expect(page.locator('#payment_method_ppcp-gateway')).toBeChecked();
|
|
|
|
await expect(page.locator('.component-frame')).toHaveCount(0);
|
|
}
|
|
|
|
async function completeContinuation(page) {
|
|
await expectContinuation(page);
|
|
|
|
await Promise.all([
|
|
page.waitForNavigation(),
|
|
page.locator('#place_order').click(),
|
|
]);
|
|
}
|
|
|
|
test.describe('Classic checkout', () => {
|
|
test.beforeAll(async ({ browser }) => {
|
|
await serverExec('wp option update woocommerce_checkout_page_id ' + CHECKOUT_PAGE_ID);
|
|
});
|
|
|
|
test('PayPal button place order from Product page', async ({page}) => {
|
|
await page.goto(PRODUCT_URL);
|
|
|
|
const popup = await openPaypalPopup(page);
|
|
|
|
await loginIntoPaypal(popup);
|
|
|
|
await completePaypalPayment(popup);
|
|
|
|
await fillCheckoutForm(page);
|
|
|
|
await completeContinuation(page);
|
|
|
|
await expectOrderReceivedPage(page);
|
|
});
|
|
|
|
test('Advanced Credit and Debit Card place order from Checkout page', async ({page}) => {
|
|
await page.goto(PRODUCT_URL);
|
|
await page.locator('.single_add_to_cart_button').click();
|
|
|
|
await page.goto(CHECKOUT_URL);
|
|
await fillCheckoutForm(page);
|
|
|
|
await page.click("text=Credit Cards");
|
|
|
|
const creditCardNumber = page.frameLocator('#braintree-hosted-field-number').locator('#credit-card-number');
|
|
await creditCardNumber.fill(CREDIT_CARD_NUMBER);
|
|
|
|
const expirationDate = page.frameLocator('#braintree-hosted-field-expirationDate').locator('#expiration');
|
|
await expirationDate.fill(CREDIT_CARD_EXPIRATION);
|
|
|
|
const cvv = page.frameLocator('#braintree-hosted-field-cvv').locator('#cvv');
|
|
await cvv.fill(CREDIT_CARD_CVV);
|
|
|
|
await Promise.all([
|
|
page.waitForNavigation(),
|
|
page.locator('.ppcp-dcc-order-button').click(),
|
|
]);
|
|
|
|
await expectOrderReceivedPage(page);
|
|
});
|
|
|
|
test('PayPal APM button place order', async ({page}) => {
|
|
await page.goto(CART_URL + '?add-to-cart=' + PRODUCT_ID);
|
|
|
|
await page.goto(CHECKOUT_URL);
|
|
|
|
await fillCheckoutForm(page);
|
|
|
|
const popup = await openPaypalPopup(page, {fundingSource: APM_ID});
|
|
|
|
await popup.getByText('Continue', { exact: true }).click();
|
|
await completePaypalPayment(popup, {selector: '[name="Successful"]'});
|
|
|
|
await expectOrderReceivedPage(page);
|
|
});
|
|
|
|
test('PayPal APM button place order when redirect fails', async ({page}) => {
|
|
await page.goto(CART_URL + '?add-to-cart=' + PRODUCT_ID);
|
|
|
|
await page.goto(CHECKOUT_URL);
|
|
|
|
await fillCheckoutForm(page);
|
|
|
|
await page.evaluate('PayPalCommerceGateway.ajax.approve_order = null');
|
|
|
|
const popup = await openPaypalPopup(page, {fundingSource: APM_ID});
|
|
|
|
await popup.getByText('Continue', { exact: true }).click();
|
|
await completePaypalPayment(popup, {selector: '[name="Successful"]'});
|
|
|
|
await expect(page.locator('.woocommerce-error')).toBeVisible();
|
|
|
|
await page.reload();
|
|
await expectContinuation(page);
|
|
|
|
await acceptTerms(page);
|
|
|
|
await completeContinuation(page);
|
|
|
|
await expectOrderReceivedPage(page);
|
|
});
|
|
});
|
|
|
|
test.describe('Block checkout', () => {
|
|
test.beforeAll(async ({browser}) => {
|
|
await serverExec('wp option update woocommerce_checkout_page_id ' + BLOCK_CHECKOUT_PAGE_ID);
|
|
await serverExec('wp pcp settings update blocks_final_review_enabled true');
|
|
});
|
|
|
|
test('PayPal express block checkout', async ({page}) => {
|
|
await page.goto('?add-to-cart=' + PRODUCT_ID);
|
|
|
|
await page.goto(BLOCK_CHECKOUT_URL)
|
|
|
|
const popup = await openPaypalPopup(page);
|
|
|
|
await loginIntoPaypal(popup);
|
|
|
|
await completePaypalPayment(popup);
|
|
|
|
await completeBlockContinuation(page);
|
|
|
|
await expectOrderReceivedPage(page);
|
|
});
|
|
|
|
test('PayPal express block cart', async ({page}) => {
|
|
await page.goto(BLOCK_CART_URL + '?add-to-cart=' + PRODUCT_ID)
|
|
|
|
const popup = await openPaypalPopup(page);
|
|
|
|
await loginIntoPaypal(popup);
|
|
|
|
await completePaypalPayment(popup);
|
|
|
|
await completeBlockContinuation(page);
|
|
|
|
await expectOrderReceivedPage(page);
|
|
});
|
|
|
|
test.describe('Without review', () => {
|
|
test.beforeAll(async ({browser}) => {
|
|
await serverExec('wp pcp settings update blocks_final_review_enabled false');
|
|
});
|
|
|
|
test('PayPal express block checkout', async ({page}) => {
|
|
await page.goto('?add-to-cart=' + PRODUCT_ID);
|
|
|
|
await page.goto(BLOCK_CHECKOUT_URL)
|
|
|
|
const popup = await openPaypalPopup(page);
|
|
|
|
await loginIntoPaypal(popup);
|
|
|
|
await waitForPaypalShippingList(popup);
|
|
|
|
await completePaypalPayment(popup);
|
|
|
|
await expectOrderReceivedPage(page);
|
|
});
|
|
|
|
test('PayPal express block cart', async ({page}) => {
|
|
await page.goto(BLOCK_CART_URL + '?add-to-cart=' + PRODUCT_ID)
|
|
|
|
const popup = await openPaypalPopup(page);
|
|
|
|
await loginIntoPaypal(popup);
|
|
|
|
await waitForPaypalShippingList(popup);
|
|
|
|
await completePaypalPayment(popup);
|
|
|
|
await expectOrderReceivedPage(page);
|
|
});
|
|
});
|
|
});
|