import BasePage from '../../../Base'; import { SidebarPage } from '..'; import { expect } from '@playwright/test'; export class SidebarProjectNodeObject extends BasePage { readonly sidebar: SidebarPage; constructor(parent: SidebarPage) { super(parent.rootPage); this.sidebar = parent; } get({ baseTitle }: { baseTitle: string }) { return this.sidebar.get().getByTestId(`nc-sidebar-base-title-${baseTitle}`); } async click({ baseTitle }: { baseTitle: string }) { await this.get({ baseTitle, }).click(); } async clickOptions({ baseTitle }: { baseTitle: string }) { await this.get({ baseTitle, }).hover(); await this.get({ baseTitle, }) .getByTestId(`nc-sidebar-context-menu`) .click(); } async verifyTableAddBtn({ baseTitle, visible }: { baseTitle: string; visible: boolean }) { await this.sidebar.dashboard.leftSidebar.verifyBaseListOpen(true); await this.get({ baseTitle, }).waitFor({ state: 'visible' }); await this.get({ baseTitle, }).scrollIntoViewIfNeeded(); await this.get({ baseTitle, }).hover(); const addBtn = this.get({ baseTitle, }).getByTestId('nc-sidebar-add-base-entity'); if (visible) { await expect(addBtn).toBeVisible(); } else await expect(addBtn).toHaveCount(0); } async verifyProjectOptions({ baseTitle, renameVisible, starredVisible, duplicateVisible, relationsVisible, restApisVisible, importVisible, settingsVisible, deleteVisible, copyProjectInfoVisible, clickBaseTitle = true, }: { baseTitle: string; renameVisible?: boolean; starredVisible?: boolean; duplicateVisible?: boolean; relationsVisible?: boolean; restApisVisible?: boolean; importVisible?: boolean; settingsVisible?: boolean; deleteVisible?: boolean; copyProjectInfoVisible?: boolean; clickBaseTitle?: boolean; }) { await this.get({ baseTitle, }).waitFor({ state: 'visible' }); await this.get({ baseTitle, }).scrollIntoViewIfNeeded(); await this.get({ baseTitle, }).hover(); const renameLocator = await this.rootPage .getByTestId(`nc-sidebar-base-${baseTitle}-options`) .getByTestId('nc-sidebar-base-rename'); if (renameVisible) await renameLocator.isVisible(); else await expect(renameLocator).toHaveCount(0); const starredLocator = await this.rootPage .getByTestId(`nc-sidebar-base-${baseTitle}-options`) .getByTestId('nc-sidebar-base-starred'); if (starredVisible) await expect(starredLocator).toBeVisible(); else await expect(starredLocator).toHaveCount(0); const duplicateLocator = await this.rootPage .getByTestId(`nc-sidebar-base-${baseTitle}-options`) .getByTestId('nc-sidebar-base-duplicate'); if (duplicateVisible) await expect(duplicateLocator).toBeVisible(); else await expect(duplicateLocator).toHaveCount(0); const relationsLocator = await this.rootPage .getByTestId(`nc-sidebar-base-${baseTitle}-options`) .getByTestId('nc-sidebar-base-relations'); if (relationsVisible) await expect(relationsLocator).toBeVisible(); else await expect(relationsLocator).toHaveCount(0); const restApisLocator = await this.rootPage .getByTestId(`nc-sidebar-base-${baseTitle}-options`) .getByTestId('nc-sidebar-base-rest-apis'); if (restApisVisible) await expect(restApisLocator).toBeVisible(); else await expect(restApisLocator).toHaveCount(0); const importLocator = await this.rootPage .getByTestId(`nc-sidebar-base-${baseTitle}-options`) .getByTestId('nc-sidebar-base-import'); if (importVisible) await expect(importLocator).toBeVisible(); else await expect(importLocator).toHaveCount(0); const settingsLocator = await this.rootPage .getByTestId(`nc-sidebar-base-${baseTitle}-options`) .getByTestId('nc-sidebar-base-settings'); if (settingsVisible) await expect(settingsLocator).toBeVisible(); else await expect(settingsLocator).toHaveCount(0); const deleteLocator = await this.rootPage .getByTestId(`nc-sidebar-base-${baseTitle}-options`) .getByTestId('nc-sidebar-base-delete'); if (deleteVisible) await expect(deleteLocator).toBeVisible(); else await expect(deleteLocator).toHaveCount(0); const copyProjectInfoLocator = await this.rootPage .getByTestId(`nc-sidebar-base-${baseTitle}-options`) .getByTestId('nc-sidebar-base-copy-base-info'); if (copyProjectInfoVisible) await expect(copyProjectInfoLocator).toBeVisible(); else await expect(copyProjectInfoLocator).toHaveCount(0); if (clickBaseTitle) { await this.get({ baseTitle, }).click(); } else { await this.clickOptions({ baseTitle }); } } async verifyActiveProject({ baseTitle, open = false }: { baseTitle: string; open?: boolean }) { if (!(await this.sidebar.dashboard.leftSidebar.isMiniSidebarVisible())) return true; const isBaseListSidebar = await this.sidebar.dashboard.leftSidebar.verifyBaseListOpen(false); // If base home page sidebar is open then verify base title is same as baseTitle if (!isBaseListSidebar) { const baseLocator = await this.get({ baseTitle }).getAttribute('class'); // If active project is same as baseTitle then return true if (baseLocator?.includes('nc-project-header')) return true; if (!open) return false; // If it is not same base home page sidebar then go to base list and open await this.sidebar.dashboard.leftSidebar.verifyBaseListOpen(true); } if (!open) return false; await this.get({ baseTitle, }).waitFor({ state: 'visible' }); await this.get({ baseTitle, }).scrollIntoViewIfNeeded(); await this.get({ baseTitle, }).click(); await this.sidebar.dashboard.leftSidebar.active_base.waitFor({ state: 'visible' }); return true; } }