|
|
|
import BasePage from '../Base';
|
|
|
|
import { WorkspacePage } from './';
|
|
|
|
import { expect } from '@playwright/test';
|
|
|
|
|
|
|
|
/*
|
|
|
|
nc-header-content
|
|
|
|
[data-testid="nc-dash-nav-workspaces"]
|
|
|
|
[data-testid="nc-dash-nav-explore"]
|
|
|
|
[data-testid="nc-dash-nav-help"]
|
|
|
|
[data-testid="nc-dash-nav-community"]
|
|
|
|
data-testid="nc-quick-action-wrapper"
|
|
|
|
input["placeholder="Quick Actions"]
|
|
|
|
[data-testid="nc-notification-bell-icon"]
|
|
|
|
[data-testid="nc-ws-account-menu-dropdown"]
|
|
|
|
|> .ant-dropdown-menu-vertical
|
|
|
|
|> [data-testid="nc-menu-accounts__user-settings"]
|
|
|
|
|> [data-testid="nc-menu-accounts__sign-out"]
|
|
|
|
*/
|
|
|
|
|
|
|
|
export class HeaderPage extends BasePage {
|
|
|
|
readonly workspace: WorkspacePage;
|
|
|
|
|
|
|
|
constructor(workspace: WorkspacePage) {
|
|
|
|
super(workspace.rootPage);
|
|
|
|
this.workspace = workspace;
|
|
|
|
}
|
|
|
|
|
|
|
|
get() {
|
|
|
|
return this.workspace.get().locator('.nc-header-content');
|
|
|
|
}
|
|
|
|
|
|
|
|
async waitFor({ state }) {
|
|
|
|
await this.get().waitFor({ state });
|
|
|
|
}
|
|
|
|
|
|
|
|
async verifyStaticElements() {
|
|
|
|
// logo on the left (disabled for now)
|
|
|
|
// await this.get().locator('img[src="/_nuxt/assets/img/brand/nocodb-full-color.png"]').waitFor({ state: 'visible' });
|
|
|
|
|
|
|
|
// menu items in the center (disabled for now)
|
|
|
|
// await this.get().locator('[data-testid="nc-dash-nav-workspaces"]').waitFor({ state: 'visible' });
|
|
|
|
// await this.get().locator('[data-testid="nc-dash-nav-explore"]').waitFor({ state: 'visible' });
|
|
|
|
// await this.get().locator('[data-testid="nc-dash-nav-help"]').waitFor({ state: 'visible' });
|
|
|
|
// await this.get().locator('[data-testid="nc-dash-nav-community"]').waitFor({ state: 'visible' });
|
|
|
|
|
|
|
|
// quick action, notifications & account menu on the right
|
|
|
|
// await this.get().locator('[data-testid="nc-quick-action-wrapper"]').waitFor({ state: 'visible' });
|
|
|
|
// await this.get().locator('input[placeholder="Quick Actions"]').waitFor({ state: 'visible' });
|
|
|
|
await this.get().locator('[data-testid="nc-notification-bell-icon"]').waitFor({ state: 'visible' });
|
|
|
|
await this.get().locator('[data-testid="nc-ws-account-menu-dropdown"]').waitFor({ state: 'visible' });
|
|
|
|
}
|
|
|
|
|
|
|
|
// Custom routines
|
|
|
|
//
|
|
|
|
|
|
|
|
// Menu : Workspaces, Explore, Help, Community
|
|
|
|
async openMenu(param: { title: string }) {
|
|
|
|
this.get().locator(`[data-testid="nc-dash-nav-${param.title.toLowerCase()}"]`);
|
|
|
|
}
|
|
|
|
|
|
|
|
async navigateUsingCmdK({
|
|
|
|
keySequence,
|
|
|
|
searchInput,
|
|
|
|
url,
|
|
|
|
}: {
|
|
|
|
keySequence?: string[];
|
|
|
|
searchInput?: string;
|
|
|
|
url: string;
|
|
|
|
}) {
|
|
|
|
await this.rootPage.keyboard.press('Meta+K');
|
|
|
|
await this.rootPage.locator('div.modal-content').waitFor({ state: 'visible' });
|
|
|
|
await this.rootPage.locator('div.modal-content').locator('.breadcrumb-list').click();
|
|
|
|
|
|
|
|
if (searchInput) {
|
|
|
|
await this.rootPage.locator('input[placeholder="Quick actions"]').click();
|
|
|
|
await this.rootPage.locator('input[placeholder="Quick actions"]').fill(searchInput);
|
|
|
|
await this.rootPage.keyboard.press('Enter');
|
|
|
|
} else if (keySequence) {
|
|
|
|
// press each key specified in the keySequence array one by one
|
|
|
|
for (const key of keySequence) {
|
|
|
|
await this.rootPage.keyboard.press(key);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// verify current url
|
|
|
|
await this.rootPage.waitForTimeout(100);
|
|
|
|
expect(this.rootPage.url()).toBe(url);
|
|
|
|
}
|
|
|
|
|
|
|
|
async accountMenuOpen({ title }: { title: 'user-settings' | 'sign-out' }) {
|
|
|
|
await this.get().locator('[data-testid="nc-ws-account-menu-dropdown"]').click();
|
|
|
|
await this.rootPage
|
|
|
|
.locator('.ant-dropdown-menu-vertical')
|
|
|
|
.locator(`[data-testid="nc-menu-accounts__${title}"]`)
|
|
|
|
.click();
|
|
|
|
if (title === 'sign-out') await this.rootPage.waitForURL(/signin/);
|
|
|
|
else await this.rootPage.waitForURL(/users/);
|
|
|
|
}
|
|
|
|
}
|