import { expect, Locator } from '@playwright/test'; import BasePage from '../Base'; import { AccountPage } from './index'; export class AccountTokenPage extends BasePage { readonly createBtn: Locator; readonly createInputDiv: Locator; private accountPage: AccountPage; constructor(accountPage: AccountPage) { super(accountPage.rootPage); this.accountPage = accountPage; this.createBtn = this.get().locator(`[data-testid="nc-token-create"]`); this.createInputDiv = accountPage.rootPage.locator(`.nc-token-generate`); } async goto() { return this.waitForResponse({ uiAction: async () => await this.rootPage.goto('/#/account/tokens'), httpMethodsToMatch: ['GET'], requestUrlPathToMatch: `api/v1/tokens`, }); } get() { return this.accountPage.get().locator(`[data-testid="nc-token-list"]`); } async createToken({ description }: { description: string }) { await this.createBtn.click(); await this.createInputDiv.locator(`[data-testid="nc-token-input"]`).fill(description); await this.createInputDiv.locator(`[data-testid="nc-token-save-btn"]`).click(); } getTokenRow({ idx = 0 }) { return this.get().locator(`span:nth-child(${idx})`); } async toggleVisibility({ idx = 0 }) { const row = this.getTokenRow({ idx }); await row.locator('.nc-toggle-token-visibility').click(); } async deleteToken({ description }: { description: string }) { await this.rootPage.locator('[data-testid="nc-token-row-action-icon"]').click(); await this.rootPage.locator('.ant-modal.active button:has-text("Delete Token")').click(); expect(await this.get().locator(`span:has-text("${description}:visible")`).count()).toBe(0); } }