mirror of https://github.com/nocodb/nocodb
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
3.5 KiB
108 lines
3.5 KiB
import BasePage from '../../Base'; |
|
import { ProjectViewPage } from './index'; |
|
import { Locator } from '@playwright/test'; |
|
import { MetaDataPage } from './Metadata'; |
|
import { AuditPage } from './Audit'; |
|
import { SourcePage } from './SourcePage'; |
|
import { AclPage } from './Acl'; |
|
import { defaultBaseName } from '../../../constants'; |
|
|
|
export class DataSourcePage extends BasePage { |
|
readonly baseView: ProjectViewPage; |
|
readonly databaseType: Locator; |
|
readonly metaData: MetaDataPage; |
|
readonly audit: AuditPage; |
|
readonly source: SourcePage; |
|
readonly acl: AclPage; |
|
|
|
constructor(baseView: ProjectViewPage) { |
|
super(baseView.rootPage); |
|
this.baseView = baseView; |
|
this.databaseType = this.get().locator('.nc-extdb-db-type'); |
|
this.metaData = new MetaDataPage(this); |
|
this.audit = new AuditPage(this); |
|
this.source = new SourcePage(this); |
|
this.acl = new AclPage(this); |
|
} |
|
|
|
get() { |
|
return this.rootPage.locator('.nc-data-sources-view'); |
|
} |
|
|
|
getDsDetailsModal() { |
|
return this.rootPage.locator('.nc-active-data-sources-view'); |
|
} |
|
|
|
async closeDsDetailsModal() { |
|
await this.getDsDetailsModal().locator('.nc-close-btn').click(); |
|
await this.getDsDetailsModal().waitFor({ state: 'hidden' }); |
|
} |
|
|
|
async getDatabaseTypeList() { |
|
await this.databaseType.click(); |
|
const nodes = this.rootPage.locator('.nc-dropdown-ext-db-type').locator('.ant-select-item'); |
|
const list = []; |
|
for (let i = 0; i < (await nodes.count()); i++) { |
|
const node = nodes.nth(i); |
|
const text = await node.textContent(); |
|
list.push(text); |
|
} |
|
return list; |
|
} |
|
|
|
async openMetaSync({ rowIndex }: { rowIndex: number }) { |
|
// 0th offset for header |
|
const row = this.get() |
|
.locator('.ds-table-row') |
|
.nth(rowIndex + 1); |
|
|
|
await row.click(); |
|
|
|
await this.getDsDetailsModal().waitFor({ state: 'visible' }); |
|
await this.getDsDetailsModal().getByTestId('nc-meta-sync-tab').click(); |
|
// await row.getByTestId('nc-data-sources-view-meta-sync').click(); |
|
} |
|
|
|
async openERD({ rowIndex }: { rowIndex: number }) { |
|
// 0th offset for header |
|
const row = this.get() |
|
.locator('.ds-table-row') |
|
.nth(rowIndex + 1); |
|
|
|
await row.click(); |
|
|
|
// kludge: only in testing it's not rendering all tables |
|
await this.getDsDetailsModal().getByTestId('nc-acl-tab').click(); |
|
await this.getDsDetailsModal().getByTestId('nc-erd-tab').click(); |
|
} |
|
|
|
async openAudit({ rowIndex }: { rowIndex: number }) { |
|
// 0th offset for header |
|
const row = this.get() |
|
.locator('.ds-table-row') |
|
.nth(rowIndex + 1); |
|
|
|
await row.click(); |
|
|
|
await this.getDsDetailsModal().waitFor({ state: 'visible' }); |
|
await this.getDsDetailsModal().getByTestId('nc-audit-tab').click(); |
|
|
|
// await row.getByTestId('nc-data-sources-view-audit').click(); |
|
} |
|
|
|
async openEditConnection({ sourceName }: { sourceName: string }) { |
|
await this.get().locator('.ds-table-row', { hasText: sourceName }).click(); |
|
|
|
await this.getDsDetailsModal().waitFor({ state: 'visible' }); |
|
await this.getDsDetailsModal().getByTestId('nc-connection-tab').click(); |
|
|
|
await this.getDsDetailsModal().locator('.nc-general-overlay').first().waitFor({ state: 'hidden' }); |
|
} |
|
|
|
async openAcl({ dataSourceName = defaultBaseName }: { dataSourceName?: string } = {}) { |
|
await this.get().locator('.ds-table-row', { hasText: dataSourceName }).click(); |
|
|
|
await this.getDsDetailsModal().waitFor({ state: 'visible' }); |
|
await this.getDsDetailsModal().getByTestId('nc-acl-tab').click(); |
|
} |
|
}
|
|
|