DigitalConsumer.ISS/playwright-tests/pages/AfterpayPage.ts
2026-04-15 08:20:24 -04:00

60 lines
No EOL
2.7 KiB
TypeScript

import { Locator, Page } from "@playwright/test";
import { BasePage } from "./BasePage";
import { IClaimDetails, IPaymentDetails, IPaymentDetailsAdyen } from "@business-logic/types/CustomerDetails";
import { ServicePackage } from "@business-logic/types/Enums";
export class AfterpayPage extends BasePage {
readonly page: Page;
readonly passwordTextBox: Locator;
readonly submitButton: Locator;
readonly confirmButton: Locator;
readonly selectAfterpayWithInterestButton: Locator;
readonly selectAfterpayWithoutInterestButton: Locator;
readonly continueAfterpayButton: Locator;
constructor(page: Page) {
super(page);
this.page = page;
this.passwordTextBox = page.getByTestId('login-password-input');
this.submitButton = page.getByRole('button', { name: 'Continue' });
this.confirmButton = page.getByRole('button', { name: 'Confirm' });
// Monthly with interest option
this.selectAfterpayWithInterestButton = page.getByRole('radio', { name: /month/ });
// Biweekly without interest option
this.selectAfterpayWithoutInterestButton = page.getByTestId('payment-types-label').filter({ hasText: /every 2 weeks/ });
this.continueAfterpayButton = page.getByRole('button', { name: 'Continue' });
}
async login(password: string) {
await this.passwordTextBox.fill(password);
await this.submitButton.click();
}
async executeAfterpayPayment(paymentDetailsAdyen: IPaymentDetailsAdyen, claimDetails: IClaimDetails, servicePackage: ServicePackage) {
const confirmButtonOrPaymentOptions = this.confirmButton.or(this.selectAfterpayWithoutInterestButton);
await this.login(paymentDetailsAdyen.password!);
await this.page.locator('div[data-testid=\'loading-icon-svg\']').filter({ visible: true}).first().waitFor({ state: 'hidden' });
await confirmButtonOrPaymentOptions.waitFor({ state: 'visible' });
if (await this.confirmButton.isVisible()) {
await this.confirmButton.waitFor({ state: 'attached' });
await this.confirmButton.click();
} else {
// For some orders, user will have 2 options to choose from: monthly with interest or biweekly without interest
if (await this.selectAfterpayWithoutInterestButton.isVisible()) {
await this.selectAfterpayWithoutInterestButton.click();
await this.continueAfterpayButton.click();
} else if (await this.selectAfterpayWithInterestButton.isVisible()) {
await this.selectAfterpayWithInterestButton.click();
await this.continueAfterpayButton.click();
}
await this.confirmButton.click();
}
}
}