Skip to content

Commit 7f1100e

Browse files
create e2e test with checkout widget
1 parent a77085e commit 7f1100e

File tree

3 files changed

+82
-3
lines changed

3 files changed

+82
-3
lines changed

.github/workflows/e2e-tests.yml

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,9 @@ jobs:
9191
docker exec magento bin/magento config:set payment/truelayer/payment_page_primary_color \#000000;
9292
docker exec magento bin/magento config:set payment/truelayer/payment_page_secondary_color \#e53935;
9393
docker exec magento bin/magento config:set payment/truelayer/payment_page_tertiary_color \#32329f;
94-
docker exec magento bin/magento config:set payment/truelayer/specificcountry GB,IE,ES,FR,DE,NL,LT;
94+
docker exec magento bin/magento config:set payment/truelayer/preselected 0;
95+
docker exec magento bin/magento config:set payment/truelayer/checkout_widget_recommended 1;
96+
docker exec magento bin/magento config:set payment/truelayer/checkout_widget_enabled 1;
9597
docker exec magento bin/magento config:set payment/truelayer/sandbox_client_id ${{ secrets.TEST_CLIENT_ID }};
9698
docker exec magento bin/magento config:set payment/truelayer/sandbox_key_id ${{ secrets.TEST_KID }};
9799
docker exec magento bin/magento config:set payment/truelayer/sandbox_private_key sandbox/default/private-key.pem;
@@ -111,5 +113,11 @@ jobs:
111113
docker exec -w /data/extensions/magento2 magento npx playwright install-deps
112114
docker exec -w /data/extensions/magento2 magento npx playwright install
113115
114-
- name: Run tests
115-
run: docker exec --env PW_TEST_HTML_REPORT_OPEN=never -w /data/extensions/magento2 magento npx playwright test --project=chromium --reporter=line
116+
- name: Run test with checkout widget
117+
run: docker exec --env PW_TEST_HTML_REPORT_OPEN=never -w /data/extensions/magento2 magento npx playwright test tests/e2e/magento-e2e-tests-with-widget.spec.ts --project="chromium" --reporter=line
118+
119+
- name: Disable checkout widget
120+
run: docker exec magento bin/magento config:set payment/truelayer/checkout_widget_enabled 0;
121+
122+
- name: Run test without checkout widget
123+
run: docker exec --env PW_TEST_HTML_REPORT_OPEN=never -w /data/extensions/magento2 magento npx playwright test tests/e2e/magento-e2e-tests-no-widget.spec.ts --project="chromium" --reporter=line
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import { chromium, webkit } from "@playwright/test";
2+
import { test } from "./fixtures/base-page";
3+
import { MockUkBankAccountsPage } from "./pages/mock-uk-bank-accounts-page";
4+
import { MockUkBankPage } from "./pages/mock-uk-bank-page";
5+
6+
test.describe('Truelayer magento plugin E2E Tests', () => {
7+
test('Successful Purchase of a Product using a valid email address', async ({
8+
isMobile,
9+
productPage,
10+
checkoutPage,
11+
orderConfirmationPage,
12+
}) => {
13+
// arrange
14+
await productPage.navigateTo();
15+
await productPage.addToCart();
16+
await checkoutPage.navigateToShippingStep();
17+
await checkoutPage.fillShippingDetailsAndSubmit('[email protected]', isMobile);
18+
await checkoutPage.clickPaymentMethod();
19+
await checkoutPage.clickWidgetPayButton();
20+
21+
const newTab = checkoutPage.page.context().waitForEvent('page');
22+
23+
if (isMobile === true) {
24+
await checkoutPage.selectMockBankAndContinueOnMobile();
25+
}
26+
else {
27+
await checkoutPage.selectWidgetMockBankAndContinueOnDesktop();
28+
}
29+
const mockUkBankPage = new MockUkBankPage(await newTab);
30+
const mockUkBankAccountsPage = new MockUkBankAccountsPage(await newTab);
31+
// }
32+
await mockUkBankPage.enterOnlineBankingDetailsAndContinue();
33+
await mockUkBankAccountsPage.selectAccountAndContinue();
34+
await checkoutPage.expectPaymentProcessingText();
35+
await orderConfirmationPage.expectOrderConfirmed(30000);
36+
})
37+
});

tests/e2e/pages/checkout-page.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,15 @@ export class CheckoutPage {
2222
paymentMethodButton = () => this.page.locator(this.paymentMethodSelector);
2323
placeOrderButton = () => this.page.getByRole('button', { name: 'Place Order' });
2424

25+
private widgetInitPaymentframe = () => this.page.locator('#tl-checkout-widget').contentFrame();
26+
private widgetBankingModal = () => this.page.locator('#tl-hpp-next').contentFrame();
27+
widgetPayButton = () => this.widgetInitPaymentframe().getByTestId('checkout-button-loaded');
28+
widgetSelectBankModal = () => this.widgetInitPaymentframe().getByText('Select your bank');
29+
widgetMockBank = () => this.widgetBankingModal().getByTestId('provider-list-item-mock-payments-gb-redirect');
30+
widgetContinueButton = () => this.widgetBankingModal().getByTestId('go-to-bank-button');
31+
widgetContinueOnDesktopButton = () => this.widgetBankingModal().getByText('on this device');
32+
widgetPaymentBeingProcessedText = () => this.widgetBankingModal().getByText('confirming your payment', {exact: false})
33+
2534
// Methods
2635

2736
async fillShippingDetailsAndSubmit(email: string, isMobile: boolean = false) {
@@ -73,4 +82,29 @@ export class CheckoutPage {
7382
await this.placeOrderButton().isEnabled();
7483
await this.placeOrderButton().click();
7584
}
85+
86+
async clickWidgetPayButton() {
87+
await expect(this.widgetPayButton()).toBeVisible({timeout: 5000});
88+
await this.widgetPayButton().click();
89+
}
90+
91+
async selectWidgetMockBankAndContinueOnDesktop() {
92+
await this.selectWidgetMockBankAndContinue();
93+
await this.widgetContinueOnDesktopButton().click();
94+
}
95+
96+
async selectMockBankAndContinueOnMobile() {
97+
await this.selectWidgetMockBankAndContinue();
98+
}
99+
100+
private async selectWidgetMockBankAndContinue(){
101+
await expect(this.widgetMockBank()).toBeVisible({timeout: 15000})
102+
await this.widgetMockBank().click();
103+
await expect(this.widgetContinueButton()).toBeVisible({timeout: 10000})
104+
await this.widgetContinueButton().click();
105+
}
106+
107+
async expectPaymentProcessingText() {
108+
await expect(this.widgetPaymentBeingProcessedText()).toBeVisible({timeout: 5000});
109+
}
76110
}

0 commit comments

Comments
 (0)