import type { Locator } from '@playwright/test'; import { BasePage } from './BasePage'; /** * Page object for Settings including Personal Settings where users can update their profile and manage MFA. */ export class SettingsPersonalPage extends BasePage { getMenuItems() { return this.page.getByTestId('menu-item'); } async gotoSettings() { await this.page.goto('/settings'); } getUserRole(): Locator { return this.page.getByTestId('current-user-role'); } async goto(): Promise { await this.page.goto('/settings/personal'); } getPersonalDataForm(): Locator { return this.page.getByTestId('personal-data-form'); } getFirstNameField(): Locator { return this.getPersonalDataForm().locator('input[name="firstName"]'); } getLastNameField(): Locator { return this.getPersonalDataForm().locator('input[name="lastName"]'); } getEmailField(): Locator { return this.getPersonalDataForm().locator('input[name="email"]'); } getSaveSettingsButton(): Locator { return this.page.getByTestId('save-settings-button'); } async fillPersonalData(firstName: string, lastName: string): Promise { await this.getFirstNameField().fill(firstName); await this.getLastNameField().fill(lastName); } async fillEmail(email: string): Promise { await this.getEmailField().fill(email); } async pressEnterOnEmail(): Promise { await this.getEmailField().press('Enter'); } async saveSettings(): Promise { await this.getSaveSettingsButton().click(); } /** * Complete workflow to update user's first and last name * @param firstName - The new first name * @param lastName - The new last name */ async updateFirstAndLastName(firstName: string, lastName: string): Promise { await this.goto(); await this.fillPersonalData(firstName, lastName); await this.saveSettings(); } getEnableMfaButton(): Locator { return this.page.getByTestId('enable-mfa-button'); } getDisableMfaButton(): Locator { return this.page.getByTestId('disable-mfa-button'); } getMfaCodeOrRecoveryCodeInput(): Locator { return this.page.locator('input[name="mfaCodeOrMfaRecoveryCode"]'); } getMfaSaveButton(): Locator { return this.page.getByTestId('mfa-save-button'); } async clickEnableMfa(): Promise { await this.clickByTestId('enable-mfa-button'); } async clickDisableMfa(): Promise { await this.getDisableMfaButton().click(); } /** * Navigate to personal settings and initiate MFA disable workflow */ async triggerDisableMfa(): Promise { await this.goto(); await this.clickDisableMfa(); } /** * Fill in MFA code or recovery code and save the form * @param code - MFA token or recovery code */ async fillMfaCodeAndSave(code: string): Promise { await this.getMfaCodeOrRecoveryCodeInput().fill(code); await this.getMfaSaveButton().click(); } getUpgradeCta(): Locator { return this.page.getByTestId('public-api-upgrade-cta'); } }