import { Locator, expect } from "@playwright/test"; import { SettingsPage } from "."; import BasePage from "../../Base"; import { writeFileAsync } from "xlsx"; import { ToolbarPage } from "../common/Toolbar"; export class TeamsPage extends BasePage { private readonly settings: SettingsPage; readonly inviteTeamBtn: Locator; readonly inviteTeamModal: Locator; constructor(settings: SettingsPage) { super(settings.rootPage); this.settings = settings; this.inviteTeamBtn = this.get().locator(`button:has-text("Invite Team")`); this.inviteTeamModal = this.rootPage.locator( `.nc-modal-invite-user-and-share-base` ); } get() { return this.settings .get() .locator(`[pw-data="nc-settings-subtab-Users Management"]`); } prefixEmail(email: string) { const parallelId = process.env.TEST_PARALLEL_INDEX ?? '0' return `nc_test_${parallelId}_${email}`; } getSharedBaseSubModal() { return this.rootPage.locator(`[data-pw="nc-share-base-sub-modal"]`); } async invite({ email, role }: { email: string; role: string }) { email = this.prefixEmail(email); await this.inviteTeamBtn.click(); await this.inviteTeamModal .locator(`input[placeholder="E-mail"]`) .fill(email); await this.inviteTeamModal.locator(`.nc-user-roles`).click(); const userRoleModal = this.rootPage.locator(`.nc-dropdown-user-role`); await userRoleModal.locator(`.nc-role-option:has-text("${role}")`).click(); await this.inviteTeamModal.locator(`button:has-text("Invite")`).click(); await this.verifyToast({ message: "Successfully updated the user details" }); return await this.inviteTeamModal.locator(`.ant-alert-message`).innerText(); } async closeInvite() { // two btn-icon-only in invite modal: close & copy url await this.inviteTeamModal .locator(`button.ant-btn-icon-only:visible`) .first() .click(); } async inviteMore() { await this.inviteTeamModal .locator(`button:has-text("Invite More")`) .click(); } async toggleSharedBase({ toggle }: { toggle: boolean }) { const toggleBtn = await this.getSharedBaseSubModal().locator( `.nc-disable-shared-base` ); const toggleBtnText = await toggleBtn.first().innerText(); const disabledBase = toggleBtnText.includes("Disable"); if (disabledBase) { if (toggle) { // if share base was disabled && request was to enable await toggleBtn.click(); const modal = await this.rootPage.locator( `.nc-dropdown-shared-base-toggle` ); await modal.locator(`.ant-dropdown-menu-title-content`).click(); } } else { if (!toggle) { // if share base was enabled && request was to disable await toggleBtn.click(); const modal = await this.rootPage.locator( `.nc-dropdown-shared-base-toggle` ); await modal.locator(`.ant-dropdown-menu-title-content`).click(); } } } async getSharedBaseUrl() { const url = await this.getSharedBaseSubModal() .locator(`.nc-url:visible`) .innerText(); return url; } async sharedBaseActions({ action }: { action: string }) { let actionMenu = ["reload", "copy url", "open tab", "copy embed code"]; let index = actionMenu.indexOf(action); await this.getSharedBaseSubModal() .locator(`button.ant-btn-icon-only`) .nth(index) .click(); } async sharedBaseRole({ role }: { role: string }) { // editor | viewer // await this.getSharedBaseSubModal() // .locator(`.nc-shared-base-role`) // .waitFor(); await this.getSharedBaseSubModal() .locator(`.nc-shared-base-role:visible`) .click(); const userRoleModal = await this.rootPage.locator( `.nc-dropdown-share-base-role:visible` ); await userRoleModal .locator(`.ant-select-item-option-content:has-text("${role}"):visible`) .click(); } }