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.
96 lines
2.8 KiB
96 lines
2.8 KiB
import BasePage from '../Base'; |
|
import { WorkspacePage } from './'; |
|
import { Locator } from '@playwright/test'; |
|
|
|
/* |
|
nc-workspace-settings |
|
nc-collaborator-table-container |
|
*/ |
|
|
|
export class CollaborationPage extends BasePage { |
|
readonly workspace: WorkspacePage; |
|
readonly list_collaborators: Locator; |
|
|
|
constructor(workspace: WorkspacePage) { |
|
super(workspace.rootPage); |
|
this.workspace = workspace; |
|
this.list_collaborators = this.get().locator('.nc-collaborators-list-table'); |
|
} |
|
|
|
get() { |
|
return this.workspace.get().locator('.nc-workspace-settings').locator('.nc-collaborator-table-container'); |
|
} |
|
|
|
async waitFor({ state }) { |
|
await this.get().waitFor({ state }); |
|
} |
|
|
|
async addUsers(email: string, role: string) { |
|
await this.waitFor({ state: 'visible' }); |
|
|
|
// click add user button to open modal |
|
await this.get().getByTestId('nc-add-member-btn').click(); |
|
|
|
const inviteModal = this.rootPage.locator('.nc-invite-dlg'); |
|
|
|
await inviteModal.waitFor({ state: 'visible' }); |
|
|
|
const input_email = inviteModal.locator('input[id="email"]'); |
|
const selector_role = inviteModal.locator('.ant-select-selector'); |
|
const button_addUser = inviteModal.locator('.nc-invite-btn'); |
|
|
|
// flaky test: wait for the input to be ready |
|
await this.rootPage.waitForTimeout(500); |
|
|
|
// email |
|
await input_email.fill(email + ' '); |
|
|
|
// role |
|
await selector_role.first().click(); |
|
const menu = this.rootPage.locator('.nc-role-selector-dropdown:visible'); |
|
await menu.locator(`.nc-role-select-workspace-level-${role.toLowerCase()}:visible`).first().click(); |
|
|
|
// submit |
|
|
|
// allow button to be enabled |
|
await this.rootPage.waitForTimeout(500); |
|
|
|
await button_addUser.click(); |
|
await this.verifyToast({ message: 'Invitation sent successfully' }); |
|
await this.rootPage.waitForTimeout(500); |
|
} |
|
|
|
async getCollaboratorsCount() { |
|
await this.waitFor({ state: 'visible' }); |
|
const collaborators = await this.list_collaborators.locator('tr.ant-table-row').count(); |
|
return collaborators; |
|
} |
|
|
|
async getCollaborator({ index }: { index: number }) { |
|
await this.waitFor({ state: 'visible' }); |
|
const email = await this.list_collaborators |
|
.locator('tr.ant-table-row') |
|
.nth(index) |
|
.locator('td.ant-table-cell') |
|
.nth(0) |
|
.innerText(); |
|
const role = await this.list_collaborators |
|
.locator('tr.ant-table-row') |
|
.nth(index) |
|
.locator('td.ant-table-cell') |
|
.nth(1) |
|
.innerText(); |
|
return { email, role }; |
|
} |
|
|
|
async removeCollaborator({ index }: { index: number }) { |
|
await this.waitFor({ state: 'visible' }); |
|
await this.list_collaborators |
|
.locator('tr.ant-table-row') |
|
.nth(index) |
|
.locator('td.ant-table-cell') |
|
.nth(2) |
|
.locator('button') |
|
.click(); |
|
} |
|
}
|
|
|