import { expect } from '@playwright/test'; import BasePage from '../../Base'; export abstract class ErdBasePage extends BasePage { vueFlow() { return this.get().locator('.vue-flow__viewport'); } async clickShowColumnNames() { await this.get().locator(`.nc-erd-showColumns-checkbox`).click(); (await this.vueFlow().elementHandle())?.waitForElementState('stable'); } async dbClickShowColumnNames() { await this.get().locator(`.nc-erd-showColumns-label`).dblclick(); (await this.vueFlow().elementHandle())?.waitForElementState('stable'); } async clickShowPkAndFk() { await this.get().locator(`.nc-erd-showPkAndFk-checkbox`).click(); (await this.vueFlow().elementHandle())?.waitForElementState('stable'); } async clickShowSqlViews() { await this.get().locator(`.nc-erd-showViews-checkbox`).click(); (await this.vueFlow().elementHandle())?.waitForElementState('stable'); } async clickShowMMTables() { await this.get().locator(`.nc-erd-showMMTables-checkbox`).click(); (await this.vueFlow().elementHandle())?.waitForElementState('stable'); } async clickShowJunctionTableNames() { await this.get().locator(`.nc-erd-showJunctionTableNames-checkbox`).click(); (await this.vueFlow().elementHandle())?.waitForElementState('stable'); } async verifyEasterEggNotShown() { await expect(await this.get().locator('.nc-erd-showMMTables-checkbox')).not.toBeVisible(); } async verifyNode({ tableName, columnName, columnNameShouldNotExist, }: { tableName: string; columnName?: string; columnNameShouldNotExist?: string; }) { await this.get().locator(`.nc-erd-table-node-${tableName}`).waitFor({ state: 'visible' }); if (columnName) { await this.get().locator(`.nc-erd-table-node-${tableName}-column-${columnName}`).waitFor({ state: 'visible' }); } if (columnNameShouldNotExist) { await this.get() .locator(`.nc-erd-table-node-${tableName}-column-${columnNameShouldNotExist}`) .waitFor({ state: 'hidden' }); } } async verifyNodeDoesNotExist({ tableName }: { tableName: string }) { await this.get().locator(`.nc-erd-table-node-${tableName}`).waitFor({ state: 'hidden' }); } async verifyColumns({ tableName, columns }: { tableName: string; columns: string[] }) { for (const column of columns) { await this.verifyNode({ tableName, columnName: column }); } } async verifyNodesCount(count: number) { await expect(this.get().locator('.nc-erd-table-node')).toHaveCount(count); } async verifyEdgesCount({ count, circleCount, rectangleCount, }: { count: number; circleCount: number; rectangleCount: number; }) { await expect(this.get().locator('.vue-flow__edge')).toHaveCount(count); await expect(this.get().locator('.nc-erd-edge-circle')).toHaveCount(circleCount); await expect(this.get().locator('.nc-erd-edge-rect')).toHaveCount(rectangleCount); } async verifyJunctionTableLabel({ tableTitle, tableName }: { tableName: string; tableTitle: string }) { await await this.vueFlow().locator(`.nc-erd-table-label-${tableTitle}-${tableName}`).locator('text').waitFor({ state: 'visible', }); } }