|
|
|
import { expect, Locator, Page } from '@playwright/test';
|
|
|
|
import BasePage from '../Base';
|
|
|
|
import { HeaderPage } from './HeaderPage';
|
|
|
|
import { LeftSideBarPage } from './LeftSideBarPage';
|
|
|
|
import { ContainerPage } from './ContainerPage';
|
|
|
|
import { CollaborationPage } from './CollaborationPage';
|
|
|
|
|
|
|
|
/*
|
|
|
|
Workspace page
|
|
|
|
--------------
|
|
|
|
nc-app
|
|
|
|
nc-header-content
|
|
|
|
nc-root
|
|
|
|
nc-left-sidebar
|
|
|
|
nc-workspace-settings
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
export class WorkspacePage extends BasePage {
|
|
|
|
readonly header: HeaderPage;
|
|
|
|
readonly leftSideBar: LeftSideBarPage;
|
|
|
|
readonly container: ContainerPage;
|
|
|
|
readonly collaboration: CollaborationPage;
|
|
|
|
|
|
|
|
constructor(rootPage: Page) {
|
|
|
|
super(rootPage);
|
|
|
|
this.header = new HeaderPage(this);
|
|
|
|
this.leftSideBar = new LeftSideBarPage(this);
|
|
|
|
this.container = new ContainerPage(this);
|
|
|
|
this.collaboration = new CollaborationPage(this);
|
|
|
|
}
|
|
|
|
|
|
|
|
get() {
|
|
|
|
return this.rootPage.locator('[id="nc-app"]');
|
|
|
|
}
|
|
|
|
|
|
|
|
async waitFor({ state }) {
|
|
|
|
await this.get().waitFor({ state });
|
|
|
|
await this.header.waitFor({ state });
|
|
|
|
await this.leftSideBar.waitFor({ state });
|
|
|
|
await this.container.waitFor({ state });
|
|
|
|
}
|
|
|
|
|
|
|
|
async verifyStaticElements() {
|
|
|
|
await this.waitFor({ state: 'visible' });
|
|
|
|
await this.header.verifyStaticElements();
|
|
|
|
await this.leftSideBar.verifyStaticElements();
|
|
|
|
await this.container.verifyStaticElements();
|
|
|
|
}
|
|
|
|
|
|
|
|
async workspaceCreate({ title }) {
|
|
|
|
await this.waitFor({ state: 'visible' });
|
|
|
|
await this.leftSideBar.workspaceCreate({ title });
|
|
|
|
}
|
|
|
|
|
|
|
|
async workspaceRename({ title, newTitle }: { newTitle: string; title: string }) {
|
|
|
|
await this.leftSideBar.workspaceRename({ title, newTitle });
|
|
|
|
}
|
|
|
|
|
|
|
|
async workspaceDelete({ title }) {
|
|
|
|
await this.waitFor({ state: 'visible' });
|
|
|
|
await this.leftSideBar.workspaceDelete({ title });
|
|
|
|
}
|
|
|
|
|
|
|
|
async workspaceOpen({ title }) {
|
|
|
|
await this.waitFor({ state: 'visible' });
|
|
|
|
await (await this.leftSideBar.workspaceGetLocator(title)).click();
|
|
|
|
}
|
|
|
|
|
|
|
|
async workspaceCount() {
|
|
|
|
return await this.leftSideBar.getWorkspaceCount();
|
|
|
|
}
|
|
|
|
|
|
|
|
async projectCreate({ title, type }) {
|
|
|
|
await this.waitFor({ state: 'visible' });
|
|
|
|
await this.container.projectCreate({ title, type });
|
|
|
|
}
|
|
|
|
|
|
|
|
async projectDelete({ title }) {
|
|
|
|
await this.container.projectDelete({ title });
|
|
|
|
}
|
|
|
|
|
|
|
|
async projectOpen({ title }) {
|
|
|
|
await this.waitFor({ state: 'visible' });
|
|
|
|
await this.container.projectOpen({ title });
|
|
|
|
}
|
|
|
|
|
|
|
|
async projectRename({ title, newTitle }) {
|
|
|
|
await this.container.projectRename({ title, newTitle });
|
|
|
|
}
|
|
|
|
|
|
|
|
async projectMove({ title, newWorkspace }) {
|
|
|
|
await this.container.projectMove({ title, newWorkspace });
|
|
|
|
}
|
|
|
|
|
|
|
|
async projectAddToFavourites({ title }: { title: string }) {
|
|
|
|
await this.container.projectAddToFavourites({ title });
|
|
|
|
}
|
|
|
|
|
|
|
|
async openQuickAccess(menu: 'Recent' | 'Shared with me' | 'Favourites') {
|
|
|
|
await this.leftSideBar.openQuickAccess(menu);
|
|
|
|
await this.rootPage.waitForTimeout(100);
|
|
|
|
}
|
|
|
|
|
|
|
|
async checkWorkspaceCreateButton(param: { exists: boolean }) {
|
|
|
|
// fix me! wait for page load to complete
|
|
|
|
// one of the two checks should suffice
|
|
|
|
await this.rootPage.waitForTimeout(1000);
|
|
|
|
expect(await this.leftSideBar.createWorkspace.count()).toBe(param.exists ? 1 : 0);
|
|
|
|
await this.leftSideBar
|
|
|
|
.get()
|
|
|
|
.locator('[data-testid="nc-create-workspace"]')
|
|
|
|
.waitFor({ state: param.exists ? 'visible' : 'hidden' });
|
|
|
|
}
|
|
|
|
|
|
|
|
async logout() {
|
|
|
|
await this.header.accountMenuOpen({ title: 'sign-out' });
|
|
|
|
}
|
|
|
|
|
|
|
|
// Add on verification routines
|
|
|
|
// can be done using expect at source
|
|
|
|
|
|
|
|
async openPasswordChangeModal() {
|
|
|
|
await this.header.accountMenuOpen({ title: 'user-settings' });
|
|
|
|
await this.rootPage.locator('[data-menu-id="password-reset"]').click();
|
|
|
|
}
|
|
|
|
|
|
|
|
async waitForRender() {
|
|
|
|
await this.header.verifyStaticElements();
|
|
|
|
}
|
|
|
|
|
|
|
|
// async verifyAccess(role: string) {
|
|
|
|
// const addWs = this.LeftSideBar.createWorkspace;
|
|
|
|
// const addProject = this.Container.newProjectButton;
|
|
|
|
// const collaborators = this.Container.collaborators;
|
|
|
|
// const billing = this.Container.billing;
|
|
|
|
// const moreActions = this.Container.moreActions;
|
|
|
|
//
|
|
|
|
// if (role === 'owner') expect(await billing.isVisible()).toBeTruthy();
|
|
|
|
// else expect(await billing.isVisible()).toBeFalsy();
|
|
|
|
//
|
|
|
|
// expect(await addWs.isVisible()).toBeTruthy();
|
|
|
|
//
|
|
|
|
// if (role === 'creator' || role === 'owner') {
|
|
|
|
// expect(await collaborators.isVisible()).toBeTruthy();
|
|
|
|
// expect(await addProject.isVisible()).toBeTruthy();
|
|
|
|
// expect(await moreActions.isVisible()).toBeTruthy();
|
|
|
|
//
|
|
|
|
// const menuItems = await this.Container.getMoreActionsSubMenuDetails();
|
|
|
|
// if (role === 'creator') {
|
|
|
|
// expect(menuItems).toEqual(['Rename Project', 'Duplicate Project']);
|
|
|
|
// } else {
|
|
|
|
// expect(menuItems).toEqual(['Rename Project', 'Duplicate Project', 'Move Project', 'Delete Project']);
|
|
|
|
// }
|
|
|
|
// } else {
|
|
|
|
// expect(await collaborators.isVisible()).toBeFalsy();
|
|
|
|
// expect(await billing.isVisible()).toBeFalsy();
|
|
|
|
// expect(await addProject.isVisible()).toBeFalsy();
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
|
|
|
async verifyAccess(role: string) {
|
|
|
|
const collaborators = this.container.collaborators;
|
|
|
|
const billing = this.container.billing;
|
|
|
|
const settings = this.container.settings;
|
|
|
|
|
|
|
|
if (role === 'owner') {
|
|
|
|
expect(await billing.isVisible()).toBeTruthy();
|
|
|
|
expect(await settings.isVisible()).toBeTruthy();
|
|
|
|
} else {
|
|
|
|
expect(await billing.isVisible()).toBeFalsy();
|
|
|
|
expect(await settings.isVisible()).toBeFalsy();
|
|
|
|
}
|
|
|
|
|
|
|
|
await this.rootPage.waitForTimeout(1000);
|
|
|
|
|
|
|
|
if (role === 'creator' || role === 'owner') {
|
|
|
|
console.log(await this.container.get().count());
|
|
|
|
console.log(await this.container.collaborators.count());
|
|
|
|
expect(await collaborators.isVisible()).toBeTruthy();
|
|
|
|
} else {
|
|
|
|
expect(await collaborators.isVisible()).toBeFalsy();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|