import { expect, type Locator, type Page } from '@playwright/test'; import { BasePage } from './BasePage'; import { ICustomerDetails } from '@business-logic/types/CustomerDetails'; export class BailoutPage extends BasePage { readonly page: Page; readonly firstNameTextBox: Locator; readonly lastNameTextBox: Locator; readonly phoneNumberTextBox: Locator; readonly emailAddressTextBox: Locator; issPageValue = 'bailout-page'; constructor(page: Page) { super(page); this.page = page; this.firstNameTextBox = this.page.locator('#firstNameField'); this.lastNameTextBox = this.page.locator('#lastNameField'); this.phoneNumberTextBox = this.page.locator('#phoneNumberField'); this.emailAddressTextBox = this.page.locator('#emailAddressField'); } async validateBailoutDetails(customerDetails: ICustomerDetails, bailoutCode: number) { await this.firstNameTextBox.waitFor({state:'visible'}); await expect.soft(this.firstNameTextBox).toHaveValue(customerDetails.firstName); await expect.soft(this.lastNameTextBox).toHaveValue(customerDetails.lastName); await expect.soft(this.phoneNumberTextBox).toHaveValue(customerDetails.phoneNumber); expect.soft(await this.getBailoutCode()).toEqual(bailoutCode); } async validateBailoutCode(bailoutCode: number) { expect.soft(await this.getBailoutCode()).toEqual(bailoutCode); } async validateBailoutDetailsNotNull(){ await this.firstNameTextBox.waitFor({state:'visible'}) expect(this.firstNameTextBox.inputValue()).not.toBe(''); expect(this.lastNameTextBox.inputValue()).not.toBe(''); expect(this.phoneNumberTextBox.inputValue()).not.toBe(''); expect(this.emailAddressTextBox.inputValue()).not.toBe(''); } async getBailoutCode() { const mainLocalStorage = JSON.parse(await this.page.evaluate('sessionStorage.getItem(\'main\')')); const bailoutCode = mainLocalStorage.applicationUser.pageData['bailout-page'].bailoutCode as number; return bailoutCode; } }