// playwright-dev-page.ts import { expect, Locator, Page } from "@playwright/test"; import { BasePage } from "./Base"; import { ExpandedFormPage } from "./ExpandedForm"; export class DashboardPage { readonly project: any; readonly page: Page; readonly tablesSideBar: Locator; readonly tabBar: Locator; readonly base: BasePage; readonly expandedForm: ExpandedFormPage; constructor(page: Page, project: any) { this.page = page; this.base = new BasePage(page); this.project = project; this.tablesSideBar = page.locator(".nc-treeview-container"); this.tabBar = page.locator(".nc-tab-bar"); this.expandedForm = new ExpandedFormPage(page); } async goto() { await this.page.goto(`/#/nc/${this.project.id}/auth`); } async gotoSettings() { await this.page.locator('[pw-data="nc-project-menu"]').click(); await this.page .locator('div.nc-project-menu-item:has-text(" Team & Settings")') .click(); } async openTable({ title }: { title: string }) { await this.tablesSideBar.locator(`.nc-project-tree-tbl-${title}`).click(); await this.tabBar .textContent() .then((text) => expect(text).toContain(title)); } async createTable({ title }: { title: string }) { await this.tablesSideBar.locator(".nc-add-new-table").click(); await this.page.locator(".ant-modal-body").waitFor(); await this.page.locator('[placeholder="Enter table name"]').fill(title); await this.page.locator('button:has-text("Submit")').click(); await expect(this.page).toHaveURL( `/#/nc/${this.project.id}/table/${title}` ); await this.page .locator('[pw-data="grid-load-spinner"]') .waitFor({ state: "hidden" }); } async verifyTableExistsInSidebar({ title }: { title: string }) { await expect( this.tablesSideBar.locator(`.nc-project-tree-tbl-${title}`) ).toBeVisible(); } async verifyTableDoesNotExistInSidebar({ title }: { title: string }) { await expect( await this.tablesSideBar.locator(`.nc-project-tree-tbl-${title}`).count() ).toBe(0); } async deleteTable({ title }: { title: string }) { await this.tablesSideBar .locator(`.nc-project-tree-tbl-${title}`) .click({ button: "right" }); await this.page .locator('div.nc-project-menu-item:has-text("Delete")') .click(); await this.page.locator('button:has-text("Yes")').click(); await this.base.toastWait({ message: "Deleted table successfully" }); } async renameTable({ title, newTitle }: { title: string; newTitle: string }) { await this.tablesSideBar .locator(`.nc-project-tree-tbl-${title}`) .click({ button: "right" }); await this.page .locator('div.nc-project-menu-item:has-text("Rename")') .click(); await this.page.locator('[placeholder="Enter table name"]').fill(newTitle); await this.page.locator('button:has-text("Submit")').click(); await this.base.toastWait({ message: "Table renamed successfully" }); } }