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.
115 lines
3.9 KiB
115 lines
3.9 KiB
import { expect, Locator } from '@playwright/test'; |
|
import { DashboardPage } from '../../index'; |
|
import BasePage from '../../../Base'; |
|
import { getTextExcludeIconText } from '../../../../tests/utils/general'; |
|
import { isEE } from '../../../../setup/db'; |
|
import { NcContext } from '../../../../setup'; |
|
|
|
export class LeftSidebarPage extends BasePage { |
|
readonly base: any; |
|
readonly dashboard: DashboardPage; |
|
|
|
readonly btn_workspace: Locator; |
|
readonly btn_newProject: Locator; |
|
readonly btn_cmdK: Locator; |
|
readonly btn_teamAndSettings: Locator; |
|
|
|
readonly modal_workspace: Locator; |
|
|
|
constructor(dashboard: DashboardPage) { |
|
super(dashboard.rootPage); |
|
this.dashboard = dashboard; |
|
|
|
this.btn_workspace = this.get().locator('.nc-workspace-menu'); |
|
this.btn_newProject = this.get().locator('[data-testid="nc-sidebar-create-base-btn"]'); |
|
this.btn_cmdK = this.get().locator('[data-testid="nc-sidebar-search-btn"]'); |
|
this.btn_teamAndSettings = this.get().locator('[data-testid="nc-sidebar-team-settings-btn"]'); |
|
|
|
this.modal_workspace = this.rootPage.locator('.nc-dropdown-workspace-menu'); |
|
} |
|
|
|
get() { |
|
return this.dashboard.get().locator('.nc-sidebar'); |
|
} |
|
|
|
async createProject({ title, context }: { title: string; context: NcContext }) { |
|
title = isEE() ? title : `nc-${context.workerId}-${title}`; |
|
await this.btn_newProject.click(); |
|
await this.rootPage.locator('.ant-modal-content:has-text(" Create Base")').waitFor(); |
|
await this.rootPage.locator('.ant-modal-content:has-text(" Create Base")').locator('input').fill(title); |
|
await this.rootPage |
|
.locator('.ant-modal-content:has-text(" Create Base")') |
|
.locator('button.ant-btn-primary') |
|
.click(); |
|
} |
|
|
|
async clickTeamAndSettings() { |
|
await this.btn_teamAndSettings.click(); |
|
} |
|
|
|
async clickWorkspace() { |
|
await this.btn_workspace.click(); |
|
} |
|
|
|
async clickHome() {} |
|
|
|
async getWorkspaceName() { |
|
return await this.btn_workspace.getAttribute('data-workspace-title'); |
|
} |
|
|
|
async verifyWorkspaceName({ title }: { title: string }) { |
|
await expect(this.btn_workspace.locator('.nc-workspace-title')).toHaveText(title); |
|
} |
|
|
|
async createWorkspace({ title }: { title: string }) { |
|
await this.clickWorkspace(); |
|
await this.modal_workspace.locator('.ant-dropdown-menu-item:has-text("Create New Workspace")').waitFor(); |
|
await this.modal_workspace.locator('.ant-dropdown-menu-item:has-text("Create New Workspace")').click(); |
|
|
|
const inputModal = this.rootPage.locator('div.ant-modal.active'); |
|
await inputModal.waitFor(); |
|
await inputModal.locator('input').clear(); |
|
await inputModal.locator('input').fill(title); |
|
await inputModal.locator('button.ant-btn-primary').click(); |
|
} |
|
|
|
async verifyWorkspaceCount({ count }: { count: number }) { |
|
await this.clickWorkspace(); |
|
|
|
// TODO: THere is one extra html attribute |
|
await expect(this.rootPage.getByTestId('nc-workspace-list')).toHaveCount(count + 1); |
|
} |
|
|
|
async getWorkspaceList() { |
|
const ws = []; |
|
await this.clickWorkspace(); |
|
const nodes = this.modal_workspace.locator('[data-testid="nc-workspace-list"]'); |
|
|
|
for (let i = 0; i < (await nodes.count()); i++) { |
|
ws.push(await getTextExcludeIconText(nodes.nth(i))); |
|
} |
|
|
|
ws.push(await this.getWorkspaceName()); |
|
await this.rootPage.keyboard.press('Escape'); |
|
|
|
return ws; |
|
} |
|
|
|
async openWorkspace(param: { title: any }) { |
|
await this.clickWorkspace(); |
|
const nodes = this.modal_workspace.locator('[data-testid="nc-workspace-list"]'); |
|
|
|
await this.rootPage.waitForTimeout(2000); |
|
|
|
for (let i = 0; i < (await nodes.count()); i++) { |
|
const text = await getTextExcludeIconText(nodes.nth(i)); |
|
if (text.toLowerCase() === param.title.toLowerCase()) { |
|
await nodes.nth(i).click({ force: true }); |
|
break; |
|
} |
|
} |
|
await this.rootPage.keyboard.press('Escape'); |
|
|
|
await this.rootPage.waitForTimeout(3500); |
|
} |
|
}
|
|
|