@digital-ai/devops-page-object-deploy 0.0.9 → 0.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/main.js +277 -0
- package/dist/main.js.map +1 -1
- package/dist/module.js +277 -0
- package/dist/module.js.map +1 -1
- package/dist/types.d.ts +36 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"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","sources":["apps/deploy/index.ts","apps/deploy/fixtures/index.ts","apps/deploy/pages/index.ts","apps/deploy/pages/explorerPage.ts","apps/deploy/pages/withPage.ts","apps/deploy/pages/homePage.ts","apps/deploy/pages/usersPage.ts","apps/deploy/pages/infrastructure/overthereLocalHostPage.ts","apps/deploy/pages/environments/environmentsPage.ts","apps/deploy/pages/applications/applicationsPage.ts","apps/deploy/pages/reports/reportsPage.ts","apps/deploy/pages/reports/reportsControlTasksPage.ts","apps/deploy/pages/reports/reportsDashboardPage.ts","apps/deploy/pages/reports/reportsDeploymentsPage.ts","apps/deploy/pages/infrastructure/infrastructureEditPermissionsPage.ts","apps/deploy/pages/environments/environmentEditPermissionsPage.ts","apps/deploy/pages/applications/applicationEditPermissionsPage.ts","apps/deploy/pages/loginPage.ts"],"sourcesContent":["export { test } from './fixtures';\n","import { test as base, Page } from '@playwright/test';\nimport { Navigation } from '../pages';\nimport { LoginPage } from '../pages/loginPage';\n\ntype DeployFixtures = {\n fixtures: Fixtures;\n loginPage: LoginPage;\n navigation: Navigation;\n};\n\nexport const test = base.extend<DeployFixtures>({\n fixtures: async ({ page }, use) => {\n const fixtures = new Fixtures(page);\n await use(fixtures);\n return fixtures;\n },\n loginPage: async ({ page }, use) => {\n const loginPage = new LoginPage(page);\n await use(loginPage);\n return loginPage;\n },\n navigation: async ({ page }, use) => {\n const navigationPage = new Navigation(page);\n await use(navigationPage);\n return navigationPage;\n },\n});\n\nclass Fixtures {\n private readonly page: Page;\n\n constructor(page: Page) {\n this.page = page;\n }\n}\n","import { Page } from '@playwright/test';\nimport { ExplorerPage } from './explorerPage';\nimport { HomePage } from './homePage';\nimport { UserPage } from './usersPage';\nimport { OverthereLocalHostPage } from './infrastructure/overthereLocalHostPage';\nimport { EnvironmentsPage } from './environments/environmentsPage';\nimport { ApplicationsPage } from './applications/applicationsPage';\nimport { ReportsPage } from './reports/reportsPage';\nimport { ReportsControlTasksPage } from './reports/reportsControlTasksPage';\nimport { ReportsDashboardPage } from './reports/reportsDashboardPage';\nimport { ReportsDeploymentsPage } from './reports/reportsDeploymentsPage';\nimport { InfrastructureEditPermissionsPage } from './infrastructure/infrastructureEditPermissionsPage';\nimport { EnvironmentEditPermissionsPage } from './environments/environmentEditPermissionsPage';\nimport { ApplicationEditPermissionsPage } from './applications/applicationEditPermissionsPage';\n\nexport class Navigation extends ExplorerPage {\n homePage: HomePage;\n userPage: UserPage;\n overthereLocalHostPage: OverthereLocalHostPage;\n environmentsPage: EnvironmentsPage;\n applicationsPage: ApplicationsPage;\n reportsPage: ReportsPage;\n reportsControlTasksPage: ReportsControlTasksPage;\n reportsDashboardPage: ReportsDashboardPage;\n reportsDeploymentsPage: ReportsDeploymentsPage;\n infrastructureEditPermissionsPage: InfrastructureEditPermissionsPage;\n environmentEditPermissionsPage: EnvironmentEditPermissionsPage;\n applicationEditPermissionsPage: ApplicationEditPermissionsPage;\n\n constructor(page: Page) {\n super(page);\n this.homePage = new HomePage(page);\n this.userPage = new UserPage(page);\n this.overthereLocalHostPage = new OverthereLocalHostPage(page);\n this.environmentsPage = new EnvironmentsPage(page);\n this.applicationsPage = new ApplicationsPage(page);\n this.reportsPage = new ReportsPage(page);\n this.reportsControlTasksPage = new ReportsControlTasksPage(page);\n this.reportsDashboardPage = new ReportsDashboardPage(page);\n this.reportsDeploymentsPage = new ReportsDeploymentsPage(page);\n this.infrastructureEditPermissionsPage = new InfrastructureEditPermissionsPage(page);\n this.environmentEditPermissionsPage = new EnvironmentEditPermissionsPage(page);\n this.applicationEditPermissionsPage = new ApplicationEditPermissionsPage(page);\n }\n\n async navigateToHomePage(): Promise<void> {\n await this.page.goto('/home');\n }\n\n async navigateToUserPage(): Promise<void> {\n await this.page.locator('p.MuiTypography-root', { hasText: 'User management' }).click();\n }\n\n async clickCollapseSideView(): Promise<void> {\n const collapseButton = this.page.getByTestId('back-button');\n await collapseButton.click();\n }\n}\n","import { expect } from '@playwright/test';\nimport { WithPage } from './withPage';\n\nexport class ExplorerPage extends WithPage {\n protected async handleSaveToastOrAlreadyExists(): Promise<void> {\n const toastMessage = this.page.locator('.redux-toastr .rrt-text:visible');\n try {\n await toastMessage.waitFor({ state: 'visible', timeout: 10000 });\n } catch {\n // No toast appeared — assume the operation succeeded silently (e.g. fast CI environments).\n return;\n }\n const toastText = (await toastMessage.textContent())?.trim() ?? '';\n if (toastText === 'Your change was saved.') {\n return;\n }\n if (/already exists/i.test(toastText)) {\n const cancelButton = this.page.getByRole('button', { name: 'Cancel' });\n if (await cancelButton.isVisible()) {\n await cancelButton.click();\n } else {\n await this.page.locator('i.xl-icon.close-icon').first().click();\n }\n return;\n }\n await expect(toastMessage).toHaveText('Your change was saved.');\n }\n\n protected async openRootContextMenu(rootId: string): Promise<void> {\n await this.closeModalIfPresent();\n await this.ensureExplorerTreeReady();\n\n const rootTitle = this.page.locator(`span[data-id=\"${rootId}\"]`);\n await rootTitle.scrollIntoViewIfNeeded();\n await rootTitle.click();\n\n const menuButton = this.page.locator(`i.context-menu-button[data-id=\"${rootId}\"]`);\n await menuButton.scrollIntoViewIfNeeded();\n\n for (let attempt = 0; attempt < 3; attempt += 1) {\n try {\n await menuButton.click({ force: true });\n return;\n } catch {\n if (attempt === 2) {\n throw new Error(`Failed to open context menu for ${rootId}`);\n }\n await this.page.waitForTimeout(300);\n }\n }\n }\n\n protected async ensureExplorerTreeReady(): Promise<void> {\n const applicationsRoot = this.page.locator('div[data-id=\"Applications\"]');\n try {\n await applicationsRoot.waitFor({ state: 'visible', timeout: 3000 });\n return;\n } catch {\n // Fall through to open Explorer.\n }\n\n const explorerCandidates = [\n this.page.locator('p.MuiTypography-root', { hasText: 'Explorer' }),\n this.page.getByRole('link', { name: 'Explorer' }),\n this.page.getByRole('button', { name: 'Explorer' }),\n ];\n\n for (const candidate of explorerCandidates) {\n try {\n if ((await candidate.count()) > 0) {\n await candidate.first().click({ timeout: 10000 });\n break;\n }\n } catch {\n // Try next candidate.\n }\n }\n\n await applicationsRoot.waitFor({ state: 'visible', timeout: 10000 });\n }\n\n protected async closeModalIfPresent(): Promise<void> {\n const modal = this.page.locator('div.xl-react-widget-modal-dialog.in');\n if ((await modal.count()) === 0) {\n return;\n }\n\n if (!(await modal.first().isVisible())) {\n return;\n }\n\n const cancelButton = modal.getByRole('button', { name: 'Cancel' }).first();\n if (await cancelButton.isVisible()) {\n await cancelButton.click();\n } else {\n const closeIcon = modal.locator('i.xl-icon.close-icon').first();\n if (await closeIcon.isVisible()) {\n await closeIcon.click();\n }\n }\n\n try {\n await this.page.locator('body.xl-react-modal-open').waitFor({ state: 'hidden', timeout: 10000 });\n } catch {\n // Modal may already be closing.\n }\n }\n}\n","import { Page } from '@playwright/test';\n\nexport class WithPage {\n protected readonly page: Page;\n\n constructor(page: Page) {\n this.page = page;\n }\n}\n","import { expect } from '@playwright/test';\nimport { WithPage } from './withPage';\n\nexport class HomePage extends WithPage {\n async clickUserManagement(): Promise<void> {\n await this.page.locator('p.MuiTypography-root', { hasText: 'User management' }).click();\n await this.page.getByRole('link', { name: 'Users' }).click();\n }\n\n async clickExplorer(): Promise<void> {\n await this.page.locator('p.MuiTypography-root', { hasText: 'Explorer' }).click();\n }\n\n async verifyDeployLogoIsPresent(): Promise<void> {\n const logo = this.page.getByAltText('Deploy');\n await expect(logo).toBeVisible();\n }\n\n async verifyDeployTextIsPresent(): Promise<void> {\n const title = this.page.getByTitle('digital.ai');\n await expect(title).toBeVisible();\n }\n\n async clickReports(): Promise<void> {\n await this.page.locator('p.MuiTypography-root', { hasText: 'Reports' }).click();\n }\n\n async verifyReportsOnlyAccess(): Promise<void> {\n const sidebar = this.page.locator('.dot-sidebar');\n await expect(sidebar.getByText('Reports', { exact: true })).toBeVisible();\n await expect(sidebar.getByText('Explorer', { exact: true })).toBeVisible();\n await expect(sidebar.getByText('Rules and Macros', { exact: true })).toHaveCount(0);\n await expect(sidebar.getByText('Gitops', { exact: true })).toHaveCount(0);\n await expect(sidebar.getByText('Local sources', { exact: true })).toHaveCount(0);\n await expect(sidebar.getByText('Plugins', { exact: true })).toHaveCount(0);\n await expect(sidebar.getByText('User management', { exact: true })).toHaveCount(0);\n }\n\n async verifyNoCiDataVisible(): Promise<void> {\n await expect(this.page.getByText('LocalHost', { exact: true })).toHaveCount(0);\n await expect(this.page.getByText('LocalEnv', { exact: true })).toHaveCount(0);\n await expect(this.page.getByText('App', { exact: true })).toHaveCount(0);\n }\n}\n","import { expect } from '@playwright/test';\nimport { WithPage } from './withPage';\n\nexport class UserPage extends WithPage {\n private async openUsersTab(): Promise<void> {\n await this.page.locator('p.MuiTypography-root', { hasText: 'Users' }).click();\n }\n\n private async waitForToastIfPresent(timeoutVisible = 3000, timeoutHidden = 5000): Promise<void> {\n const toast = this.page.getByRole('alertdialog');\n try {\n await toast.waitFor({ state: 'visible', timeout: timeoutVisible });\n await toast.waitFor({ state: 'hidden', timeout: timeoutHidden });\n } catch {\n // Toast is transient; skip if it doesn't appear.\n }\n }\n\n private async waitForModalCloseIfPresent(): Promise<void> {\n try {\n await this.page.locator('input[name=\"username\"]').waitFor({ state: 'hidden', timeout: 5000 });\n await this.page.locator('body.xl-react-modal-open').waitFor({ state: 'hidden', timeout: 5000 });\n await this.page.waitForLoadState('networkidle');\n } catch {\n // When user already exists, modal stays open; caller handles error toast.\n }\n }\n\n private async openGlobalPermissions(): Promise<void> {\n await this.page.getByRole('link', { name: 'Global permissions' }).click();\n }\n\n private async filterRoleInPermissions(roleName: string): Promise<import('@playwright/test').Locator> {\n const filter = this.page.locator('input[placeholder=\"Filter by roles\"]:visible');\n await filter.waitFor({ state: 'visible' });\n await expect(filter).toBeEditable();\n await filter.fill('');\n await filter.fill(roleName);\n await expect(filter).toHaveValue(roleName);\n await filter.press('Enter');\n await this.page.getByRole('button', { name: 'Refresh' }).click();\n await this.page.waitForLoadState('networkidle');\n await this.page.locator('table tbody tr:visible').first().waitFor({ state: 'visible' });\n const escapedRoleName = roleName.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const roleCell = this.page\n .locator('td.permissions-pagination-table-component-role:visible')\n .filter({ hasText: new RegExp(`^\\\\s*${escapedRoleName}\\\\s*$`) })\n .first();\n await expect(roleCell).toBeVisible();\n return roleCell.locator('xpath=ancestor::tr');\n }\n\n /* Create a new user */\n async createNewUser(username: string, email: string, password: string): Promise<void> {\n await this.openUsersTab();\n await this.page.getByRole('button', { name: 'Add user' }).click();\n const usernameInput = this.page.locator('input[name=\"username\"]');\n await usernameInput.waitFor({ state: 'visible' });\n await usernameInput.fill(username);\n await this.page.locator('input[name=\"fullName\"]').fill(username);\n await this.page.locator('input[name=\"email\"]').fill(email);\n const passwordInput = this.page.locator('input[name=\"password\"]');\n const confirmInput = this.page.locator('input[name=\"confirmPassword\"]');\n await passwordInput.waitFor({ state: 'visible' });\n await passwordInput.click({ force: true });\n await passwordInput.fill(password);\n await confirmInput.fill(password);\n const saveButton = this.page.getByRole('button', { name: 'Save' });\n try {\n await expect(saveButton).toBeEnabled({ timeout: 5000 });\n } catch {\n await passwordInput.fill('');\n await confirmInput.fill('');\n await passwordInput.type(password, { delay: 50 });\n await confirmInput.type(password, { delay: 50 });\n await expect(saveButton).toBeEnabled({ timeout: 5000 });\n }\n await saveButton.click();\n await this.waitForToastIfPresent();\n await this.waitForModalCloseIfPresent();\n }\n\n /* Verify success message */\n async verifySuccessMessage(): Promise<void> {\n const successMessage = this.page.getByRole('alertdialog');\n try {\n await successMessage.waitFor({ state: 'visible', timeout: 3000 });\n } catch {\n // Toast never appeared — skip silently.\n return;\n }\n await expect(successMessage).toHaveText(/User \".*\" created/i);\n }\n\n /* Verify user error message */\n async verifyUserErrorMessage(): Promise<void> {\n const errorToast = this.page.locator('.rrt-middle-container[role=\"alertdialog\"]').nth(1);\n try {\n await errorToast.waitFor({ state: 'visible', timeout: 3000 });\n } catch {\n // Toast is transient; skip if it never appears.\n return;\n }\n await expect(errorToast).toContainText(/already in use/i);\n }\n\n /* Delete the user and verify it is deleted */\n async deleteTheUserAndVerifyItIsDeleted(username: string): Promise<void> {\n await this.openUsersTab();\n const filter = this.page.getByPlaceholder('Filter...');\n await filter.fill(username);\n await filter.press('Enter');\n const escapedUsername = username.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const userRow = this.page.getByRole('row', { name: new RegExp(`\\\\b${escapedUsername}\\\\b`) }).first();\n await userRow.waitFor({ state: 'visible' });\n await userRow.locator('button.delete.xl-icon.table-action').click();\n const confirmDialog = this.page\n .locator('.xl-react-widget-modal-dialog.in:visible')\n .filter({ hasText: /Delete user/i })\n .first();\n await confirmDialog.waitFor({ state: 'visible' });\n await confirmDialog.getByRole('button', { name: 'Delete', exact: true }).click();\n await confirmDialog.waitFor({ state: 'hidden' });\n const deleteToast = this.page.getByRole('alertdialog').filter({ hasText: /deleted/i });\n await expect(deleteToast).toHaveText(/User \".*\" deleted/i);\n await deleteToast.waitFor({ state: 'hidden' });\n await userRow.waitFor({ state: 'detached' });\n }\n\n /* Edit the user and verify the changes */\n async editUserAndVerify(username: string, editfullname: string): Promise<void> {\n await this.openUsersTab();\n const filter = this.page.getByPlaceholder('Filter...');\n await filter.fill(username);\n await filter.press('Enter');\n const escapedUsername = username.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const userRow = this.page.getByRole('row', { name: new RegExp(`\\\\b${escapedUsername}\\\\b`) }).first();\n await userRow.waitFor({ state: 'visible' });\n await userRow.locator('i.icon-edit.dot-i').click();\n await this.page.locator('input[name=\"fullName\"]').fill(editfullname);\n const passwordInput = this.page.locator('input[name=\"password\"]');\n const confirmInput = this.page.locator('input[name=\"confirmPassword\"]');\n if (await passwordInput.count()) {\n await passwordInput.click({ force: true });\n await passwordInput.press(process.platform === 'darwin' ? 'Meta+A' : 'Control+A');\n await passwordInput.press('Backspace');\n }\n if (await confirmInput.count()) {\n await confirmInput.click({ force: true });\n await confirmInput.press(process.platform === 'darwin' ? 'Meta+A' : 'Control+A');\n await confirmInput.press('Backspace');\n }\n const saveButton = this.page.getByRole('button', { name: 'Save', exact: true });\n await expect(saveButton).toBeEnabled({ timeout: 5000 });\n await saveButton.click();\n const editToast = this.page.getByRole('alertdialog').filter({ hasText: 'Your change was saved' });\n await expect(editToast).toBeVisible();\n }\n\n /* Disable the user by toggling the login permission checkbox */\n async disableUser(username: string): Promise<void> {\n await this.openUsersTab();\n const filter = this.page.getByPlaceholder('Filter...');\n await filter.fill(username);\n await filter.press('Enter');\n const escapedUsername = username.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const userRow = this.page.getByRole('row', { name: new RegExp(`\\\\b${escapedUsername}\\\\b`) }).first();\n await userRow.waitFor({ state: 'visible' });\n const checkbox = userRow.getByRole('checkbox');\n await checkbox.click();\n await expect(checkbox).not.toBeChecked();\n }\n\n /* Revoke login permission for a role via Global permissions */\n async revokeLoginPermission(roleName: string): Promise<void> {\n await this.openGlobalPermissions();\n const roleRow = await this.filterRoleInPermissions(roleName);\n const normalizedRoleName = roleName.replace(/\\s+/g, '_');\n const loginCheckbox = roleRow.locator(\n `td.permissions-pagination-table-component-${normalizedRoleName}-4 input[type=\"checkbox\"]`,\n );\n const saveButton = this.page.getByRole('button', { name: 'Save' });\n if ((await loginCheckbox.isVisible()) && (await loginCheckbox.isChecked())) {\n await loginCheckbox.uncheck();\n await saveButton.click();\n const saveMessage = this.page.getByRole('alertdialog');\n await expect(saveMessage).toContainText('Your change was saved');\n return;\n }\n if (await saveButton.isVisible()) {\n await expect(saveButton).toBeDisabled();\n }\n }\n\n /* Grant only login and report view permissions for a role */\n async grantOnlyLoginAndReportPermissions(roleName: string): Promise<void> {\n await this.openGlobalPermissions();\n const roleRow = await this.filterRoleInPermissions(roleName);\n const checkboxes = roleRow.locator('input[type=\"checkbox\"]');\n const count = await checkboxes.count();\n for (let i = 0; i < count; i += 1) {\n const checkbox = checkboxes.nth(i);\n if (await checkbox.isChecked()) {\n await checkbox.uncheck();\n }\n }\n await roleRow.locator(`td.permissions-pagination-table-component-${roleName}-4 input[type=\"checkbox\"]`).check();\n await roleRow.locator(`td.permissions-pagination-table-component-${roleName}-5 input[type=\"checkbox\"]`).check();\n await this.page.getByRole('button', { name: 'Save' }).click();\n const saveMessage = this.page.getByRole('alertdialog');\n await expect(saveMessage).toContainText('Your change was saved');\n }\n\n /* Create a role and assign a principal to it */\n async createRoleAndAssignUser(roleName: string, principal: string): Promise<void> {\n await this.page.getByRole('link', { name: 'Roles' }).click();\n await this.page.getByPlaceholder('Filter by roles').first().waitFor({ state: 'visible' });\n await this.page.locator('body.xl-react-modal-open').waitFor({ state: 'hidden' });\n await this.page.getByRole('button', { name: 'Add role' }).click();\n const roleDialog = this.page.locator('.add-edit-role-component');\n await roleDialog.waitFor({ state: 'visible' });\n await roleDialog.locator('input[name=\"name\"]').fill(roleName);\n const principalsInput = roleDialog.locator('input.react-tagsinput-input');\n await principalsInput.fill(principal);\n await principalsInput.press('Enter');\n await roleDialog.getByRole('button', { name: 'Save' }).click();\n const saveMessage = this.page.getByRole('alertdialog');\n await expect(saveMessage).toHaveText(/Role \".*\" created/);\n await saveMessage.waitFor({ state: 'hidden' });\n await roleDialog.waitFor({ state: 'hidden' });\n }\n\n /* Delete a role by name */\n async deleteRole(roleName: string): Promise<void> {\n await this.page.getByRole('link', { name: 'Roles' }).click();\n const filter = this.page.getByPlaceholder('Filter by roles').first();\n await filter.fill(roleName);\n await filter.press('Enter');\n const escapedRoleName = roleName.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const roleRow = this.page\n .locator('td.roles-table-name')\n .filter({ hasText: new RegExp(`^\\\\s*${escapedRoleName}\\\\s*$`) })\n .first()\n .locator('xpath=ancestor::tr');\n await roleRow.waitFor({ state: 'visible' });\n await roleRow.locator('button.delete.table-action').click();\n const confirmDelete = this.page.getByRole('button', { name: 'Delete', exact: true });\n if (await confirmDelete.isVisible()) {\n await confirmDelete.click();\n }\n }\n}\n","import { ExplorerPage } from '../explorerPage';\n\nexport class OverthereLocalHostPage extends ExplorerPage {\n /* Helps to navigate to the Overthere LocalHost page */\n async navigateToOverthereLocalHostPage(): Promise<void> {\n await this.openRootContextMenu('Infrastructure');\n await this.page.getByRole('link', { name: 'New' }).click();\n await this.page.getByRole('link', { name: 'overthere' }).click();\n await this.page.getByRole('link', { name: 'LocalHost' }).click();\n }\n\n /* Opens the New > overthere > LocalHost form from the Infrastructure tree context menu */\n async openNewLocalHost(): Promise<void> {\n await this.closeModalIfPresent();\n await this.ensureExplorerTreeReady();\n\n const infrastructureRoot = this.page.locator('span[data-id=\"Infrastructure\"]');\n await infrastructureRoot.scrollIntoViewIfNeeded();\n await infrastructureRoot.click();\n\n const contextMenu = this.page.locator('i.context-menu-button[data-id=\"Infrastructure\"]');\n await contextMenu.scrollIntoViewIfNeeded();\n await contextMenu.click({ force: true });\n\n await this.page.getByRole('link', { name: 'New' }).click();\n await this.page.getByRole('link', { name: 'overthere' }).click();\n await this.page.getByRole('link', { name: 'LocalHost' }).click();\n }\n\n async openInfrastructureNewLocalHost(): Promise<void> {\n await this.openNewLocalHost();\n }\n\n /* Helps to create a LocalHost of type UNIX/Windows/Zos */\n async createHostForGivenType(name: string, type: string): Promise<void> {\n await this.page.locator('input[name=\"name\"]').fill(name);\n await this.page.locator('label:has-text(\"Operating system\")').locator('xpath=following::input[1]').click();\n await this.page.getByText(type, { exact: true }).click();\n await this.page.getByRole('button', { name: 'Save and close' }).click();\n await this.handleSaveToastOrAlreadyExists();\n }\n\n /**\n * Runs the \"Check connection\" control task on the given host node once.\n * Expects the deployment plan page, executes it, waits for EXECUTED state, then finishes.\n * @param hostDataId The full tree data-id, e.g. \"Infrastructure/MyHost\"\n */\n async runCheckConnection(hostDataId: string): Promise<void> {\n // Ensure the tree node is visible by expanding Infrastructure if needed\n const infraToggle = this.page.locator('div[data-id=\"Infrastructure\"] .infinite-tree-node > a');\n const hostNode = this.page.locator(`span[data-id=\"${hostDataId}\"]`);\n\n for (let attempt = 0; attempt < 3; attempt += 1) {\n if ((await hostNode.count()) > 0 && (await hostNode.isVisible())) {\n break;\n }\n await infraToggle.click();\n await this.page.waitForTimeout(500);\n }\n\n // Hover host node to reveal context menu button\n //await hostNode.scrollIntoViewIfNeeded();\n await hostNode.hover();\n\n const ctxBtn = this.page.locator(`i.context-menu-button[data-id=\"${hostDataId}\"]`);\n await ctxBtn.waitFor({ state: 'visible', timeout: 5000 });\n await ctxBtn.click({ force: true });\n\n // Click \"Check connection\" in the context menu\n await this.page.getByRole('link', { name: 'Check connection' }).click();\n\n // Wait for the deployment plan panel and execute\n await this.page\n .locator('.xl-react-widget-modal-dialog button.deploy.xl-primary, button.xl-primary:has-text(\"Execute\")')\n .first()\n .waitFor({ state: 'visible', timeout: 10000 });\n await this.page\n .locator('.xl-react-widget-modal-dialog button.deploy.xl-primary, button.xl-primary:has-text(\"Execute\")')\n .first()\n .click();\n\n // Wait for EXECUTED status\n const executedLabel = this.page.locator('span.label', { hasText: 'EXECUTED' }).first();\n await executedLabel.waitFor({ state: 'visible', timeout: 30000 });\n\n // Finish\n const finishButton = this.page.locator('button.finish.xl-primary, button:has-text(\"Finish\")').first();\n if (await finishButton.isVisible()) {\n await finishButton.click();\n }\n\n // Wait for modal/plan to close\n const modal = this.page.locator('div.xl-react-widget-modal-dialog.in');\n if ((await modal.count()) > 0) {\n await modal.first().waitFor({ state: 'hidden', timeout: 15000 });\n }\n }\n}\n","import { ExplorerPage } from '../explorerPage';\n\nexport class EnvironmentsPage extends ExplorerPage {\n /* Helps to navigate to the Environments page */\n async navigateToEnvironmentsPage(): Promise<void> {\n await this.ensureExplorerTreeReady();\n }\n\n /* Helps to create a new Environment */\n async createEnvironment(environmentName: string, hostName: string, dictionaryName: string): Promise<void> {\n await this.openRootContextMenu('Environments');\n await this.page.getByRole('link', { name: 'New' }).click();\n await this.page.getByRole('link', { name: 'Environment' }).click();\n await this.page.locator('input[name=\"name\"]').fill(environmentName);\n await this.page.locator('i.xl-icon.arrow-down-icon.show-all').nth(0).click();\n await this.page.getByTitle(`Infrastructure/${hostName}`, { exact: true }).click();\n await this.page.locator('i.xl-icon.arrow-down-icon.show-all').nth(1).click();\n await this.page.getByTitle(`Environments/${dictionaryName}`, { exact: true }).click();\n await this.page.getByRole('button', { name: 'Save and close' }).click();\n await this.handleSaveToastOrAlreadyExists();\n }\n\n /* Creates a new udm.Dictionary under Environments with entry usr=admin */\n async createDictionary(dictionaryName: string): Promise<void> {\n await this.openRootContextMenu('Environments');\n await this.page.getByRole('link', { name: 'New' }).click();\n await this.page.getByRole('link', { name: 'Dictionary', exact: true }).click();\n\n await this.page.locator('input[name=\"name\"]').fill(dictionaryName);\n\n // Type the key in the Entries field and press Enter to create the row\n // (The hint text \"Search or create a new key/value\" is a div, not a real placeholder)\n const entriesInput = this.page.getByRole('textbox').nth(3);\n await entriesInput.fill('usr');\n await entriesInput.press('Enter');\n\n // Fill the value field that appears after the key is created\n await this.page.getByRole('textbox', { name: 'Add value...' }).fill('admin');\n\n await this.page.getByRole('button', { name: 'Save and close' }).click();\n await this.handleSaveToastOrAlreadyExists();\n }\n}\n","import { expect, Page } from '@playwright/test';\nimport { ExplorerPage } from '../explorerPage';\n\nexport class ApplicationsPage extends ExplorerPage {\n taskId!: string;\n executedText!: string;\n\n constructor(page: Page) {\n super(page);\n }\n\n /* Helps to navigate to the Applications page */\n async navigateToApplicationsPage(): Promise<void> {\n await this.openRootContextMenu('Applications');\n await this.page.getByRole('link', { name: 'New' }).click();\n await this.page.getByRole('link', { name: 'Application' }).click();\n }\n\n /* Creates a new application */\n async createNewApplication(applicationName: string): Promise<void> {\n if (await this.nodeExists(`Applications/${applicationName}`)) {\n return;\n }\n await this.openRootContextMenu('Applications');\n await this.page.getByRole('link', { name: 'New' }).click();\n await this.page.getByRole('link', { name: 'Application' }).click();\n await this.page.locator('input[name=\"name\"]').waitFor({ state: 'visible' });\n await this.page.locator('input[name=\"name\"]').click();\n await this.page.locator('input[name=\"name\"]').fill(applicationName);\n await this.page.getByRole('button', { name: 'Save and close' }).click();\n await this.page.locator('input[name=\"name\"]').waitFor({ state: 'hidden', timeout: 5000 });\n await this.handleSaveToastOrAlreadyExists();\n await this.waitForApplicationNode(applicationName);\n }\n\n /* Creates a new deployment package */\n async createNewDeploymentPackage(applicationName: string, packageName: string): Promise<void> {\n const appDataId = `Applications/${applicationName}`;\n const packageDataId = `Applications/${applicationName}/${packageName}`;\n\n if (await this.nodeExists(packageDataId)) {\n return;\n }\n\n // Expand Applications\n await this.ensureExplorerTreeReady();\n await this.waitForApplicationNode(applicationName);\n\n // Hover over app node\n const appNode = this.page.locator(`span[data-id=\"${appDataId}\"]`);\n await expect(appNode).toBeVisible();\n await appNode.scrollIntoViewIfNeeded();\n await appNode.hover();\n\n // Open context menu + create new deployment package\n const contextMenu = this.page.locator(`i.context-menu-button[data-id=\"${appDataId}\"]`);\n await expect(contextMenu).toBeVisible();\n await contextMenu.click();\n\n await this.page.getByRole('link', { name: 'New' }).click();\n await this.page.getByRole('link', { name: 'Deployment Package' }).click();\n\n // Fill & save\n const nameInput = this.page.locator('input[name=\"name\"]');\n await nameInput.fill(packageName);\n\n await this.page.getByRole('button', { name: 'Save and close' }).click();\n await nameInput.waitFor({ state: 'hidden', timeout: 5000 });\n\n await this.handleSaveToastOrAlreadyExists();\n await this.waitForPackageNode(applicationName, packageName);\n }\n\n /* Creates a new command application */\n async createNewCmdApplication(values: string[]): Promise<void> {\n const appDataId = `Applications/${values[0]}`;\n const packageDataId = `Applications/${values[0]}/${values[1]}`;\n const commandDataId = `Applications/${values[0]}/${values[1]}/${values[2]}`;\n\n if (await this.nodeExists(commandDataId)) {\n return;\n }\n\n // Expand app node and click package\n await this.ensureExplorerTreeReady();\n await this.waitForApplicationNode(values[0]);\n await this.waitForPackageNode(values[0], values[1]);\n await this.page.locator(`div[data-id=\"${appDataId}\"] .infinite-tree-node > a`).click();\n await this.clickPackageNodeWithRetry(packageDataId);\n\n // Open context menu\n const packageMenu = this.page.locator(`i.context-menu-button[data-id=\"${packageDataId}\"]`);\n await expect(packageMenu).toBeVisible();\n await packageMenu.click();\n\n // Create Command application\n await this.page.getByRole('link', { name: 'New' }).click();\n await this.page.getByRole('link', { name: 'cmd' }).click();\n await this.page.getByRole('link', { name: 'Command' }).click();\n\n await this.page.locator('input[name=\"name\"]').fill(values[2]);\n\n await this.page.locator('textarea[name=\"commandLine\"]').fill(values[3]);\n\n // Some server configs default username to {{usr}} placeholder. Use evaluate to\n // set value directly on DOM + fire React's change event, bypassing visibility checks.\n await this.page.evaluate(() => {\n const inputs = Array.from(document.querySelectorAll('input[name=\"username\"]')) as HTMLInputElement[];\n const setter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set;\n for (const input of inputs) {\n setter?.call(input, 'admin');\n input.dispatchEvent(new Event('input', { bubbles: true }));\n input.dispatchEvent(new Event('change', { bubbles: true }));\n }\n });\n\n const saveBtn = this.page.locator('button', { hasText: /^Save$/ }).first();\n await expect(saveBtn).toBeEnabled();\n await saveBtn.click();\n await this.page.waitForTimeout(3000);\n\n await this.handleSaveToastOrAlreadyExists();\n\n // Close dialog\n await this.page.locator('i.xl-icon.close-icon').first().click();\n }\n\n /*Deploy the application*/\n async deployApp(values: string[]): Promise<void> {\n const versionNode = `Applications/${values[0]}/${values[1]}`;\n await this.ensureExplorerTreeReady();\n await this.waitForPackageNode(values[0], values[1]);\n await this.openPackageMenuWithRetry(versionNode);\n await this.page.getByRole('link', { name: 'Deploy', exact: true }).click();\n await this.page.locator(`input[name=\"selections\"][value=\"Environments/${values[2]}\"]`).click();\n await this.page.getByRole('button', { name: 'Continue' }).click();\n\n // Wait for the deployment properties wizard to fully load and evaluate validation rules\n await this.page.locator('.errors-wrapper').waitFor({ state: 'attached', timeout: 15000 });\n\n const errorIcon = this.page.locator('a.validation-icons-wrapper.error');\n\n // Actively wait for the error icon to appear — isVisible() alone races against wizard rendering\n let hasError = false;\n try {\n await errorIcon.waitFor({ state: 'visible', timeout: 5000 });\n hasError = true;\n } catch {\n // No validation errors detected\n }\n\n if (hasError) {\n await this.page.getByRole('button', { name: 'Deployment Properties' }).click();\n const usernameInput = this.page.locator('input[name=\"username\"]');\n await usernameInput.waitFor({ state: 'visible' });\n await usernameInput.fill(values[3]);\n await this.page.getByRole('button', { name: 'Save' }).click();\n await errorIcon.waitFor({ state: 'hidden', timeout: 10000 });\n }\n\n await this.page.locator('button.deploy.xl-primary').waitFor({ state: 'visible' });\n await this.page.locator('button.deploy.xl-primary').click();\n\n //Get the task id\n const taskIdLocator = this.page.locator('div.task-id').first();\n await expect(taskIdLocator).toBeVisible({ timeout: 60000 });\n await expect(taskIdLocator).not.toHaveText('', { timeout: 60000 });\n this.taskId = ((await taskIdLocator.textContent()) ?? '').trim();\n\n //Verify no failure and all are done\n const labels = this.page.locator('span.label');\n await expect(labels).toHaveCount(3);\n await expect(labels).toHaveText(['EXECUTED', 'DONE', 'DONE']);\n\n //Get the text executed\n await this.page.locator('div[data-id=\"0_1_1\"] .infinite-tree-node > a').click();\n await this.page.getByTitle('Execute Test Command').click();\n this.executedText = await this.page.locator('div.step-log-body pre').nth(1).innerText();\n\n //Verify in monitoring tab searching with the task id\n await this.page.locator('div[data-id=\"TASK_MONITOR\"] .infinite-tree-node > a').click();\n await this.page.locator('span[data-id=\"DEPLOYMENT_TASKS\"]').dblclick();\n await this.page.waitForTimeout(5000);\n\n await this.page.locator('div.deployment-task-filter-task-id input[placeholder=\"Search\"]').first().fill(this.taskId);\n const stateText = await this.page.locator('td.tasks-table-state').first().innerText();\n expect(stateText.trim()).toBe('Executed');\n\n //Click the row to go to deployment screen\n await this.page.locator('table.table.table-striped tbody tr').first().dblclick();\n\n await this.page.locator('button.finish.xl-primary').click();\n }\n\n /* Deploys or redeploys the application in bulk — exact copy of deployApp flow with forceRedeploy */\n async deployAppBulk(values: string[]): Promise<void> {\n const versionNode = `Applications/${values[0]}/${values[1]}`;\n await this.ensureExplorerTreeReady();\n await this.waitForPackageNode(values[0], values[1]);\n await this.openPackageMenuWithRetry(versionNode);\n await this.page.getByRole('link', { name: 'Deploy', exact: true }).click();\n await this.page.locator(`input[name=\"selections\"][value=\"Environments/${values[2]}\"]`).click();\n await this.page.getByRole('button', { name: 'Continue' }).click();\n\n // Wait for the deployment properties wizard to fully load and evaluate validation rules\n await this.page.locator('.errors-wrapper').waitFor({ state: 'attached', timeout: 15000 });\n\n const errorIcon = this.page.locator('a.validation-icons-wrapper.error');\n\n let hasError = false;\n try {\n await errorIcon.waitFor({ state: 'visible', timeout: 5000 });\n hasError = true;\n } catch {\n // No validation errors detected\n }\n\n // Always open Deployment Properties to set forceRedeploy=true\n await this.page.getByRole('button', { name: 'Deployment Properties' }).click();\n const usernameInput = this.page.locator('input[name=\"username\"]');\n if (hasError) {\n await usernameInput.waitFor({ state: 'visible' });\n await usernameInput.fill(values[3]);\n }\n const forceRedeployInput = this.page.locator('input[name=\"forceRedeploy\"]');\n await forceRedeployInput.waitFor({ state: 'visible', timeout: 10000 });\n if (!(await forceRedeployInput.isChecked())) {\n await forceRedeployInput.check();\n }\n await this.page.getByRole('button', { name: 'Save' }).click();\n if (hasError) {\n await errorIcon.waitFor({ state: 'hidden', timeout: 10000 });\n }\n\n await this.page.locator('button.deploy.xl-primary').waitFor({ state: 'visible' });\n await this.page.locator('button.deploy.xl-primary').click();\n\n const labels = this.page.locator('span.label');\n await expect(labels).toHaveCount(3, { timeout: 120000 });\n await expect(labels).toHaveText(['EXECUTED', 'DONE', 'DONE'], { timeout: 120000 });\n\n const finishButton = this.page.locator('button.finish.xl-primary');\n if (await finishButton.isVisible()) {\n await finishButton.click();\n }\n await this.page.locator('div.xl-react-widget-modal-dialog.in').waitFor({ state: 'hidden', timeout: 30000 });\n }\n\n /* Redeploy the same package repeatedly — delegates to deployAppBulk (forceRedeploy already set). \n async redeployAppBulk(values: string[]): Promise<void> {\n await this.deployAppBulk(values);\n }*/\n\n async verifyApplicationIsVisibleToTheUser(applicationName: string): Promise<void> {\n //await this.navigation.homePage.clickExplorer();\n await this.assertTreeNodeVisibility('Applications', applicationName, { shouldBeVisible: true });\n }\n\n async verifyCiNodesVisibility(\n nodes: { applicationName: string; environmentName: string; infrastructureName: string },\n shouldBeVisible: boolean,\n page: Page = this.page,\n ): Promise<void> {\n const { applicationName, environmentName, infrastructureName } = nodes;\n await page.locator('button.dot-avatar').waitFor({ state: 'visible', timeout: 30000 });\n const currentUrl = page.url();\n if (!/#\\/explorer/.test(currentUrl)) {\n await page.goto('/#/explorer');\n }\n await page.waitForURL(/#\\/explorer/);\n await page.locator('div[data-id=\"Applications\"]').waitFor({ state: 'visible', timeout: 15000 });\n await this.assertTreeNodeVisibility('Applications', applicationName, { shouldBeVisible, page });\n await this.assertTreeNodeVisibility('Environments', environmentName, { shouldBeVisible, page });\n await this.assertTreeNodeVisibility('Infrastructure', infrastructureName, { shouldBeVisible, page });\n }\n\n private async assertTreeNodeVisibility(\n rootName: string,\n childName: string,\n { page = this.page, shouldBeVisible }: { page?: Page; shouldBeVisible: boolean },\n ): Promise<void> {\n const rootToggle = page.locator(`div[data-id=\"${rootName}\"] .infinite-tree-node > a`);\n await expect(rootToggle).toBeVisible();\n await rootToggle.click();\n await page.locator(`div[data-id=\"${rootName}\"]`).waitFor({ state: 'visible' });\n await page.waitForTimeout(1500);\n const childNode = page.locator(`span[data-id=\"${rootName}/${childName}\"]`);\n if (shouldBeVisible) {\n if (!(await childNode.isVisible())) {\n await rootToggle.click();\n await page.waitForTimeout(1000);\n }\n await expect(childNode).toBeVisible();\n } else {\n await expect(childNode).toHaveCount(0);\n }\n }\n\n private async refreshExplorerTree(): Promise<void> {\n const refreshButton = this.page.getByRole('button', { name: 'Refresh' }).first();\n if (await refreshButton.isVisible()) {\n await refreshButton.click();\n await this.page.waitForLoadState('networkidle');\n }\n }\n\n private async nodeExists(dataId: string): Promise<boolean> {\n await this.ensureExplorerTreeReady();\n const node = this.page.locator(`span[data-id=\"${dataId}\"]`);\n if ((await node.count()) > 0) {\n return true;\n }\n await this.refreshExplorerTree();\n return (await node.count()) > 0;\n }\n\n private async waitForApplicationNode(applicationName: string): Promise<void> {\n const appDataId = `Applications/${applicationName}`;\n const appNode = this.page.locator(`span[data-id=\"${appDataId}\"]`);\n const rootToggle = this.page.locator('div[data-id=\"Applications\"] .infinite-tree-node > a');\n\n await this.ensureExplorerTreeReady();\n await rootToggle.waitFor({ state: 'visible' });\n\n for (let attempt = 0; attempt < 3; attempt += 1) {\n if ((await appNode.count()) === 0 || !(await appNode.isVisible())) {\n await rootToggle.click();\n await this.page.waitForTimeout(500);\n }\n\n try {\n await expect(appNode).toBeVisible({ timeout: 5000 });\n return;\n } catch {\n await this.refreshExplorerTree();\n }\n }\n\n await expect(appNode).toBeVisible({ timeout: 15000 });\n }\n\n private async waitForPackageNode(applicationName: string, packageName: string): Promise<void> {\n const packageDataId = `Applications/${applicationName}/${packageName}`;\n const packageNode = this.page.locator(`span[data-id=\"${packageDataId}\"]`);\n const appRow = this.page.locator(`div[data-id=\"Applications/${applicationName}\"]`);\n const appToggle = appRow.locator('.infinite-tree-node > a');\n // Detects whether the app is already expanded (has any visible child span)\n const anyChildNode = this.page.locator(`span[data-id^=\"Applications/${applicationName}/\"]`).first();\n\n await this.waitForApplicationNode(applicationName);\n await appRow.scrollIntoViewIfNeeded();\n await appToggle.waitFor({ state: 'visible' });\n\n for (let attempt = 0; attempt < 5; attempt += 1) {\n // Only click the toggle if the node is currently collapsed — prevents accidental collapse\n if (!(await anyChildNode.isVisible())) {\n await appToggle.scrollIntoViewIfNeeded();\n await appToggle.click({ force: true });\n await this.page.waitForTimeout(500);\n }\n\n try {\n await expect(packageNode).toBeVisible({ timeout: 5000 });\n return;\n } catch {\n // Package still not visible — refresh tree and re-expand on next attempt\n await this.refreshExplorerTree();\n await this.waitForApplicationNode(applicationName);\n await appToggle.waitFor({ state: 'visible' });\n }\n }\n\n await expect(packageNode).toBeVisible({ timeout: 15000 });\n }\n\n private async clickPackageNodeWithRetry(packageDataId: string): Promise<void> {\n const appName = packageDataId.split('/')[1];\n for (let attempt = 0; attempt < 3; attempt += 1) {\n const appRow = this.page.locator(`div[data-id=\"Applications/${appName}\"]`);\n const appToggle = appRow.locator('.infinite-tree-node > a');\n try {\n await appToggle.scrollIntoViewIfNeeded();\n } catch {\n // Tree can re-render between retries; re-query next loop.\n }\n await appToggle.click({ force: true });\n const packageNode = this.page.locator(`span[data-id=\"${packageDataId}\"]`).first();\n await expect(packageNode).toBeVisible({ timeout: 5000 });\n try {\n await packageNode.click();\n return;\n } catch {\n await this.page.waitForTimeout(300);\n }\n }\n\n await this.page.locator(`span[data-id=\"${packageDataId}\"]`).first().click();\n }\n\n private async openPackageMenuWithRetry(versionDataId: string): Promise<void> {\n const appName = versionDataId.split('/')[1];\n const appToggle = this.page.locator(`div[data-id=\"Applications/${appName}\"] .infinite-tree-node > a`);\n // The context-menu button is CSS-hidden until the tree row is hovered.\n // Hover the node row first so the button becomes visible, then click it.\n const nodeRow = this.page.locator(`div[data-id=\"${versionDataId}\"] .infinite-tree-node`);\n\n for (let attempt = 0; attempt < 3; attempt += 1) {\n const menuButton = this.page.locator(`i.context-menu-button[data-id=\"${versionDataId}\"]`).first();\n try {\n await nodeRow.hover({ timeout: 5000 });\n await expect(menuButton).toBeVisible({ timeout: 5000 });\n await menuButton.click();\n return;\n } catch {\n await appToggle.click();\n await this.page.waitForTimeout(300);\n }\n }\n\n await this.page.locator(`i.context-menu-button[data-id=\"${versionDataId}\"]`).first().click({ force: true });\n }\n}\n","import { expect, type Download } from '@playwright/test';\nimport { WithPage } from '../withPage';\n\nexport class ReportsPage extends WithPage {\n private async openTab(tabLabel: string, paneId: string): Promise<void> {\n const tab = this.page.locator('.app-root .dot-sidebar .dot-list p').filter({ hasText: tabLabel }).first();\n await tab.scrollIntoViewIfNeeded();\n await tab.click();\n await this.page.locator(`#pane-${paneId}`).waitFor({ state: 'visible', timeout: 20000 });\n }\n\n private async downloadReport(buttonLabel: string, paneId: string, selector?: string): Promise<Download> {\n const pane = this.page.locator(`#pane-${paneId}`);\n const exportButton = selector ? pane.locator(selector) : pane.getByRole('button', { name: buttonLabel });\n const fallbackButton = pane.locator('button:has-text(\"Export\")');\n const downloadPromise = this.page.waitForEvent('download', { timeout: 20000 });\n if (await exportButton.isVisible()) {\n await exportButton.click();\n } else {\n await fallbackButton.first().click();\n }\n return downloadPromise;\n }\n\n async openDashboardTab(): Promise<void> {\n await this.openTab('Dashboard', 'DashboardTab');\n }\n\n async openDeploymentsTab(): Promise<void> {\n await this.openTab('Deployments', 'DeploymentsTab');\n }\n\n async openControlTasksTab(): Promise<void> {\n await this.openTab('Control tasks', 'ControlTasksTab');\n }\n\n async openAuditReportTab(): Promise<void> {\n await this.openTab('Audit report', 'AuditReportTab');\n }\n\n async downloadDeploymentsExport(): Promise<Download> {\n return this.downloadReport('Export report', 'DeploymentsTab');\n }\n\n async downloadControlTasksExport(): Promise<Download> {\n return this.downloadReport('Export report', 'ControlTasksTab');\n }\n\n async downloadAuditReportExport(): Promise<Download> {\n return this.downloadReport('Export report', 'AuditReportTab');\n }\n\n /* Clicks on the Deployment Tasks section */\n async clickDeploymentTasks(): Promise<void> {\n await this.page.locator('p.MuiTypography-root', { hasText: 'Deployments' }).click();\n }\n\n async verifyTheDeploymentValues(values: string[]): Promise<void> {\n await this.page\n .locator('div.deployment-task-filter-task-id input[placeholder=\"Search\"]:visible')\n .first()\n .fill(values[0]);\n const escapedApp = values[2].replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const escapedPkg = values[3].replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const packagePattern = new RegExp(`${escapedApp}/${escapedPkg}`, 'i');\n const row = this.page\n .locator('table.table-striped tbody tr')\n .filter({\n has: this.page.locator('td.report-table-package .deployment-report-package', { hasText: packagePattern }),\n })\n .first();\n await row.waitFor({ state: 'visible', timeout: 5000 });\n const packageCell = row.locator('td.report-table-package .deployment-report-package').first();\n await expect(packageCell).toContainText(packagePattern);\n await expect(row.locator('td.report-table-originalType .deployment-report-task-type')).toHaveText(/Initial/i);\n await expect(row.locator('td.report-table-user .deployment-report-user')).toHaveText('admin');\n\n //Click the row\n await packageCell.dblclick();\n await this.page.locator('div[data-id=\"0_1_1\"] .infinite-tree-node > a').click();\n await this.page.getByTitle('Execute Test Command').click();\n\n //Get the log text\n const text = await this.page.locator('div.step-log-body pre').nth(1).innerText();\n\n //Verify both the log text are same\n expect(text).toContain(values[1]);\n }\n}\n","import { expect, type Locator } from '@playwright/test';\nimport { WithPage } from '../withPage';\n\nexport class ReportsControlTasksPage extends WithPage {\n private getPane(): Locator {\n return this.page.locator('#pane-ControlTasksTab');\n }\n\n private getPagination(): Locator {\n return this.getPane().locator('.react-bootstrap-table-pagination');\n }\n\n private getTableBody(): Locator {\n return this.getPane().locator('.react-bootstrap-table tbody');\n }\n\n private getLastUpdated(): Locator {\n return this.getPane().locator('.last-updated-component');\n }\n\n // ── Navigation ───────────────────────────────────────────────────────────\n\n async verifySelected(): Promise<void> {\n const pane = this.getPane();\n await expect(pane).toBeVisible();\n await expect(\n this.page\n .locator('.dot-sidebar a[href*=\"controltasks\"], .dot-sidebar .dot-list p', {\n hasText: 'Control tasks',\n })\n .first(),\n ).toBeVisible();\n }\n\n // ── Filters ───────────────────────────────────────────────────────────────\n\n async verifyFiltersVisible(): Promise<void> {\n const pane = this.getPane();\n const filtersPanel = pane.locator('.xl-react-redux-table-filters-panel');\n await expect(filtersPanel).toBeVisible();\n await expect(pane.locator('.control-task-filter-targets .react-tagsinput-input')).toBeVisible();\n await expect(pane.locator('.control-task-filter-task-name input[placeholder=\"Search\"]')).toBeVisible();\n await expect(pane.locator('.control-task-id input[placeholder=\"Search\"]')).toBeVisible();\n await expect(pane.locator('.control-task-filter-start-date')).toBeVisible();\n await expect(pane.locator('.control-task-filter-end-date')).toBeVisible();\n await expect(pane.locator('.control-task-filter-worker input[placeholder=\"Search\"]')).toBeVisible();\n await expect(pane.locator('.control-task-filter-state .react-tagsinput-input')).toBeVisible();\n }\n\n async hideFilters(): Promise<void> {\n const pane = this.getPane();\n const filtersPanel = pane.locator('.xl-react-redux-table-filters-panel');\n const hideFiltersButton = pane.getByRole('button', { name: 'Hide filters' });\n await expect(filtersPanel).toBeVisible();\n await hideFiltersButton.click();\n await expect(filtersPanel).toBeHidden();\n }\n\n async showFilters(): Promise<void> {\n const pane = this.getPane();\n const filtersPanel = pane.locator('.xl-react-redux-table-filters-panel');\n const showFiltersButton = pane.getByRole('button', { name: 'Show filters' });\n if (await filtersPanel.isVisible()) {\n return;\n }\n for (let attempt = 0; attempt < 3; attempt += 1) {\n if (await showFiltersButton.isVisible()) {\n await showFiltersButton.click({ force: true });\n }\n if (await filtersPanel.isVisible()) {\n return;\n }\n await this.page.waitForTimeout(300);\n }\n await expect(filtersPanel).toBeVisible();\n }\n\n async ensureFiltersVisible(): Promise<void> {\n const pane = this.getPane();\n const filtersPanel = pane.locator('.xl-react-redux-table-filters-panel');\n if (await filtersPanel.isVisible()) {\n return;\n }\n const showFiltersButton = pane.getByRole('button', { name: 'Show filters' });\n if (await showFiltersButton.isVisible()) {\n await showFiltersButton.click({ force: true });\n }\n await expect(filtersPanel).toBeVisible();\n }\n\n // ── Date filters ─────────────────────────────────────────────────────────\n\n async setStartDate(value: string): Promise<void> {\n const field = this.getPane().locator('.control-task-filter-start-date');\n await field.click();\n await field.fill(value);\n await this.getLastUpdated().click({ force: true });\n }\n\n async setEndDate(value: string): Promise<void> {\n const field = this.getPane().locator('.control-task-filter-end-date');\n await field.click();\n await field.fill(value);\n await this.getLastUpdated().click({ force: true });\n }\n\n async expectStartDateValue(value: string): Promise<void> {\n await expect(this.getPane().locator('.control-task-filter-start-date')).toHaveValue(value);\n }\n\n async expectEndDateValue(value: string): Promise<void> {\n await expect(this.getPane().locator('.control-task-filter-end-date')).toHaveValue(value);\n }\n\n async checkInvalidStartDateError(): Promise<void> {\n const field = this.getPane().locator('.control-task-filter-start-date');\n await field.click();\n await field.press('End');\n await field.press('a');\n await this.page.keyboard.press('Escape');\n await expect(this.getPane().getByText('Example: Dec 1, 2018').first()).toBeVisible();\n }\n\n async checkInvalidEndDateError(): Promise<void> {\n const field = this.getPane().locator('.control-task-filter-end-date');\n await field.click();\n await field.press('End');\n await field.press('b');\n await this.page.keyboard.press('Escape');\n await expect(this.getPane().getByText('Example: Dec 1, 2018').first()).toBeVisible();\n }\n\n async expectNoStartDateError(): Promise<void> {\n await expect(this.getPane().getByText('Example: Dec 1, 2018')).toHaveCount(0);\n }\n\n async expectNoEndDateError(): Promise<void> {\n await expect(this.getPane().getByText('Example: Dec 1, 2018')).toHaveCount(0);\n }\n\n // ── Tag filters ───────────────────────────────────────────────────────────\n\n async selectTargetsTagsFilter(text: string, optionName: string): Promise<void> {\n await this.selectTagsFilterFirstSuggestion('.control-task-filter-targets .react-tagsinput', text, optionName);\n }\n\n async clearTargetsTagsFirstTag(): Promise<void> {\n const remove = this.getPane().locator(\n '.control-task-filter-targets .react-tagsinput-tag:nth-child(1) .react-tagsinput-remove',\n );\n if (await remove.count()) {\n await remove.click();\n }\n }\n\n async selectStatesTagsFilter(text: string, optionName: string): Promise<void> {\n await this.selectTagsFilterFirstSuggestion('.control-task-filter-state .react-tagsinput', text, optionName);\n }\n\n async clearStatesTagsFirstTag(): Promise<void> {\n const remove = this.getPane().locator(\n '.control-task-filter-state .react-tagsinput-tag:nth-child(1) .react-tagsinput-remove',\n );\n if (await remove.count()) {\n await remove.click();\n }\n }\n\n // ── Text filters ──────────────────────────────────────────────────────────\n\n async filterByTaskName(name: string): Promise<void> {\n await this.getPane().locator('.control-task-filter-task-name input[placeholder=\"Search\"]').fill(name);\n }\n\n async clearTaskName(): Promise<void> {\n await this.filterByTaskName('');\n }\n\n async filterByTaskId(id: string): Promise<void> {\n await this.getPane().locator('.control-task-id input[placeholder=\"Search\"]').fill(id);\n }\n\n async clearTaskId(): Promise<void> {\n await this.filterByTaskId('');\n }\n\n async filterByWorker(worker: string): Promise<void> {\n await this.getPane().locator('.control-task-filter-worker input[placeholder=\"Search\"]').fill(worker);\n }\n\n async clearWorkerFilter(): Promise<void> {\n await this.filterByWorker('');\n }\n\n // ── Tasks toggle ──────────────────────────────────────────────────────────\n\n async clickMyTasks(): Promise<void> {\n await this.getPane().getByRole('button', { name: 'My tasks' }).click();\n }\n\n async clickAllTasks(): Promise<void> {\n await this.getPane().getByRole('button', { name: 'All tasks' }).click();\n }\n\n // ── Toolbar ───────────────────────────────────────────────────────────────\n\n async clickRefresh(): Promise<void> {\n await this.getPane().getByRole('button', { name: 'Refresh' }).click();\n }\n\n async verifyLastUpdatedAndRefresh(): Promise<void> {\n const lastUpdated = this.getLastUpdated();\n await expect(lastUpdated).toBeVisible();\n await expect(lastUpdated).not.toHaveText('');\n await this.getPane().getByRole('button', { name: 'Refresh' }).click();\n await expect(lastUpdated).toBeVisible();\n }\n\n // ── Table assertions ──────────────────────────────────────────────────────\n\n async verifyTableHasRowsOrEmpty(): Promise<void> {\n const pane = this.getPane();\n const table = pane.locator('table.table-striped');\n await expect(table).toBeVisible();\n const rows = this.getTableBody().locator('tr');\n const noDataCell = this.getTableBody().locator('td.react-bs-table-no-data');\n const emptyState = pane.getByText(/No report data available/i);\n await expect(async () => {\n if ((await rows.count()) > 0) return true;\n if ((await noDataCell.count()) > 0 && (await noDataCell.first().isVisible())) return true;\n if ((await emptyState.count()) > 0 && (await emptyState.first().isVisible())) return true;\n return false;\n }).toBeTruthy();\n }\n\n async verifyTableColumns(): Promise<void> {\n const headers = this.getPane().locator('.react-bootstrap-table thead th');\n await expect(headers.filter({ hasText: 'Control task name' })).toBeVisible();\n await expect(headers.filter({ hasText: 'Target CI' })).toBeVisible();\n await expect(headers.filter({ hasText: 'Description' })).toBeVisible();\n await expect(headers.filter({ hasText: 'User' })).toBeVisible();\n await expect(headers.filter({ hasText: 'State' })).toBeVisible();\n await expect(headers.filter({ hasText: 'Start date' })).toBeVisible();\n await expect(headers.filter({ hasText: 'End date' })).toBeVisible();\n await expect(headers.filter({ hasText: 'Worker' })).toBeVisible();\n }\n\n async waitForTableReady(): Promise<void> {\n await expect(async () => {\n const loading = await this.getPane().getByText('Data loading').count();\n expect(loading).toBe(0);\n const table = this.getPane().locator('table.table-striped');\n expect(await table.count()).toBeGreaterThan(0);\n }).toPass({ timeout: 20000 });\n }\n\n async expectNumberOfRows(count: number): Promise<void> {\n await this.waitForTableReady();\n await expect(this.getTableBody().locator('tr')).toHaveCount(count);\n }\n\n async expectAtLeastNumberOfRows(count: number): Promise<void> {\n await this.waitForTableReady();\n await expect(async () => {\n const total = await this.getTableBody().locator('tr').count();\n expect(total).toBeGreaterThanOrEqual(count);\n }).toPass({ timeout: 30000 });\n }\n\n async expectTotal(total: number): Promise<void> {\n await expect(this.getPagination().locator('> div').filter({ hasText: 'Total:' })).toContainText(`Total: ${total}`);\n }\n\n async expectAtLeastTotal(count: number): Promise<void> {\n await this.waitForTableReady();\n await expect(async () => {\n const text = await this.getPagination().locator('> div').filter({ hasText: 'Total:' }).textContent();\n const match = text?.match(/Total:\\s*(\\d+)/);\n const total = match ? Number(match[1]) : 0;\n expect(total).toBeGreaterThanOrEqual(count);\n }).toPass();\n }\n\n async getTotalCount(): Promise<number> {\n await this.waitForTableReady();\n const text = await this.getPagination().locator('> div').filter({ hasText: 'Total:' }).textContent();\n const match = text?.match(/Total:\\s*(\\d+)/);\n return match ? Number(match[1]) : 0;\n }\n\n async expectValue(row: number, column: string, expected: string): Promise<void> {\n const cell = this.getTableBody().locator(`tr:nth-child(${row}) td.report-table-${column}`);\n await expect(cell).toHaveText(expected);\n }\n\n async expectValueContains(row: number, column: string, expected: string): Promise<void> {\n const cell = this.getTableBody().locator(`tr:nth-child(${row}) td.report-table-${column}`);\n await expect(cell).toContainText(expected);\n }\n\n async shouldHaveScrollBar(): Promise<void> {\n await this.waitForTableReady();\n const container = this.getPane().locator('div.report');\n const overflowX = await container.evaluate((el) => window.getComputedStyle(el).overflowX);\n expect(['auto', 'scroll']).toContain(overflowX);\n }\n\n // ── Sorting ───────────────────────────────────────────────────────────────\n\n async sortBy(column: string): Promise<void> {\n await this.getPane().locator(`.react-bootstrap-table thead th.report-table-${column}`).click();\n }\n\n async verifyIsSorted(column: string): Promise<void> {\n const sortOrder = this.getPane().locator(\n `.react-bootstrap-table thead th.report-table-${column} .react-bootstrap-table-sort-order`,\n );\n await expect(sortOrder).toBeVisible();\n }\n\n async getColumnValues(column: string): Promise<string[]> {\n await this.waitForTableReady();\n const cells = this.getTableBody().locator(`tr td.report-table-${column}`);\n const count = await cells.count();\n const values: string[] = [];\n for (let i = 0; i < count; i += 1) {\n values.push((await cells.nth(i).textContent())?.trim() ?? '');\n }\n return values;\n }\n\n // ── Pagination ────────────────────────────────────────────────────────────\n\n async getLastPageNumber(): Promise<number> {\n await this.waitForTableReady();\n const links = this.getPagination().getByRole('list').getByRole('link');\n const count = await links.count();\n if (count < 2) return 1;\n const text = await links.nth(count - 2).textContent();\n const num = Number(text?.trim());\n return Number.isFinite(num) && num > 0 ? num : 1;\n }\n\n async goToPage(page: number): Promise<void> {\n await this.getPagination().getByRole('link', { name: page.toString(), exact: true }).click();\n }\n\n async goToFirstPage(): Promise<void> {\n const firstLink = this.getPagination().getByRole('link', { name: '<<' });\n if (await firstLink.count()) {\n await firstLink.click();\n } else {\n await this.getPagination().getByRole('link', { name: '1', exact: true }).click();\n }\n }\n\n async goToLastPage(): Promise<void> {\n const lastLink = this.getPagination().getByRole('link', { name: '>>' });\n if (await lastLink.count()) {\n await lastLink.click();\n } else {\n const links = this.getPagination().getByRole('list').getByRole('link');\n const count = await links.count();\n await links.nth(count - 2).click();\n }\n }\n\n async goToPreviousPage(): Promise<void> {\n await this.getPagination().getByRole('link', { name: '<', exact: true }).click();\n }\n\n async goToNextPage(): Promise<void> {\n await this.getPagination().getByRole('link', { name: '>', exact: true }).click();\n }\n\n async expectPage(page: number): Promise<void> {\n await expect(async () => {\n const pagination = this.getPagination();\n const activeLink = pagination.locator('li.active').getByRole('link', { name: page.toString(), exact: true });\n if ((await activeLink.count()) > 0) return;\n const ariaCurrent = pagination.locator('[aria-current=\"page\"]').filter({ hasText: page.toString() });\n if ((await ariaCurrent.count()) > 0) return;\n // When there is only 1 page, the pagination may not render page links at all.\n // In that case page 1 is implicitly active.\n if (page === 1) {\n const nextLink = pagination.getByRole('link', { name: '>', exact: true });\n const pageLinks = pagination.getByRole('link').filter({ hasText: /^\\d+$/ });\n if ((await nextLink.count()) === 0 && (await pageLinks.count()) === 0) return;\n }\n throw new Error(`Page ${page} not active`);\n }).toPass({ timeout: 30000 });\n }\n\n async expectPageLinkVisible(pageNumber: number): Promise<void> {\n await expect(this.getPagination().getByRole('link', { name: pageNumber.toString(), exact: true })).toBeVisible();\n }\n\n async expectPaginationLinksVisible(): Promise<void> {\n await expect(this.getPagination().getByRole('link', { name: '>', exact: true })).toBeVisible();\n }\n\n async expectPaginationLinksHidden(): Promise<void> {\n await expect(this.getPagination().getByRole('link', { name: '>', exact: true })).toHaveCount(0);\n }\n\n async setPageSize(size: number): Promise<void> {\n await this.openPageSizeMenu();\n await this.getPagination().getByRole('menu').getByRole('menuitem', { name: size.toString(), exact: true }).click();\n await this.waitForTableReady();\n }\n\n async expectPageSize(size: number): Promise<void> {\n await expect(this.getPagination().getByRole('button', { name: size.toString(), exact: true })).toBeVisible();\n }\n\n async expectPageSizes(sizes: number[]): Promise<void> {\n await this.openPageSizeMenu();\n const menu = this.getPagination().getByRole('menu');\n await expect(menu.getByRole('menuitem')).toHaveCount(sizes.length);\n for (const size of sizes) {\n await expect(menu.getByRole('menuitem', { name: size.toString(), exact: true })).toBeVisible();\n }\n await this.closePageSizeMenu();\n }\n\n // ── Private helpers ───────────────────────────────────────────────────────\n\n private async openPageSizeMenu(): Promise<void> {\n const toggle = this.getPagination().locator('.dropdown-toggle');\n await toggle.click();\n await this.getPagination().getByRole('menu').waitFor({ state: 'visible' });\n }\n\n private async closePageSizeMenu(): Promise<void> {\n const menu = this.getPagination().getByRole('menu');\n if (await menu.isVisible()) {\n await this.getPagination().locator('.dropdown-toggle').click();\n }\n }\n\n private async expectTagAdded(tagTitle: string): Promise<void> {\n const tags = this.getPane().locator('.xl-react-widget-tags .react-tagsinput-tag');\n const byTitle = tags.locator(`[title='${tagTitle}']`);\n const byContainsTitle = tags.filter({ hasText: tagTitle.split('/').pop() ?? tagTitle });\n if ((await byTitle.count()) > 0) {\n await expect(byTitle.first()).toBeVisible();\n } else {\n await expect(byContainsTitle.first()).toBeVisible();\n }\n }\n\n private async selectTagsFilterFirstSuggestion(\n filterSelector: string,\n text: string,\n optionName: string,\n ): Promise<void> {\n const pane = this.getPane();\n const filter = pane.locator(filterSelector);\n const input = filter.locator('.xl-react-widget-autocomplete .react-tagsinput-input');\n await input.click({ force: true });\n await input.fill(text);\n const suggestionList = pane.locator('.xl-react-autocomplete-suggestion-list');\n await expect(suggestionList).toBeVisible();\n const optionByTitle = suggestionList.locator(`.yt-option[title=\"${optionName}\"]`);\n const optionByText = suggestionList.locator('.yt-option', { hasText: optionName });\n const gridOption = suggestionList.getByRole('rowgroup').getByText(optionName, { exact: false });\n let option;\n if (await optionByTitle.count()) {\n option = optionByTitle.first();\n } else if (await optionByText.count()) {\n option = optionByText.first();\n } else {\n option = gridOption.first();\n }\n await expect(option).toBeVisible();\n const iconCheckbox = option.locator('i.xl-icon.icon-s.checkbox');\n if (await iconCheckbox.count()) {\n await iconCheckbox.click();\n } else {\n await option.click();\n }\n await this.page.locator('body').click({ position: { x: 10, y: 10 } });\n await this.expectTagAdded(optionName);\n }\n}\n","import { expect, type Download, type Locator } from '@playwright/test';\nimport { WithPage } from '../withPage';\n\nexport class ReportsDashboardPage extends WithPage {\n private async downloadReport(): Promise<Download> {\n const pane = this.page.locator('#pane-DashboardTab');\n const exportButton = pane.locator('button.export-audit-report');\n const fallbackButton = pane.locator('button:has-text(\"Export\")');\n const downloadPromise = this.page.waitForEvent('download', { timeout: 20000 });\n if (await exportButton.isVisible()) {\n await exportButton.click();\n } else {\n await fallbackButton.first().click();\n }\n return downloadPromise;\n }\n\n async downloadDashboardExport(): Promise<Download> {\n return this.downloadReport();\n }\n\n async verifySummarySection(): Promise<void> {\n const pane = this.page.locator('#pane-DashboardTab');\n const summary = pane.locator('.statistics-block');\n await expect(pane.getByText('Usage summary for current month', { exact: false })).toBeVisible();\n await expect(pane.locator('button:has-text(\"Export\")')).toBeVisible();\n await expect(summary.locator('.tile-title[title=\"Successful deployments\"]')).toBeVisible();\n await expect(summary.locator('.tile-title[title=\"Retried deployments\"]')).toBeVisible();\n await expect(summary.locator('.tile-title[title=\"Rollback deployments\"]')).toBeVisible();\n await expect(summary.locator('.tile-title[title=\"Aborted deployments\"]')).toBeVisible();\n await expect(pane.getByText('Deployment status overview', { exact: true })).toBeVisible();\n }\n\n async verifyLast30DaysSection(): Promise<void> {\n const pane = this.page.locator('#pane-DashboardTab');\n await expect(pane.locator('h1.time-period-text', { hasText: /Last 30 days/i })).toBeVisible();\n\n const successCard = pane.getByText('Top 10 successful deployments', { exact: true }).first().locator('..');\n const retriedCard = pane.getByText('Top 10 retried deployments', { exact: true }).first().locator('..');\n const longestCard = pane.getByText('Top 10 longest deployments', { exact: true }).first().locator('..');\n\n await this.expectCardHasDataOrEmpty(successCard);\n await this.expectCardHasDataOrEmpty(retriedCard);\n await this.expectCardHasDataOrEmpty(longestCard);\n }\n\n async verifySelected(): Promise<void> {\n const pane = this.page.locator('#pane-DashboardTab');\n await expect(pane).toBeVisible();\n await expect(this.page.getByText('Dashboard', { exact: true })).toBeVisible();\n }\n\n async verifyLastUpdatedAndRefresh(): Promise<void> {\n const pane = this.page.locator('#pane-DashboardTab');\n const lastUpdated = pane.locator('.last-updated-component');\n await expect(lastUpdated).toBeVisible();\n await expect(lastUpdated).not.toHaveText('');\n const refreshButton = pane.getByRole('button', { name: 'Refresh' });\n await refreshButton.click();\n await expect(lastUpdated).toBeVisible();\n }\n\n async verifyDateRangeDefault(): Promise<void> {\n const pane = this.page.locator('#pane-DashboardTab');\n const dateRangeInput = pane.locator('#date-range-input');\n await expect(dateRangeInput).toHaveValue('Current month');\n }\n\n async selectDateRange(optionLabel: string): Promise<void> {\n const pane = this.page.locator('#pane-DashboardTab');\n const dateRangeInput = pane.locator('#date-range-input');\n try {\n await dateRangeInput.selectOption({ label: optionLabel });\n return;\n } catch {\n // Fall back to clicking the open dropdown list.\n }\n\n await dateRangeInput.click();\n\n const optionRole = this.page.getByRole('option', { name: optionLabel });\n const menuItemRole = this.page.getByRole('menuitem', { name: optionLabel });\n const fallbackOption = this.page.locator('li', { hasText: optionLabel });\n\n if (await optionRole.isVisible()) {\n await optionRole.click();\n return;\n }\n if (await menuItemRole.isVisible()) {\n await menuItemRole.click();\n return;\n }\n await fallbackOption.first().click();\n }\n\n async verifyDateRangeHeaderContains(label: string): Promise<void> {\n const pane = this.page.locator('#pane-DashboardTab');\n await expect(pane.locator('.title-header', { hasText: label })).toBeVisible();\n }\n\n async verifyOverviewChartsOrEmpty(): Promise<void> {\n const pane = this.page.locator('#pane-DashboardTab');\n const statusOverview = pane.getByText('Deployment status overview', { exact: true }).first().locator('..');\n await this.expectWidgetHasChartOrEmpty(statusOverview);\n\n const numberOfDeployments = pane\n .getByText('Number of deployments over time', { exact: true })\n .first()\n .locator('..');\n await this.expectWidgetHasChartOrEmpty(numberOfDeployments);\n\n const averageDuration = pane\n .getByText('Average deployment duration over time', { exact: true })\n .first()\n .locator('..');\n await this.expectWidgetHasChartOrEmpty(averageDuration);\n }\n\n async verifyDeploymentStatusLegend(): Promise<void> {\n const pane = this.page.locator('#pane-DashboardTab');\n const tile = pane.locator('.deployment-status-overview');\n await expect(tile).toBeVisible();\n const legendItems = tile.locator('.recharts-legend-item-text');\n if (await legendItems.count()) {\n await expect(legendItems.filter({ hasText: 'Successful' }).first()).toBeVisible();\n await expect(legendItems.filter({ hasText: 'Retried' }).first()).toBeVisible();\n await expect(legendItems.filter({ hasText: 'Rollback' }).first()).toBeVisible();\n await expect(legendItems.filter({ hasText: 'Aborted' }).first()).toBeVisible();\n return;\n }\n // No-data state: chart, canvas, or no-data widget must be visible\n const chartOrNoData = tile.locator('svg, canvas, .no-data-widget');\n await expect(chartOrNoData.first()).toBeVisible();\n }\n\n async verifyButtonsFocusable(): Promise<void> {\n const pane = this.page.locator('#pane-DashboardTab');\n const exportButton = pane.getByRole('button', { name: 'Export' });\n const refreshButton = pane.getByRole('button', { name: 'Refresh' });\n await exportButton.focus();\n await expect(exportButton).toBeFocused();\n await refreshButton.focus();\n await expect(refreshButton).toBeFocused();\n }\n\n async verifyDateRangeOptions(): Promise<void> {\n const pane = this.page.locator('#pane-DashboardTab');\n const select = pane.locator('#date-range-input');\n const expectedOptions = [\n 'Current month',\n 'Last 30 days',\n 'Last 90 days',\n 'Last 180 days',\n 'Last 360 days',\n 'Custom date range',\n ];\n for (const option of expectedOptions) {\n await expect(select.locator(`option:has-text(\"${option}\")`)).toBeAttached();\n }\n }\n\n async verifyLast6MonthsSection(): Promise<void> {\n const pane = this.page.locator('#pane-DashboardTab');\n const trendBlock = pane.locator('.time-period-section.trend-block');\n await expect(trendBlock).toBeVisible();\n await expect(trendBlock.locator('h1.time-period-text')).toContainText('Last 6 months');\n const numDeployments = trendBlock.locator('.number-of-deployments-over-time');\n const avgDuration = trendBlock.locator('.average-deployment-duration-over-time');\n await expect(numDeployments).toBeVisible();\n await expect(avgDuration).toBeVisible();\n }\n\n async verifyKpiTileNumbers(): Promise<void> {\n const pane = this.page.locator('#pane-DashboardTab');\n const tiles = [\n pane.locator('.successful.text-widget'),\n pane.locator('.retried.text-widget'),\n pane.locator('.rollback.text-widget'),\n pane.locator('.aborted.text-widget'),\n ];\n for (const tile of tiles) {\n await expect(tile).toBeVisible();\n await expect(tile.locator('.number')).toBeVisible();\n }\n }\n\n async verifyCustomDateRangeInputs(): Promise<void> {\n const pane = this.page.locator('#pane-DashboardTab');\n await pane.locator('#date-range-input').selectOption({ label: 'Custom date range' });\n await expect(pane.locator('.custom-date-range')).toBeVisible();\n await expect(pane.locator('#custom-range-start-date')).toBeVisible();\n await expect(pane.locator('#custom-range-end-date')).toBeVisible();\n // Restore default\n await pane.locator('#date-range-input').selectOption({ label: 'Current month' });\n }\n\n private async expectCardHasDataOrEmpty(card: Locator): Promise<void> {\n const tableRows = card.locator('table tbody tr');\n if (await tableRows.count()) {\n await expect(tableRows.first()).toBeVisible();\n return;\n }\n\n const rowData = card.locator('.row-data');\n if (await rowData.count()) {\n await expect(rowData.first()).toBeAttached();\n return;\n }\n\n await expect(card.getByText('No data available for the current period', { exact: true })).toBeVisible();\n }\n\n private async expectWidgetHasChartOrEmpty(widget: Locator): Promise<void> {\n const chart = widget.locator('svg, canvas');\n const noData = widget.getByText('No data available for the current period', { exact: true });\n const chartVisible = await chart.first().isVisible();\n const noDataVisible = await noData.isVisible();\n expect(chartVisible || noDataVisible).toBeTruthy();\n }\n}\n","import { expect, type Locator } from '@playwright/test';\nimport { WithPage } from '../withPage';\n\nexport class ReportsDeploymentsPage extends WithPage {\n private getPane(): Locator {\n return this.page.locator('#pane-DeploymentsTab');\n }\n\n private getPagination(): Locator {\n return this.getPane().locator('.react-bootstrap-table-pagination');\n }\n\n private getTableBody(): Locator {\n return this.getPane().locator('.react-bootstrap-table tbody');\n }\n\n private getLastUpdated(): Locator {\n return this.getPane().locator('.last-updated-component');\n }\n\n private async resolveDateField(containerSelector: string): Promise<Locator> {\n const container = this.getPane().locator(containerSelector);\n const input = container.locator('input');\n if (await input.count()) {\n return input.first();\n }\n return container;\n }\n\n async verifySelected(): Promise<void> {\n const pane = this.getPane();\n await expect(pane).toBeVisible();\n await expect(this.page.getByText('Deployments', { exact: true })).toBeVisible();\n }\n\n async verifyFiltersVisible(): Promise<void> {\n const pane = this.getPane();\n const filtersPanel = pane.locator('.xl-react-redux-table-filters-panel');\n await expect(filtersPanel).toBeVisible();\n await expect(pane.locator('.deployment-task-filter-start-date')).toBeVisible();\n await expect(pane.locator('.deployment-task-filter-end-date')).toBeVisible();\n await expect(pane.locator('.deployment-task-filter-task-id input[placeholder=\"Search\"]')).toBeVisible();\n await expect(pane.locator('.deployment-task-filter-worker input[placeholder=\"Search\"]')).toBeVisible();\n await expect(pane.locator('.deployment-task-filter-applications .react-tagsinput-input')).toBeVisible();\n await expect(pane.locator('.deployment-task-filter-environments .react-tagsinput-input')).toBeVisible();\n await expect(pane.locator('.deployment-task-filter-state .react-tagsinput-input')).toBeVisible();\n await expect(pane.locator('.deployment-task-filter-types .react-tagsinput-input')).toBeVisible();\n const tasksFilterInput = pane.locator('.deployment-task-filter-tasks .react-tagsinput-input');\n if (await tasksFilterInput.count()) {\n await expect(tasksFilterInput).toBeVisible();\n }\n }\n\n async verifyLastUpdatedAndRefresh(): Promise<void> {\n const pane = this.getPane();\n const lastUpdated = this.getLastUpdated();\n await expect(lastUpdated).toBeVisible();\n await expect(lastUpdated).not.toHaveText('');\n const refreshButton = pane.getByRole('button', { name: 'Refresh' });\n await refreshButton.click();\n await expect(lastUpdated).toBeVisible();\n }\n\n async verifyTableHasRowsOrEmpty(): Promise<void> {\n const pane = this.getPane();\n const table = pane.locator('table.table-striped');\n await expect(table).toBeVisible();\n const rows = this.getTableBody().locator('tr');\n const noDataCell = this.getTableBody().locator('tr td.react-bs-table-no-data');\n const emptyState = pane.getByText(/No data/i);\n\n await expect(async () => {\n if (await rows.count()) {\n return true;\n }\n if ((await noDataCell.count()) > 0 && (await noDataCell.first().isVisible())) {\n return true;\n }\n if ((await emptyState.count()) > 0 && (await emptyState.first().isVisible())) {\n return true;\n }\n return false;\n }).toBeTruthy();\n }\n\n async hideFilters(): Promise<void> {\n const pane = this.getPane();\n const filtersPanel = pane.locator('.xl-react-redux-table-filters-panel');\n const hideFiltersButton = pane.getByRole('button', { name: 'Hide filters' });\n await expect(filtersPanel).toBeVisible();\n await hideFiltersButton.click();\n await expect(filtersPanel).toBeHidden();\n }\n\n async showFilters(): Promise<void> {\n const pane = this.getPane();\n const filtersPanel = pane.locator('.xl-react-redux-table-filters-panel');\n const showFiltersButton = pane.getByRole('button', { name: 'Show filters' });\n if (await filtersPanel.isVisible()) {\n return;\n }\n\n for (let attempt = 0; attempt < 3; attempt += 1) {\n if (await showFiltersButton.isVisible()) {\n await showFiltersButton.click({ force: true });\n }\n if (await filtersPanel.isVisible()) {\n return;\n }\n await this.page.waitForTimeout(300);\n }\n\n await expect(filtersPanel).toBeVisible();\n }\n\n async ensureFiltersVisible(): Promise<void> {\n const pane = this.getPane();\n const filtersPanel = pane.locator('.xl-react-redux-table-filters-panel');\n if (await filtersPanel.isVisible()) {\n return;\n }\n const showFiltersButton = pane.getByRole('button', { name: 'Show filters' });\n if (await showFiltersButton.isVisible()) {\n await showFiltersButton.click({ force: true });\n }\n await expect(filtersPanel).toBeVisible();\n }\n\n async clickRefresh(): Promise<void> {\n const pane = this.getPane();\n await pane.getByRole('button', { name: 'Refresh' }).click();\n }\n\n async expectTotal(total: number): Promise<void> {\n await expect(this.getPagination().locator('> div').filter({ hasText: 'Total:' })).toContainText(`Total: ${total}`);\n }\n\n async expectNumberOfRows(count: number): Promise<void> {\n await this.waitForTableReady();\n await expect(this.getTableBody().locator('tr')).toHaveCount(count);\n }\n\n async expectAtLeastNumberOfRows(count: number): Promise<void> {\n await this.waitForTableReady();\n await expect(async () => {\n const total = await this.getTableBody().locator('tr').count();\n expect(total).toBeGreaterThanOrEqual(count);\n }).toPass({ timeout: 30000 });\n }\n\n async expectAtLeastTotal(count: number): Promise<void> {\n await this.waitForTableReady();\n await expect(async () => {\n const text = await this.getPagination().locator('> div').filter({ hasText: 'Total:' }).textContent();\n const match = text?.match(/Total:\\s*(\\d+)/);\n const total = match ? Number(match[1]) : 0;\n expect(total).toBeGreaterThanOrEqual(count);\n }).toPass();\n }\n\n async expectValue(row: number, column: string, expected: string): Promise<void> {\n const cell = this.getTableBody().locator(`tr:nth-child(${row}) td.report-table-${column}`);\n await expect(cell).toHaveText(expected);\n }\n\n async expectValueContains(row: number, column: string, expected: string): Promise<void> {\n const cell = this.getTableBody().locator(`tr:nth-child(${row}) td.report-table-${column}`);\n await expect(cell).toContainText(expected);\n }\n\n async sortBy(column: string): Promise<void> {\n const header = this.getPane().locator(`.react-bootstrap-table thead th.report-table-${column}`);\n await header.click();\n }\n\n async isAscendingSorted(column: string): Promise<void> {\n const sortOrder = this.getPane().locator(\n `.react-bootstrap-table thead th.report-table-${column} .react-bootstrap-table-sort-order`,\n );\n await expect(sortOrder).toBeVisible();\n }\n\n async getColumnValues(column: string): Promise<string[]> {\n await this.waitForTableReady();\n const cells = this.getTableBody().locator(`tr td.report-table-${column}`);\n const count = await cells.count();\n const values: string[] = [];\n for (let i = 0; i < count; i += 1) {\n values.push((await cells.nth(i).textContent())?.trim() ?? '');\n }\n return values;\n }\n\n async getLastPageNumber(): Promise<number> {\n await this.waitForTableReady();\n const links = this.getPagination().getByRole('list').getByRole('link');\n const count = await links.count();\n if (count < 2) return 1;\n // links order on page 1: [1, 2, ..., n, >] — last numeric is nth(count-2)\n const text = await links.nth(count - 2).textContent();\n const num = Number(text?.trim());\n return Number.isFinite(num) && num > 0 ? num : 1;\n }\n\n async getTotalCount(): Promise<number> {\n await this.waitForTableReady();\n const text = await this.getPagination().locator('> div').filter({ hasText: 'Total:' }).textContent();\n const match = text?.match(/Total:\\s*(\\d+)/);\n return match ? Number(match[1]) : 0;\n }\n\n async expectPage(page: number): Promise<void> {\n await expect(async () => {\n const pagination = this.getPagination();\n // primary: react-bootstrap li.active with child link\n const activeLink = pagination.locator('li.active').getByRole('link', { name: page.toString(), exact: true });\n if ((await activeLink.count()) > 0) return;\n // fallback: aria-current=\"page\"\n const ariaCurrent = pagination.locator('[aria-current=\"page\"]').filter({ hasText: page.toString() });\n if ((await ariaCurrent.count()) > 0) return;\n throw new Error(`Page ${page} not active`);\n }).toPass({ timeout: 30000 });\n }\n\n async goToPage(page: number): Promise<void> {\n await this.getPagination().getByRole('link', { name: page.toString() }).click();\n }\n\n async goToFirstPage(): Promise<void> {\n const firstLink = this.getPagination().getByRole('link', { name: '<<' });\n if (await firstLink.count()) {\n await firstLink.click();\n } else {\n await this.getPagination().getByRole('link', { name: '1', exact: true }).click();\n }\n }\n\n async goToLastPage(): Promise<void> {\n const lastLink = this.getPagination().getByRole('link', { name: '>>' });\n if (await lastLink.count()) {\n await lastLink.click();\n } else {\n const links = this.getPagination().getByRole('list').getByRole('link');\n const count = await links.count();\n // last numeric link is second-to-last (last is '>')\n await links.nth(count - 2).click();\n }\n }\n\n async goToPreviousPage(): Promise<void> {\n await this.getPagination().getByRole('link', { name: '<', exact: true }).click();\n }\n\n async goToNextPage(): Promise<void> {\n await this.getPagination().getByRole('link', { name: '>', exact: true }).click();\n }\n\n async expectPageLinkVisible(pageNumber: number): Promise<void> {\n await expect(this.getPagination().getByRole('link', { name: pageNumber.toString(), exact: true })).toBeVisible();\n }\n\n async expectPaginationLinksVisible(): Promise<void> {\n await expect(this.getPagination().getByRole('link', { name: '>', exact: true })).toBeVisible();\n }\n\n async expectPaginationLinksHidden(): Promise<void> {\n await expect(this.getPagination().getByRole('link', { name: '>', exact: true })).toHaveCount(0);\n }\n\n async expectPageSize(size: number): Promise<void> {\n await expect(this.getPagination().getByRole('button', { name: size.toString(), exact: true })).toBeVisible();\n }\n\n async expectPageSizes(sizes: number[]): Promise<void> {\n await this.openPageSizeMenu();\n const menu = this.getPagination().getByRole('menu');\n await expect(menu.getByRole('menuitem')).toHaveCount(sizes.length);\n for (const size of sizes) {\n await expect(menu.getByRole('menuitem', { name: size.toString(), exact: true })).toBeVisible();\n }\n await this.closePageSizeMenu();\n }\n\n async setPageSize(size: number): Promise<void> {\n await this.openPageSizeMenu();\n await this.getPagination().getByRole('menu').getByRole('menuitem', { name: size.toString(), exact: true }).click();\n await this.waitForTableReady();\n }\n\n async shouldHaveScrollBar(): Promise<void> {\n await this.waitForTableReady();\n const container = this.getPane().locator('div.report');\n const overflowX = await container.evaluate((el) => window.getComputedStyle(el).overflowX);\n expect(['auto', 'scroll']).toContain(overflowX);\n }\n\n async setStartDate(value: string): Promise<void> {\n const field = await this.resolveDateField('.deployment-task-filter-start-date');\n await field.click();\n await field.fill(value);\n await this.getLastUpdated().click({ force: true });\n }\n\n async setEndDate(value: string): Promise<void> {\n const field = await this.resolveDateField('.deployment-task-filter-end-date');\n await field.click();\n await field.fill(value);\n await this.getLastUpdated().click({ force: true });\n }\n\n async expectStartDateValue(value: string): Promise<void> {\n await this.expectDateFieldValue('.deployment-task-filter-start-date', value);\n }\n\n async expectEndDateValue(value: string): Promise<void> {\n await this.expectDateFieldValue('.deployment-task-filter-end-date', value);\n }\n\n async checkInvalidStartDateError(): Promise<void> {\n const field = await this.resolveDateField('.deployment-task-filter-start-date');\n await field.click(); // opens calendar\n await field.press('End');\n await field.press('a'); // append invalid char\n await this.page.keyboard.press('Escape'); // close calendar → error appears below field\n await expect(this.getPane().getByText('Example: Dec 1, 2018').first()).toBeVisible();\n }\n\n async checkInvalidEndDateError(): Promise<void> {\n const field = await this.resolveDateField('.deployment-task-filter-end-date');\n await field.click(); // opens calendar\n await field.press('End');\n await field.press('b'); // append invalid char\n await this.page.keyboard.press('Escape'); // close calendar → error appears below field\n await expect(this.getPane().getByText('Example: Dec 1, 2018').first()).toBeVisible();\n }\n\n async expectNoStartDateError(): Promise<void> {\n await expect(this.getPane().getByText('Example: Dec 1, 2018')).toHaveCount(0);\n }\n\n async expectNoEndDateError(): Promise<void> {\n await expect(this.getPane().getByText('Example: Dec 1, 2018')).toHaveCount(0);\n }\n\n async selectRadioFilter(label: 'None' | 'Application(s)' | 'Environment(s)'): Promise<void> {\n await this.ensureFiltersVisible();\n const pane = this.getPane();\n const radioGroup = pane.locator('.xl-react-widget-radio-group');\n const labelLocator = radioGroup.locator(`label[data='${label}']`);\n if (await labelLocator.count()) {\n await labelLocator.click();\n return;\n }\n\n const fallbackByText = radioGroup.getByText(label, { exact: true });\n if (await fallbackByText.count()) {\n await fallbackByText.click();\n return;\n }\n const ariaRadio = pane.locator('[role=\"radio\"]', { hasText: label });\n if (await ariaRadio.count()) {\n await ariaRadio.first().click();\n }\n }\n\n async expectApplicationsRadioSelected(): Promise<void> {\n const radio = this.getPane().locator('.xl-react-widget-radio-group label[data=\"Application(s)\"]');\n if ((await radio.count()) === 0) {\n return;\n }\n await expect(radio).toHaveAttribute('style', /background-color/);\n }\n\n async selectTagsFilterApplications(text: string, optionName: string): Promise<void> {\n await this.selectTagsFilterFirstSuggestion(\n '.deployment-task-filter-applications .react-tagsinput',\n text,\n optionName,\n );\n }\n\n async selectTagsFilterEnvironments(text: string, optionName: string): Promise<void> {\n await this.selectTagsFilterFirstSuggestion(\n '.deployment-task-filter-environments .react-tagsinput',\n text,\n optionName,\n );\n }\n\n async selectStatesTagsFilterFirstSuggestion(text: string, optionName: string): Promise<void> {\n await this.selectTagsFilterFirstSuggestion('.deployment-task-filter-state .react-tagsinput', text, optionName);\n }\n\n async clearStatesTagsFirstTag(): Promise<void> {\n const remove = this.getPane().locator(\n '.deployment-task-filter-state .react-tagsinput-tag:nth-child(1) .react-tagsinput-remove',\n );\n if (await remove.count()) {\n await remove.click();\n }\n }\n\n async clearApplicationsTagsFirstTag(): Promise<void> {\n const remove = this.getPane().locator(\n '.deployment-task-filter-applications .react-tagsinput-tag:nth-child(1) .react-tagsinput-remove',\n );\n if (await remove.count()) {\n await remove.click();\n }\n }\n\n async clearEnvironmentsTagsFirstTag(): Promise<void> {\n const remove = this.getPane().locator(\n '.deployment-task-filter-environments .react-tagsinput-tag:nth-child(1) .react-tagsinput-remove',\n );\n if (await remove.count()) {\n await remove.click();\n }\n }\n\n async setTaskId(taskId: string): Promise<void> {\n const input = this.getPane().locator('.deployment-task-filter-task-id input');\n await input.fill(taskId);\n await expect(input).toHaveValue(taskId);\n }\n\n async setWorkerName(workerName: string): Promise<void> {\n const input = this.getPane().locator('.deployment-task-filter-worker input');\n await input.fill(workerName);\n await expect(input).toHaveValue(workerName);\n }\n\n async clearWorkerName(): Promise<void> {\n await this.setWorkerName('');\n }\n\n async expectTagAdded(tagTitle: string): Promise<void> {\n const tags = this.getPane().locator('.xl-react-widget-tags .react-tagsinput-tag');\n const byTitle = tags.locator(`[title='${tagTitle}']`);\n const byContainsTitle = tags.filter({ hasText: tagTitle.split('/').pop() ?? tagTitle });\n const count = await byTitle.count();\n if (count > 0) {\n await expect(byTitle.first()).toBeVisible();\n } else {\n await expect(byContainsTitle.first()).toBeVisible();\n }\n }\n\n private async selectTagsFilterFirstSuggestion(\n filterSelector: string,\n text: string,\n optionName: string,\n ): Promise<void> {\n const pane = this.getPane();\n const filter = pane.locator(filterSelector);\n const input = filter.locator('.xl-react-widget-autocomplete .react-tagsinput-input');\n await input.click({ force: true });\n await input.fill(text);\n const suggestionList = pane.locator('.xl-react-autocomplete-suggestion-list');\n await expect(suggestionList).toBeVisible();\n // Try .yt-option first (State/Type filters), then aria grid row (Application/Environment filters)\n const optionByTitle = suggestionList.locator(`.yt-option[title=\"${optionName}\"]`);\n const optionByText = suggestionList.locator('.yt-option', { hasText: optionName });\n const gridOption = suggestionList.getByRole('rowgroup').getByText(optionName, { exact: false });\n let option;\n if (await optionByTitle.count()) {\n option = optionByTitle.first();\n } else if (await optionByText.count()) {\n option = optionByText.first();\n } else {\n option = gridOption.first();\n }\n await expect(option).toBeVisible();\n const iconCheckbox = option.locator('i.xl-icon.icon-s.checkbox');\n if (await iconCheckbox.count()) {\n await iconCheckbox.click();\n } else {\n await option.click();\n }\n await this.page.locator('body').click({ position: { x: 10, y: 10 } });\n await this.expectTagAdded(optionName);\n }\n\n private async waitForTableReady(): Promise<void> {\n // Poll until loading indicator is gone AND table content (rows or empty state) is present\n await expect(async () => {\n const loading = await this.getPane().getByText('Data loading').count();\n if (loading > 0) throw new Error('Still loading');\n const rows = await this.getTableBody().locator('tr').count();\n const noData = await this.getTableBody().locator('td.react-bs-table-no-data').count();\n if (rows === 0 && noData === 0) throw new Error('No table content yet');\n }).toPass({ timeout: 60000 });\n }\n\n private async openPageSizeMenu(): Promise<void> {\n const btn = this.getPagination().getByRole('toolbar').getByRole('button');\n const expanded = await btn.getAttribute('aria-expanded');\n if (expanded !== 'true') {\n await btn.click();\n await expect(this.getPagination().getByRole('menu')).toBeVisible();\n }\n }\n\n private async closePageSizeMenu(): Promise<void> {\n const btn = this.getPagination().getByRole('toolbar').getByRole('button');\n const expanded = await btn.getAttribute('aria-expanded');\n if (expanded === 'true') {\n await btn.click();\n await expect(this.getPagination().getByRole('menu')).toBeHidden();\n }\n }\n\n private async expectDateFieldValue(containerSelector: string, value: string): Promise<void> {\n const container = this.getPane().locator(containerSelector);\n const input = container.locator('input');\n if ((await input.count()) > 0) {\n await expect(input.first()).toHaveValue(value);\n return;\n }\n await expect(container).toHaveValue(value);\n }\n}\n","import { ExplorerPage } from '../explorerPage';\n\nexport class InfrastructureEditPermissionsPage extends ExplorerPage {\n /* Navigates to the Infrastructure Edit Permissions page via the tree context menu */\n async navigateToPage(): Promise<void> {\n await this.openRootContextMenu('Infrastructure');\n await this.page.getByRole('link', { name: 'Edit Permissions' }).click();\n }\n\n async navigateToInfraEditPermissionPage(): Promise<void> {\n await this.navigateToPage();\n }\n\n /* Gives the permissions to a role */\n async givePermissionsToRole(roleName: string): Promise<void> {\n const filter = this.page.getByPlaceholder('Filter by roles').first();\n await filter.waitFor({ state: 'visible' });\n await filter.scrollIntoViewIfNeeded();\n await filter.fill(roleName);\n const roleRow = this.page.locator('table.table-striped tbody tr').first();\n const checkboxes = roleRow.locator('input[type=\"checkbox\"]');\n const count = await checkboxes.count();\n for (let i = 0; i < count; i += 1) {\n const checkbox = checkboxes.nth(i);\n if (!(await checkbox.isChecked())) {\n await checkbox.check();\n }\n }\n await this.page.getByRole('button', { name: 'Save and close' }).click();\n await this.handleSaveToastOrAlreadyExists();\n }\n}\n","import { ExplorerPage } from '../explorerPage';\n\nexport class EnvironmentEditPermissionsPage extends ExplorerPage {\n /* Navigates to the Environments Edit Permissions page via the tree context menu */\n async navigateToPage(): Promise<void> {\n await this.openRootContextMenu('Environments');\n await this.page.getByRole('link', { name: 'Edit Permissions' }).click();\n }\n\n async navigateToEnvEditPermissionPage(): Promise<void> {\n await this.navigateToPage();\n }\n\n /* Gives the permissions to a role */\n async givePermissionsToRole(roleName: string): Promise<void> {\n const filter = this.page.getByPlaceholder('Filter by roles').first();\n await filter.waitFor({ state: 'visible' });\n await filter.scrollIntoViewIfNeeded();\n await filter.fill(roleName);\n const roleRow = this.page.locator('table.table-striped tbody tr').first();\n const labels = ['deploy initial', 'read', 'repo edit'];\n const headers = this.page.locator('table.table-striped thead th');\n const headerCount = await headers.count();\n const headerTexts: string[] = [];\n for (let i = 0; i < headerCount; i += 1) {\n headerTexts.push((await headers.nth(i).innerText()).trim().toLowerCase());\n }\n for (const label of labels) {\n const colIndex = headerTexts.findIndex((text) => text.includes(label));\n if (colIndex === -1) {\n throw new Error(`Permission column not found: ${label}`);\n }\n const checkbox = roleRow.locator('td').nth(colIndex).locator('input[type=\"checkbox\"]');\n if (!(await checkbox.isChecked())) {\n await checkbox.check();\n }\n }\n await this.page.getByRole('button', { name: 'Save and close' }).click();\n await this.handleSaveToastOrAlreadyExists();\n }\n}\n","import { ExplorerPage } from '../explorerPage';\n\nexport class ApplicationEditPermissionsPage extends ExplorerPage {\n /* Navigates to the Applications Edit Permissions page via the tree context menu */\n async navigateToPage(): Promise<void> {\n await this.openRootContextMenu('Applications');\n await this.page.getByRole('link', { name: 'Edit Permissions' }).click();\n }\n\n async navigateToAppEditPermissionPage(): Promise<void> {\n await this.navigateToPage();\n }\n\n /* Gives the permissions to a role */\n async givePermissionsToRole(roleName: string): Promise<void> {\n const filter = this.page.getByPlaceholder('Filter by roles').first();\n await filter.waitFor({ state: 'visible' });\n await filter.scrollIntoViewIfNeeded();\n await filter.fill(roleName);\n const roleRow = this.page.locator('table.table-striped tbody tr').first();\n const labels = ['read', 'repo edit'];\n const headers = this.page.locator('table.table-striped thead th');\n const headerCount = await headers.count();\n const headerTexts: string[] = [];\n for (let i = 0; i < headerCount; i += 1) {\n headerTexts.push((await headers.nth(i).innerText()).trim().toLowerCase());\n }\n for (const label of labels) {\n const colIndex = headerTexts.findIndex((text) => text.includes(label));\n if (colIndex === -1) {\n throw new Error(`Permission column not found: ${label}`);\n }\n const checkbox = roleRow.locator('td').nth(colIndex).locator('input[type=\"checkbox\"]');\n if (!(await checkbox.isChecked())) {\n await checkbox.check();\n }\n }\n await this.page.getByRole('button', { name: 'Save and close' }).click();\n await this.handleSaveToastOrAlreadyExists();\n }\n}\n","import { expect } from '@playwright/test';\nimport type { Page } from '@playwright/test';\nimport { WithPage } from './withPage';\n\nexport class LoginPage extends WithPage {\n /* Login with username and password*/\n async login(userName: string, password: string, pageOverride?: Page): Promise<void> {\n const p = pageOverride ?? this.page;\n await p.goto('/#/login');\n await expect(p).toHaveTitle('Digital.ai Deploy');\n await p.getByPlaceholder('user').fill(userName, { timeout: 10000 });\n await p.getByPlaceholder('Password').fill(password, { timeout: 10000 });\n await p.getByRole('button', { name: 'Log in' }).click({ timeout: 10000 });\n }\n\n /* Verify invalid password message */\n async verifyInvalidPasswordMessage(): Promise<void> {\n const errorMessage = this.page.getByText('The username and/or password you have entered is incorrect.');\n await expect(errorMessage).toBeVisible();\n }\n /* Verify the error message shown when a disabled user attempts to log in */\n async verifyDisabledUserLoginError(pageOverride?: Page): Promise<void> {\n const p = pageOverride ?? this.page;\n const errorMessage = p.getByText(\n 'Your account is currently disabled. Please contact your Deploy administrator for further assistance.',\n );\n await expect(errorMessage).toBeVisible();\n }\n\n /* Verify the error message shown when a user without login permission attempts to log in */\n async verifyNoLoginPermissionError(pageOverride?: Page): Promise<void> {\n const p = pageOverride ?? this.page;\n const errorMessage = p.locator('div.error-message.permission-error');\n await expect(errorMessage).toBeVisible({ timeout: 20000 });\n }\n\n /* Logout as authenticated user */\n async logout(): Promise<void> {\n await this.page.locator('button.dot-avatar').click();\n await this.page.getByText('Log out', { exact: true }).click();\n await this.page.waitForURL('**/#/login', { timeout: 15000 });\n await this.page.reload();\n await this.page.waitForLoadState('networkidle');\n await this.page.waitForURL('**/#/login', { timeout: 15000 });\n await this.page.getByPlaceholder('user').waitFor({ state: 'visible', timeout: 15000 });\n }\n}\n"],"names":[],"version":3,"file":"main.js.map"}
|
|
1
|
+
{"mappings":"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","sources":["apps/deploy/index.ts","apps/deploy/fixtures/index.ts","apps/deploy/pages/index.ts","apps/deploy/pages/explorerPage.ts","apps/deploy/pages/withPage.ts","apps/deploy/pages/homePage.ts","apps/deploy/pages/usersPage.ts","apps/deploy/pages/infrastructure/overthereLocalHostPage.ts","apps/deploy/pages/environments/environmentsPage.ts","apps/deploy/pages/applications/applicationsPage.ts","apps/deploy/pages/configuration/gitopsConfigurationPage.ts","apps/deploy/pages/reports/reportsPage.ts","apps/deploy/pages/reports/reportsControlTasksPage.ts","apps/deploy/pages/reports/reportsDashboardPage.ts","apps/deploy/pages/reports/reportsDeploymentsPage.ts","apps/deploy/pages/infrastructure/infrastructureEditPermissionsPage.ts","apps/deploy/pages/environments/environmentEditPermissionsPage.ts","apps/deploy/pages/applications/applicationEditPermissionsPage.ts","apps/deploy/pages/configuration/configurationEditPermissionsPage.ts","apps/deploy/pages/loginPage.ts"],"sourcesContent":["export { test } from './fixtures';\n","import { test as base, Page } from '@playwright/test';\nimport { Navigation } from '../pages';\nimport { LoginPage } from '../pages/loginPage';\n\ntype DeployFixtures = {\n fixtures: Fixtures;\n loginPage: LoginPage;\n navigation: Navigation;\n};\n\nexport const test = base.extend<DeployFixtures>({\n fixtures: async ({ page }, use) => {\n const fixtures = new Fixtures(page);\n await use(fixtures);\n return fixtures;\n },\n loginPage: async ({ page }, use) => {\n const loginPage = new LoginPage(page);\n await use(loginPage);\n return loginPage;\n },\n navigation: async ({ page }, use) => {\n const navigationPage = new Navigation(page);\n await use(navigationPage);\n return navigationPage;\n },\n});\n\nclass Fixtures {\n private readonly page: Page;\n\n constructor(page: Page) {\n this.page = page;\n }\n}\n","import { Page } from '@playwright/test';\nimport { ExplorerPage } from './explorerPage';\nimport { HomePage } from './homePage';\nimport { UserPage } from './usersPage';\nimport { OverthereLocalHostPage } from './infrastructure/overthereLocalHostPage';\nimport { EnvironmentsPage } from './environments/environmentsPage';\nimport { ApplicationsPage } from './applications/applicationsPage';\nimport { GitopsConfigurationPage } from './configuration/gitopsConfigurationPage';\nimport { ReportsPage } from './reports/reportsPage';\nimport { ReportsControlTasksPage } from './reports/reportsControlTasksPage';\nimport { ReportsDashboardPage } from './reports/reportsDashboardPage';\nimport { ReportsDeploymentsPage } from './reports/reportsDeploymentsPage';\nimport { InfrastructureEditPermissionsPage } from './infrastructure/infrastructureEditPermissionsPage';\nimport { EnvironmentEditPermissionsPage } from './environments/environmentEditPermissionsPage';\nimport { ApplicationEditPermissionsPage } from './applications/applicationEditPermissionsPage';\nimport { ConfigurationEditPermissionsPage } from './configuration/configurationEditPermissionsPage';\n\nexport class Navigation extends ExplorerPage {\n homePage: HomePage;\n userPage: UserPage;\n overthereLocalHostPage: OverthereLocalHostPage;\n environmentsPage: EnvironmentsPage;\n applicationsPage: ApplicationsPage;\n reportsPage: ReportsPage;\n reportsControlTasksPage: ReportsControlTasksPage;\n reportsDashboardPage: ReportsDashboardPage;\n reportsDeploymentsPage: ReportsDeploymentsPage;\n infrastructureEditPermissionsPage: InfrastructureEditPermissionsPage;\n environmentEditPermissionsPage: EnvironmentEditPermissionsPage;\n applicationEditPermissionsPage: ApplicationEditPermissionsPage;\n configurationEditPermissionsPage: ConfigurationEditPermissionsPage;\n gitopsConfigurationPage: GitopsConfigurationPage;\n\n constructor(page: Page) {\n super(page);\n this.homePage = new HomePage(page);\n this.userPage = new UserPage(page);\n this.overthereLocalHostPage = new OverthereLocalHostPage(page);\n this.environmentsPage = new EnvironmentsPage(page);\n this.applicationsPage = new ApplicationsPage(page);\n this.reportsPage = new ReportsPage(page);\n this.reportsControlTasksPage = new ReportsControlTasksPage(page);\n this.reportsDashboardPage = new ReportsDashboardPage(page);\n this.reportsDeploymentsPage = new ReportsDeploymentsPage(page);\n this.infrastructureEditPermissionsPage = new InfrastructureEditPermissionsPage(page);\n this.environmentEditPermissionsPage = new EnvironmentEditPermissionsPage(page);\n this.applicationEditPermissionsPage = new ApplicationEditPermissionsPage(page);\n this.configurationEditPermissionsPage = new ConfigurationEditPermissionsPage(page);\n this.gitopsConfigurationPage = new GitopsConfigurationPage(page);\n }\n\n async navigateToHomePage(): Promise<void> {\n await this.page.goto('/home');\n }\n\n async navigateToUserPage(): Promise<void> {\n await this.page.locator('p.MuiTypography-root', { hasText: 'User management' }).click();\n }\n\n async clickCollapseSideView(): Promise<void> {\n const collapseButton = this.page.getByTestId('back-button');\n await collapseButton.click();\n }\n}\n","import { expect } from '@playwright/test';\nimport { WithPage } from './withPage';\n\nexport class ExplorerPage extends WithPage {\n protected async handleSaveToastOrAlreadyExists(): Promise<void> {\n const toastMessage = this.page.locator('.redux-toastr .rrt-text:visible');\n try {\n await toastMessage.waitFor({ state: 'visible', timeout: 10000 });\n } catch {\n // No toast appeared — assume the operation succeeded silently (e.g. fast CI environments).\n return;\n }\n const toastText = (await toastMessage.textContent())?.trim() ?? '';\n if (toastText === 'Your change was saved.') {\n return;\n }\n if (/already exists/i.test(toastText)) {\n const cancelButton = this.page.getByRole('button', { name: 'Cancel' });\n if (await cancelButton.isVisible()) {\n await cancelButton.click();\n } else {\n await this.page.locator('i.xl-icon.close-icon').first().click();\n }\n return;\n }\n await expect(toastMessage).toHaveText('Your change was saved.');\n }\n\n protected async openRootContextMenu(rootId: string): Promise<void> {\n await this.closeModalIfPresent();\n await this.ensureExplorerTreeReady();\n\n const rootTitle = this.page.locator(`span[data-id=\"${rootId}\"]`);\n await rootTitle.scrollIntoViewIfNeeded();\n await rootTitle.click();\n\n const menuButton = this.page.locator(`i.context-menu-button[data-id=\"${rootId}\"]`);\n await menuButton.scrollIntoViewIfNeeded();\n\n for (let attempt = 0; attempt < 3; attempt += 1) {\n try {\n await menuButton.click({ force: true });\n return;\n } catch {\n if (attempt === 2) {\n throw new Error(`Failed to open context menu for ${rootId}`);\n }\n await this.page.waitForTimeout(300);\n }\n }\n }\n\n protected async ensureExplorerTreeReady(): Promise<void> {\n const applicationsRoot = this.page.locator('div[data-id=\"Applications\"]');\n try {\n await applicationsRoot.waitFor({ state: 'visible', timeout: 3000 });\n return;\n } catch {\n // Fall through to open Explorer.\n }\n\n const explorerCandidates = [\n this.page.locator('p.MuiTypography-root', { hasText: 'Explorer' }),\n this.page.getByRole('link', { name: 'Explorer' }),\n this.page.getByRole('button', { name: 'Explorer' }),\n ];\n\n for (const candidate of explorerCandidates) {\n try {\n if ((await candidate.count()) > 0) {\n await candidate.first().click({ timeout: 10000 });\n break;\n }\n } catch {\n // Try next candidate.\n }\n }\n\n await applicationsRoot.waitFor({ state: 'visible', timeout: 10000 });\n }\n\n protected async closeModalIfPresent(): Promise<void> {\n const modal = this.page.locator('div.xl-react-widget-modal-dialog.in');\n if ((await modal.count()) === 0) {\n return;\n }\n\n if (!(await modal.first().isVisible())) {\n return;\n }\n\n const cancelButton = modal.getByRole('button', { name: 'Cancel' }).first();\n if (await cancelButton.isVisible()) {\n await cancelButton.click();\n } else {\n const closeIcon = modal.locator('i.xl-icon.close-icon').first();\n if (await closeIcon.isVisible()) {\n await closeIcon.click();\n }\n }\n\n try {\n await this.page.locator('body.xl-react-modal-open').waitFor({ state: 'hidden', timeout: 10000 });\n } catch {\n // Modal may already be closing.\n }\n }\n}\n","import { Page } from '@playwright/test';\n\nexport class WithPage {\n protected readonly page: Page;\n\n constructor(page: Page) {\n this.page = page;\n }\n}\n","import { expect } from '@playwright/test';\nimport { WithPage } from './withPage';\n\nexport class HomePage extends WithPage {\n async clickUserManagement(): Promise<void> {\n await this.page.locator('p.MuiTypography-root', { hasText: 'User management' }).click();\n await this.page.getByRole('link', { name: 'Users' }).click();\n }\n\n async clickExplorer(): Promise<void> {\n await this.page.locator('p.MuiTypography-root', { hasText: 'Explorer' }).click();\n }\n\n async verifyDeployLogoIsPresent(): Promise<void> {\n const logo = this.page.getByAltText('Deploy');\n await expect(logo).toBeVisible();\n }\n\n async verifyDeployTextIsPresent(): Promise<void> {\n const title = this.page.getByTitle('digital.ai');\n await expect(title).toBeVisible();\n }\n\n async clickReports(): Promise<void> {\n await this.page.locator('p.MuiTypography-root', { hasText: 'Reports' }).click();\n }\n\n async verifyReportsOnlyAccess(): Promise<void> {\n const sidebar = this.page.locator('.dot-sidebar');\n await expect(sidebar.getByText('Reports', { exact: true })).toBeVisible();\n await expect(sidebar.getByText('Explorer', { exact: true })).toBeVisible();\n await expect(sidebar.getByText('Rules and Macros', { exact: true })).toHaveCount(0);\n await expect(sidebar.getByText('Gitops', { exact: true })).toHaveCount(0);\n await expect(sidebar.getByText('Local sources', { exact: true })).toHaveCount(0);\n await expect(sidebar.getByText('Plugins', { exact: true })).toHaveCount(0);\n await expect(sidebar.getByText('User management', { exact: true })).toHaveCount(0);\n }\n\n async verifyNoCiDataVisible(): Promise<void> {\n await expect(this.page.getByText('LocalHost', { exact: true })).toHaveCount(0);\n await expect(this.page.getByText('LocalEnv', { exact: true })).toHaveCount(0);\n await expect(this.page.getByText('App', { exact: true })).toHaveCount(0);\n }\n}\n","import { expect } from '@playwright/test';\nimport { WithPage } from './withPage';\n\nexport class UserPage extends WithPage {\n private async openUsersTab(): Promise<void> {\n await this.page.locator('p.MuiTypography-root', { hasText: 'Users' }).click();\n }\n\n private async waitForToastIfPresent(timeoutVisible = 3000, timeoutHidden = 5000): Promise<void> {\n const toast = this.page.getByRole('alertdialog');\n try {\n await toast.waitFor({ state: 'visible', timeout: timeoutVisible });\n await toast.waitFor({ state: 'hidden', timeout: timeoutHidden });\n } catch {\n // Toast is transient; skip if it doesn't appear.\n }\n }\n\n private async waitForModalCloseIfPresent(): Promise<void> {\n try {\n await this.page.locator('input[name=\"username\"]').waitFor({ state: 'hidden', timeout: 5000 });\n await this.page.locator('body.xl-react-modal-open').waitFor({ state: 'hidden', timeout: 5000 });\n await this.page.waitForLoadState('networkidle');\n } catch {\n // When user already exists, modal stays open; caller handles error toast.\n }\n }\n\n private async openGlobalPermissions(): Promise<void> {\n await this.page.getByRole('link', { name: 'Global permissions' }).click();\n }\n\n private async filterRoleInPermissions(roleName: string): Promise<import('@playwright/test').Locator> {\n const filter = this.page.locator('input[placeholder=\"Filter by roles\"]:visible');\n await filter.waitFor({ state: 'visible' });\n await expect(filter).toBeEditable();\n await filter.fill('');\n await filter.fill(roleName);\n await expect(filter).toHaveValue(roleName);\n await filter.press('Enter');\n await this.page.getByRole('button', { name: 'Refresh' }).click();\n await this.page.waitForLoadState('networkidle');\n await this.page.locator('table tbody tr:visible').first().waitFor({ state: 'visible' });\n const escapedRoleName = roleName.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const roleCell = this.page\n .locator('td.permissions-pagination-table-component-role:visible')\n .filter({ hasText: new RegExp(`^\\\\s*${escapedRoleName}\\\\s*$`) })\n .first();\n await expect(roleCell).toBeVisible();\n return roleCell.locator('xpath=ancestor::tr');\n }\n\n /* Create a new user */\n async createNewUser(username: string, email: string, password: string): Promise<void> {\n await this.openUsersTab();\n await this.page.getByRole('button', { name: 'Add user' }).click();\n const usernameInput = this.page.locator('input[name=\"username\"]');\n await usernameInput.waitFor({ state: 'visible' });\n await usernameInput.fill(username);\n await this.page.locator('input[name=\"fullName\"]').fill(username);\n await this.page.locator('input[name=\"email\"]').fill(email);\n const passwordInput = this.page.locator('input[name=\"password\"]');\n const confirmInput = this.page.locator('input[name=\"confirmPassword\"]');\n await passwordInput.waitFor({ state: 'visible' });\n await passwordInput.click({ force: true });\n await passwordInput.fill(password);\n await confirmInput.fill(password);\n const saveButton = this.page.getByRole('button', { name: 'Save' });\n try {\n await expect(saveButton).toBeEnabled({ timeout: 5000 });\n } catch {\n await passwordInput.fill('');\n await confirmInput.fill('');\n await passwordInput.type(password, { delay: 50 });\n await confirmInput.type(password, { delay: 50 });\n await expect(saveButton).toBeEnabled({ timeout: 5000 });\n }\n await saveButton.click();\n await this.waitForToastIfPresent();\n await this.waitForModalCloseIfPresent();\n }\n\n /* Verify success message */\n async verifySuccessMessage(): Promise<void> {\n const successMessage = this.page.getByRole('alertdialog');\n try {\n await successMessage.waitFor({ state: 'visible', timeout: 3000 });\n } catch {\n // Toast never appeared — skip silently.\n return;\n }\n await expect(successMessage).toHaveText(/User \".*\" created/i);\n }\n\n /* Verify user error message */\n async verifyUserErrorMessage(): Promise<void> {\n const errorToast = this.page.locator('.rrt-middle-container[role=\"alertdialog\"]').nth(1);\n try {\n await errorToast.waitFor({ state: 'visible', timeout: 3000 });\n } catch {\n // Toast is transient; skip if it never appears.\n return;\n }\n await expect(errorToast).toContainText(/already in use/i);\n }\n\n /* Delete the user and verify it is deleted */\n async deleteTheUserAndVerifyItIsDeleted(username: string): Promise<void> {\n await this.openUsersTab();\n const filter = this.page.getByPlaceholder('Filter...');\n await filter.fill(username);\n await filter.press('Enter');\n const escapedUsername = username.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const userRow = this.page.getByRole('row', { name: new RegExp(`\\\\b${escapedUsername}\\\\b`) }).first();\n await userRow.waitFor({ state: 'visible' });\n await userRow.locator('button.delete.xl-icon.table-action').click();\n const confirmDialog = this.page\n .locator('.xl-react-widget-modal-dialog.in:visible')\n .filter({ hasText: /Delete user/i })\n .first();\n await confirmDialog.waitFor({ state: 'visible' });\n await confirmDialog.getByRole('button', { name: 'Delete', exact: true }).click();\n await confirmDialog.waitFor({ state: 'hidden' });\n const deleteToast = this.page.getByRole('alertdialog').filter({ hasText: /deleted/i });\n await expect(deleteToast).toHaveText(/User \".*\" deleted/i);\n await deleteToast.waitFor({ state: 'hidden' });\n await userRow.waitFor({ state: 'detached' });\n }\n\n /* Edit the user and verify the changes */\n async editUserAndVerify(username: string, editfullname: string): Promise<void> {\n await this.openUsersTab();\n const filter = this.page.getByPlaceholder('Filter...');\n await filter.fill(username);\n await filter.press('Enter');\n const escapedUsername = username.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const userRow = this.page.getByRole('row', { name: new RegExp(`\\\\b${escapedUsername}\\\\b`) }).first();\n await userRow.waitFor({ state: 'visible' });\n await userRow.locator('i.icon-edit.dot-i').click();\n await this.page.locator('input[name=\"fullName\"]').fill(editfullname);\n const passwordInput = this.page.locator('input[name=\"password\"]');\n const confirmInput = this.page.locator('input[name=\"confirmPassword\"]');\n if (await passwordInput.count()) {\n await passwordInput.click({ force: true });\n await passwordInput.press(process.platform === 'darwin' ? 'Meta+A' : 'Control+A');\n await passwordInput.press('Backspace');\n }\n if (await confirmInput.count()) {\n await confirmInput.click({ force: true });\n await confirmInput.press(process.platform === 'darwin' ? 'Meta+A' : 'Control+A');\n await confirmInput.press('Backspace');\n }\n const saveButton = this.page.getByRole('button', { name: 'Save', exact: true });\n await expect(saveButton).toBeEnabled({ timeout: 5000 });\n await saveButton.click();\n const editToast = this.page.getByRole('alertdialog').filter({ hasText: 'Your change was saved' });\n await expect(editToast).toBeVisible();\n }\n\n /* Disable the user by toggling the login permission checkbox */\n async disableUser(username: string): Promise<void> {\n await this.openUsersTab();\n const filter = this.page.getByPlaceholder('Filter...');\n await filter.fill(username);\n await filter.press('Enter');\n const escapedUsername = username.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const userRow = this.page.getByRole('row', { name: new RegExp(`\\\\b${escapedUsername}\\\\b`) }).first();\n await userRow.waitFor({ state: 'visible' });\n const checkbox = userRow.getByRole('checkbox');\n await checkbox.click();\n await expect(checkbox).not.toBeChecked();\n }\n\n /* Revoke login permission for a role via Global permissions */\n async revokeLoginPermission(roleName: string): Promise<void> {\n await this.openGlobalPermissions();\n const roleRow = await this.filterRoleInPermissions(roleName);\n const normalizedRoleName = roleName.replace(/\\s+/g, '_');\n const loginCheckbox = roleRow.locator(\n `td.permissions-pagination-table-component-${normalizedRoleName}-4 input[type=\"checkbox\"]`,\n );\n const saveButton = this.page.getByRole('button', { name: 'Save' });\n if ((await loginCheckbox.isVisible()) && (await loginCheckbox.isChecked())) {\n await loginCheckbox.uncheck();\n await saveButton.click();\n const saveMessage = this.page.getByRole('alertdialog');\n await expect(saveMessage).toContainText('Your change was saved');\n return;\n }\n if (await saveButton.isVisible()) {\n await expect(saveButton).toBeDisabled();\n }\n }\n\n /* Grant only login and report view permissions for a role */\n async grantOnlyLoginAndReportPermissions(roleName: string): Promise<void> {\n await this.openGlobalPermissions();\n const roleRow = await this.filterRoleInPermissions(roleName);\n const checkboxes = roleRow.locator('input[type=\"checkbox\"]');\n const count = await checkboxes.count();\n for (let i = 0; i < count; i += 1) {\n const checkbox = checkboxes.nth(i);\n if (await checkbox.isChecked()) {\n await checkbox.uncheck();\n }\n }\n await roleRow.locator(`td.permissions-pagination-table-component-${roleName}-4 input[type=\"checkbox\"]`).check();\n await roleRow.locator(`td.permissions-pagination-table-component-${roleName}-5 input[type=\"checkbox\"]`).check();\n await this.page.getByRole('button', { name: 'Save' }).click();\n const saveMessage = this.page.getByRole('alertdialog');\n await expect(saveMessage).toContainText('Your change was saved');\n }\n\n /* Create a role and assign a principal to it */\n async createRoleAndAssignUser(roleName: string, principal: string): Promise<void> {\n await this.page.getByRole('link', { name: 'Roles' }).click();\n await this.page.getByPlaceholder('Filter by roles').first().waitFor({ state: 'visible' });\n await this.page.locator('body.xl-react-modal-open').waitFor({ state: 'hidden' });\n await this.page.getByRole('button', { name: 'Add role' }).click();\n const roleDialog = this.page.locator('.add-edit-role-component');\n await roleDialog.waitFor({ state: 'visible' });\n await roleDialog.locator('input[name=\"name\"]').fill(roleName);\n const principalsInput = roleDialog.locator('input.react-tagsinput-input');\n await principalsInput.fill(principal);\n await principalsInput.press('Enter');\n await roleDialog.getByRole('button', { name: 'Save' }).click();\n const saveMessage = this.page.getByRole('alertdialog');\n await expect(saveMessage).toHaveText(/Role \".*\" created/);\n await saveMessage.waitFor({ state: 'hidden' });\n await roleDialog.waitFor({ state: 'hidden' });\n }\n\n /* Delete a role by name */\n async deleteRole(roleName: string): Promise<void> {\n await this.page.getByRole('link', { name: 'Roles' }).click();\n const filter = this.page.getByPlaceholder('Filter by roles').first();\n await filter.fill(roleName);\n await filter.press('Enter');\n const escapedRoleName = roleName.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const roleRow = this.page\n .locator('td.roles-table-name')\n .filter({ hasText: new RegExp(`^\\\\s*${escapedRoleName}\\\\s*$`) })\n .first()\n .locator('xpath=ancestor::tr');\n await roleRow.waitFor({ state: 'visible' });\n await roleRow.locator('button.delete.table-action').click();\n const confirmDelete = this.page.getByRole('button', { name: 'Delete', exact: true });\n if (await confirmDelete.isVisible()) {\n await confirmDelete.click();\n }\n }\n}\n","import { ExplorerPage } from '../explorerPage';\n\nexport class OverthereLocalHostPage extends ExplorerPage {\n /* Helps to navigate to the Overthere LocalHost page */\n async navigateToOverthereLocalHostPage(): Promise<void> {\n await this.openRootContextMenu('Infrastructure');\n await this.page.getByRole('link', { name: 'New' }).click();\n await this.page.getByRole('link', { name: 'overthere' }).click();\n await this.page.getByRole('link', { name: 'LocalHost' }).click();\n }\n\n /* Opens the New > overthere > LocalHost form from the Infrastructure tree context menu */\n async openNewLocalHost(): Promise<void> {\n await this.closeModalIfPresent();\n await this.ensureExplorerTreeReady();\n\n const infrastructureRoot = this.page.locator('span[data-id=\"Infrastructure\"]');\n await infrastructureRoot.scrollIntoViewIfNeeded();\n await infrastructureRoot.click();\n\n const contextMenu = this.page.locator('i.context-menu-button[data-id=\"Infrastructure\"]');\n await contextMenu.scrollIntoViewIfNeeded();\n await contextMenu.click({ force: true });\n\n await this.page.getByRole('link', { name: 'New' }).click();\n await this.page.getByRole('link', { name: 'overthere' }).click();\n await this.page.getByRole('link', { name: 'LocalHost' }).click();\n }\n\n async openInfrastructureNewLocalHost(): Promise<void> {\n await this.openNewLocalHost();\n }\n\n /* Helps to create a LocalHost of type UNIX/Windows/Zos */\n async createHostForGivenType(name: string, type: string): Promise<void> {\n await this.page.locator('input[name=\"name\"]').fill(name);\n await this.page.locator('label:has-text(\"Operating system\")').locator('xpath=following::input[1]').click();\n await this.page.getByText(type, { exact: true }).click();\n await this.page.getByRole('button', { name: 'Save and close' }).click();\n await this.handleSaveToastOrAlreadyExists();\n }\n\n /**\n * Runs the \"Check connection\" control task on the given host node once.\n * Expects the deployment plan page, executes it, waits for EXECUTED state, then finishes.\n * @param hostDataId The full tree data-id, e.g. \"Infrastructure/MyHost\"\n */\n async runCheckConnection(hostDataId: string): Promise<void> {\n // Ensure the tree node is visible by expanding Infrastructure if needed\n const infraToggle = this.page.locator('div[data-id=\"Infrastructure\"] .infinite-tree-node > a');\n const hostNode = this.page.locator(`span[data-id=\"${hostDataId}\"]`);\n\n for (let attempt = 0; attempt < 3; attempt += 1) {\n if ((await hostNode.count()) > 0 && (await hostNode.isVisible())) {\n break;\n }\n await infraToggle.click();\n await this.page.waitForTimeout(500);\n }\n\n // Hover host node to reveal context menu button\n //await hostNode.scrollIntoViewIfNeeded();\n await hostNode.hover();\n\n const ctxBtn = this.page.locator(`i.context-menu-button[data-id=\"${hostDataId}\"]`);\n await ctxBtn.waitFor({ state: 'visible', timeout: 5000 });\n await ctxBtn.click({ force: true });\n\n // Click \"Check connection\" in the context menu\n await this.page.getByRole('link', { name: 'Check connection' }).click();\n\n // Wait for the deployment plan panel and execute\n await this.page\n .locator('.xl-react-widget-modal-dialog button.deploy.xl-primary, button.xl-primary:has-text(\"Execute\")')\n .first()\n .waitFor({ state: 'visible', timeout: 10000 });\n await this.page\n .locator('.xl-react-widget-modal-dialog button.deploy.xl-primary, button.xl-primary:has-text(\"Execute\")')\n .first()\n .click();\n\n // Wait for EXECUTED status\n const executedLabel = this.page.locator('span.label', { hasText: 'EXECUTED' }).first();\n await executedLabel.waitFor({ state: 'visible', timeout: 30000 });\n\n // Finish\n const finishButton = this.page.locator('button.finish.xl-primary, button:has-text(\"Finish\")').first();\n if (await finishButton.isVisible()) {\n await finishButton.click();\n }\n\n // Wait for modal/plan to close\n const modal = this.page.locator('div.xl-react-widget-modal-dialog.in');\n if ((await modal.count()) > 0) {\n await modal.first().waitFor({ state: 'hidden', timeout: 15000 });\n }\n }\n}\n","import { ExplorerPage } from '../explorerPage';\n\nexport class EnvironmentsPage extends ExplorerPage {\n /* Helps to navigate to the Environments page */\n async navigateToEnvironmentsPage(): Promise<void> {\n await this.ensureExplorerTreeReady();\n }\n\n /* Helps to create a new Environment */\n async createEnvironment(environmentName: string, hostName: string, dictionaryName: string): Promise<void> {\n await this.openRootContextMenu('Environments');\n await this.page.getByRole('link', { name: 'New' }).click();\n await this.page.getByRole('link', { name: 'Environment' }).click();\n await this.page.locator('input[name=\"name\"]').fill(environmentName);\n await this.page.locator('i.xl-icon.arrow-down-icon.show-all').nth(0).click();\n await this.page.getByTitle(`Infrastructure/${hostName}`, { exact: true }).click();\n await this.page.locator('i.xl-icon.arrow-down-icon.show-all').nth(1).click();\n await this.page.getByTitle(`Environments/${dictionaryName}`, { exact: true }).click();\n await this.page.getByRole('button', { name: 'Save and close' }).click();\n await this.handleSaveToastOrAlreadyExists();\n }\n\n /* Creates a new udm.Dictionary under Environments with entry usr=admin */\n async createDictionary(dictionaryName: string): Promise<void> {\n await this.openRootContextMenu('Environments');\n await this.page.getByRole('link', { name: 'New' }).click();\n await this.page.getByRole('link', { name: 'Dictionary', exact: true }).click();\n\n await this.page.locator('input[name=\"name\"]').fill(dictionaryName);\n\n // Type the key in the Entries field and press Enter to create the row\n // (The hint text \"Search or create a new key/value\" is a div, not a real placeholder)\n const entriesInput = this.page.getByRole('textbox').nth(3);\n await entriesInput.fill('usr');\n await entriesInput.press('Enter');\n\n // Fill the value field that appears after the key is created\n await this.page.getByRole('textbox', { name: 'Add value...' }).fill('admin');\n\n await this.page.getByRole('button', { name: 'Save and close' }).click();\n await this.handleSaveToastOrAlreadyExists();\n }\n}\n","import { expect, Page } from '@playwright/test';\nimport { ExplorerPage } from '../explorerPage';\n\nexport class ApplicationsPage extends ExplorerPage {\n taskId!: string;\n executedText!: string;\n\n constructor(page: Page) {\n super(page);\n }\n\n /* Helps to navigate to the Applications page */\n async navigateToApplicationsPage(): Promise<void> {\n await this.openRootContextMenu('Applications');\n await this.page.getByRole('link', { name: 'New' }).click();\n await this.page.getByRole('link', { name: 'Application' }).click();\n }\n\n /* Creates a new application */\n async createNewApplication(applicationName: string): Promise<void> {\n if (await this.nodeExists(`Applications/${applicationName}`)) {\n return;\n }\n await this.openRootContextMenu('Applications');\n await this.page.getByRole('link', { name: 'New' }).click();\n await this.page.getByRole('link', { name: 'Application' }).click();\n await this.page.locator('input[name=\"name\"]').waitFor({ state: 'visible' });\n await this.page.locator('input[name=\"name\"]').click();\n await this.page.locator('input[name=\"name\"]').fill(applicationName);\n await this.page.getByRole('button', { name: 'Save and close' }).click();\n await this.page.locator('input[name=\"name\"]').waitFor({ state: 'hidden', timeout: 5000 });\n await this.handleSaveToastOrAlreadyExists();\n await this.waitForApplicationNode(applicationName);\n }\n\n /* Creates a new deployment package */\n async createNewDeploymentPackage(applicationName: string, packageName: string): Promise<void> {\n const appDataId = `Applications/${applicationName}`;\n const packageDataId = `Applications/${applicationName}/${packageName}`;\n\n if (await this.nodeExists(packageDataId)) {\n return;\n }\n\n // Expand Applications\n await this.ensureExplorerTreeReady();\n await this.waitForApplicationNode(applicationName);\n\n // Hover over app node\n const appNode = this.page.locator(`span[data-id=\"${appDataId}\"]`);\n await expect(appNode).toBeVisible();\n await appNode.scrollIntoViewIfNeeded();\n await appNode.hover();\n\n // Open context menu + create new deployment package\n const contextMenu = this.page.locator(`i.context-menu-button[data-id=\"${appDataId}\"]`);\n await expect(contextMenu).toBeVisible();\n await contextMenu.click();\n\n await this.page.getByRole('link', { name: 'New' }).click();\n await this.page.getByRole('link', { name: 'Deployment Package' }).click();\n\n // Fill & save\n const nameInput = this.page.locator('input[name=\"name\"]');\n await nameInput.fill(packageName);\n\n await this.page.getByRole('button', { name: 'Save and close' }).click();\n await nameInput.waitFor({ state: 'hidden', timeout: 5000 });\n\n await this.handleSaveToastOrAlreadyExists();\n await this.waitForPackageNode(applicationName, packageName);\n }\n\n /* Creates a new command application */\n async createNewCmdApplication(values: string[]): Promise<void> {\n const appDataId = `Applications/${values[0]}`;\n const packageDataId = `Applications/${values[0]}/${values[1]}`;\n const commandDataId = `Applications/${values[0]}/${values[1]}/${values[2]}`;\n\n if (await this.nodeExists(commandDataId)) {\n return;\n }\n\n // Expand app node and click package\n await this.ensureExplorerTreeReady();\n await this.waitForApplicationNode(values[0]);\n await this.waitForPackageNode(values[0], values[1]);\n await this.page.locator(`div[data-id=\"${appDataId}\"] .infinite-tree-node > a`).click();\n await this.clickPackageNodeWithRetry(packageDataId);\n\n // Open context menu\n const packageMenu = this.page.locator(`i.context-menu-button[data-id=\"${packageDataId}\"]`);\n await expect(packageMenu).toBeVisible();\n await packageMenu.click();\n\n // Create Command application\n await this.page.getByRole('link', { name: 'New' }).click();\n await this.page.getByRole('link', { name: 'cmd' }).click();\n await this.page.getByRole('link', { name: 'Command' }).click();\n\n await this.page.locator('input[name=\"name\"]').fill(values[2]);\n\n await this.page.locator('textarea[name=\"commandLine\"]').fill(values[3]);\n\n // Some server configs default username to {{usr}} placeholder. Use evaluate to\n // set value directly on DOM + fire React's change event, bypassing visibility checks.\n await this.page.evaluate(() => {\n const inputs = Array.from(document.querySelectorAll('input[name=\"username\"]')) as HTMLInputElement[];\n const setter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value')?.set;\n for (const input of inputs) {\n setter?.call(input, 'admin');\n input.dispatchEvent(new Event('input', { bubbles: true }));\n input.dispatchEvent(new Event('change', { bubbles: true }));\n }\n });\n\n const saveBtn = this.page.locator('button', { hasText: /^Save$/ }).first();\n await expect(saveBtn).toBeEnabled();\n await saveBtn.click();\n await this.page.waitForTimeout(3000);\n\n await this.handleSaveToastOrAlreadyExists();\n\n // Close dialog\n await this.page.locator('i.xl-icon.close-icon').first().click();\n }\n\n /*Deploy the application*/\n async deployApp(values: string[]): Promise<void> {\n const versionNode = `Applications/${values[0]}/${values[1]}`;\n await this.ensureExplorerTreeReady();\n await this.waitForPackageNode(values[0], values[1]);\n await this.openPackageMenuWithRetry(versionNode);\n await this.page.getByRole('link', { name: 'Deploy', exact: true }).click();\n await this.page.locator(`input[name=\"selections\"][value=\"Environments/${values[2]}\"]`).click();\n await this.page.getByRole('button', { name: 'Continue' }).click();\n\n // Wait for the deployment properties wizard to fully load and evaluate validation rules\n await this.page.locator('.errors-wrapper').waitFor({ state: 'attached', timeout: 15000 });\n\n const errorIcon = this.page.locator('a.validation-icons-wrapper.error');\n\n // Actively wait for the error icon to appear — isVisible() alone races against wizard rendering\n let hasError = false;\n try {\n await errorIcon.waitFor({ state: 'visible', timeout: 5000 });\n hasError = true;\n } catch {\n // No validation errors detected\n }\n\n if (hasError) {\n await this.page.getByRole('button', { name: 'Deployment Properties' }).click();\n const usernameInput = this.page.locator('input[name=\"username\"]');\n await usernameInput.waitFor({ state: 'visible' });\n await usernameInput.fill(values[3]);\n await this.page.getByRole('button', { name: 'Save' }).click();\n await errorIcon.waitFor({ state: 'hidden', timeout: 10000 });\n }\n\n await this.page.locator('button.deploy.xl-primary').waitFor({ state: 'visible' });\n await this.page.locator('button.deploy.xl-primary').click();\n\n //Get the task id\n const taskIdLocator = this.page.locator('div.task-id').first();\n await expect(taskIdLocator).toBeVisible({ timeout: 60000 });\n await expect(taskIdLocator).not.toHaveText('', { timeout: 60000 });\n this.taskId = ((await taskIdLocator.textContent()) ?? '').trim();\n\n //Verify no failure and all are done\n const labels = this.page.locator('span.label');\n await expect(labels).toHaveCount(3);\n await expect(labels).toHaveText(['EXECUTED', 'DONE', 'DONE']);\n\n //Get the text executed\n await this.page.locator('div[data-id=\"0_1_1\"] .infinite-tree-node > a').click();\n await this.page.getByTitle('Execute Test Command').click();\n this.executedText = await this.page.locator('div.step-log-body pre').nth(1).innerText();\n\n //Verify in monitoring tab searching with the task id\n await this.page.locator('div[data-id=\"TASK_MONITOR\"] .infinite-tree-node > a').click();\n await this.page.locator('span[data-id=\"DEPLOYMENT_TASKS\"]').dblclick();\n await this.page.waitForTimeout(5000);\n\n await this.page.locator('div.deployment-task-filter-task-id input[placeholder=\"Search\"]').first().fill(this.taskId);\n const stateText = await this.page.locator('td.tasks-table-state').first().innerText();\n expect(stateText.trim()).toBe('Executed');\n\n //Click the row to go to deployment screen\n await this.page.locator('table.table.table-striped tbody tr').first().dblclick();\n\n await this.page.locator('button.finish.xl-primary').click();\n }\n\n /* Deploys or redeploys the application in bulk — exact copy of deployApp flow with forceRedeploy */\n async deployAppBulk(values: string[]): Promise<void> {\n const versionNode = `Applications/${values[0]}/${values[1]}`;\n await this.ensureExplorerTreeReady();\n await this.waitForPackageNode(values[0], values[1]);\n await this.openPackageMenuWithRetry(versionNode);\n await this.page.getByRole('link', { name: 'Deploy', exact: true }).click();\n await this.page.locator(`input[name=\"selections\"][value=\"Environments/${values[2]}\"]`).click();\n await this.page.getByRole('button', { name: 'Continue' }).click();\n\n // Wait for the deployment properties wizard to fully load and evaluate validation rules\n await this.page.locator('.errors-wrapper').waitFor({ state: 'attached', timeout: 15000 });\n\n const errorIcon = this.page.locator('a.validation-icons-wrapper.error');\n\n let hasError = false;\n try {\n await errorIcon.waitFor({ state: 'visible', timeout: 5000 });\n hasError = true;\n } catch {\n // No validation errors detected\n }\n\n // Always open Deployment Properties to set forceRedeploy=true\n await this.page.getByRole('button', { name: 'Deployment Properties' }).click();\n const usernameInput = this.page.locator('input[name=\"username\"]');\n if (hasError) {\n await usernameInput.waitFor({ state: 'visible' });\n await usernameInput.fill(values[3]);\n }\n const forceRedeployInput = this.page.locator('input[name=\"forceRedeploy\"]');\n await forceRedeployInput.waitFor({ state: 'visible', timeout: 10000 });\n if (!(await forceRedeployInput.isChecked())) {\n await forceRedeployInput.check();\n }\n await this.page.getByRole('button', { name: 'Save' }).click();\n if (hasError) {\n await errorIcon.waitFor({ state: 'hidden', timeout: 10000 });\n }\n\n await this.page.locator('button.deploy.xl-primary').waitFor({ state: 'visible' });\n await this.page.locator('button.deploy.xl-primary').click();\n\n const labels = this.page.locator('span.label');\n await expect(labels).toHaveCount(3, { timeout: 120000 });\n await expect(labels).toHaveText(['EXECUTED', 'DONE', 'DONE'], { timeout: 120000 });\n\n const finishButton = this.page.locator('button.finish.xl-primary');\n if (await finishButton.isVisible()) {\n await finishButton.click();\n }\n await this.page.locator('div.xl-react-widget-modal-dialog.in').waitFor({ state: 'hidden', timeout: 30000 });\n }\n\n /* Redeploy the same package repeatedly — delegates to deployAppBulk (forceRedeploy already set). \n async redeployAppBulk(values: string[]): Promise<void> {\n await this.deployAppBulk(values);\n }*/\n\n async verifyApplicationIsVisibleToTheUser(applicationName: string): Promise<void> {\n //await this.navigation.homePage.clickExplorer();\n await this.assertTreeNodeVisibility('Applications', applicationName, { shouldBeVisible: true });\n }\n\n async verifyCiNodesVisibility(\n nodes: { applicationName: string; environmentName: string; infrastructureName: string },\n shouldBeVisible: boolean,\n page: Page = this.page,\n ): Promise<void> {\n const { applicationName, environmentName, infrastructureName } = nodes;\n await page.locator('button.dot-avatar').waitFor({ state: 'visible', timeout: 30000 });\n const currentUrl = page.url();\n if (!/#\\/explorer/.test(currentUrl)) {\n await page.goto('/#/explorer');\n }\n await page.waitForURL(/#\\/explorer/);\n await page.locator('div[data-id=\"Applications\"]').waitFor({ state: 'visible', timeout: 15000 });\n await this.assertTreeNodeVisibility('Applications', applicationName, { shouldBeVisible, page });\n await this.assertTreeNodeVisibility('Environments', environmentName, { shouldBeVisible, page });\n await this.assertTreeNodeVisibility('Infrastructure', infrastructureName, { shouldBeVisible, page });\n }\n\n private async assertTreeNodeVisibility(\n rootName: string,\n childName: string,\n { page = this.page, shouldBeVisible }: { page?: Page; shouldBeVisible: boolean },\n ): Promise<void> {\n const rootToggle = page.locator(`div[data-id=\"${rootName}\"] .infinite-tree-node > a`);\n await expect(rootToggle).toBeVisible();\n await rootToggle.click();\n await page.locator(`div[data-id=\"${rootName}\"]`).waitFor({ state: 'visible' });\n await page.waitForTimeout(1500);\n const childNode = page.locator(`span[data-id=\"${rootName}/${childName}\"]`);\n if (shouldBeVisible) {\n if (!(await childNode.isVisible())) {\n await rootToggle.click();\n await page.waitForTimeout(1000);\n }\n await expect(childNode).toBeVisible();\n } else {\n await expect(childNode).toHaveCount(0);\n }\n }\n\n private async refreshExplorerTree(): Promise<void> {\n const refreshButton = this.page.getByRole('button', { name: 'Refresh' }).first();\n if (await refreshButton.isVisible()) {\n await refreshButton.click();\n await this.page.waitForLoadState('networkidle');\n }\n }\n\n private async nodeExists(dataId: string): Promise<boolean> {\n await this.ensureExplorerTreeReady();\n const node = this.page.locator(`span[data-id=\"${dataId}\"]`);\n if ((await node.count()) > 0) {\n return true;\n }\n await this.refreshExplorerTree();\n return (await node.count()) > 0;\n }\n\n private async waitForApplicationNode(applicationName: string): Promise<void> {\n const appDataId = `Applications/${applicationName}`;\n const appNode = this.page.locator(`span[data-id=\"${appDataId}\"]`);\n const rootToggle = this.page.locator('div[data-id=\"Applications\"] .infinite-tree-node > a');\n\n await this.ensureExplorerTreeReady();\n await rootToggle.waitFor({ state: 'visible' });\n\n for (let attempt = 0; attempt < 3; attempt += 1) {\n if ((await appNode.count()) === 0 || !(await appNode.isVisible())) {\n await rootToggle.click();\n await this.page.waitForTimeout(500);\n }\n\n try {\n await expect(appNode).toBeVisible({ timeout: 5000 });\n return;\n } catch {\n await this.refreshExplorerTree();\n }\n }\n\n await expect(appNode).toBeVisible({ timeout: 15000 });\n }\n\n private async waitForPackageNode(applicationName: string, packageName: string): Promise<void> {\n const packageDataId = `Applications/${applicationName}/${packageName}`;\n const packageNode = this.page.locator(`span[data-id=\"${packageDataId}\"]`);\n const appRow = this.page.locator(`div[data-id=\"Applications/${applicationName}\"]`);\n const appToggle = appRow.locator('.infinite-tree-node > a');\n // Detects whether the app is already expanded (has any visible child span)\n const anyChildNode = this.page.locator(`span[data-id^=\"Applications/${applicationName}/\"]`).first();\n\n await this.waitForApplicationNode(applicationName);\n await appRow.scrollIntoViewIfNeeded();\n await appToggle.waitFor({ state: 'visible' });\n\n for (let attempt = 0; attempt < 5; attempt += 1) {\n // Only click the toggle if the node is currently collapsed — prevents accidental collapse\n if (!(await anyChildNode.isVisible())) {\n await appToggle.scrollIntoViewIfNeeded();\n await appToggle.click({ force: true });\n await this.page.waitForTimeout(500);\n }\n\n try {\n await expect(packageNode).toBeVisible({ timeout: 5000 });\n return;\n } catch {\n // Package still not visible — refresh tree and re-expand on next attempt\n await this.refreshExplorerTree();\n await this.waitForApplicationNode(applicationName);\n await appToggle.waitFor({ state: 'visible' });\n }\n }\n\n await expect(packageNode).toBeVisible({ timeout: 15000 });\n }\n\n private async clickPackageNodeWithRetry(packageDataId: string): Promise<void> {\n const appName = packageDataId.split('/')[1];\n for (let attempt = 0; attempt < 3; attempt += 1) {\n const appRow = this.page.locator(`div[data-id=\"Applications/${appName}\"]`);\n const appToggle = appRow.locator('.infinite-tree-node > a');\n try {\n await appToggle.scrollIntoViewIfNeeded();\n } catch {\n // Tree can re-render between retries; re-query next loop.\n }\n await appToggle.click({ force: true });\n const packageNode = this.page.locator(`span[data-id=\"${packageDataId}\"]`).first();\n await expect(packageNode).toBeVisible({ timeout: 5000 });\n try {\n await packageNode.click();\n return;\n } catch {\n await this.page.waitForTimeout(300);\n }\n }\n\n await this.page.locator(`span[data-id=\"${packageDataId}\"]`).first().click();\n }\n\n private async openPackageMenuWithRetry(versionDataId: string): Promise<void> {\n const appName = versionDataId.split('/')[1];\n const appToggle = this.page.locator(`div[data-id=\"Applications/${appName}\"] .infinite-tree-node > a`);\n // The context-menu button is CSS-hidden until the tree row is hovered.\n // Hover the node row first so the button becomes visible, then click it.\n const nodeRow = this.page.locator(`div[data-id=\"${versionDataId}\"] .infinite-tree-node`);\n\n for (let attempt = 0; attempt < 3; attempt += 1) {\n const menuButton = this.page.locator(`i.context-menu-button[data-id=\"${versionDataId}\"]`).first();\n try {\n await nodeRow.hover({ timeout: 5000 });\n await expect(menuButton).toBeVisible({ timeout: 5000 });\n await menuButton.click();\n return;\n } catch {\n await appToggle.click();\n await this.page.waitForTimeout(300);\n }\n }\n\n await this.page.locator(`i.context-menu-button[data-id=\"${versionDataId}\"]`).first().click({ force: true });\n }\n}\n","import { ExplorerPage } from '../explorerPage';\nimport { expect, Page } from '@playwright/test';\n\nexport class GitopsConfigurationPage extends ExplorerPage {\n taskId!: string;\n executedText!: string;\n targetCi!: string;\n\n constructor(page: Page) {\n super(page);\n }\n /* Helps to navigate to the Gitops Configuration page */\n async navigateToGitopsConfigurationPage(): Promise<void> {\n await this.openRootContextMenu('Configuration');\n await this.page.getByRole('link', { name: 'New' }).click();\n await this.page.locator('a[title=\"git\"]').click();\n await this.page.getByRole('link', { name: 'GitSource' }).click();\n await this.ensureExplorerTreeReady();\n }\n\n async openNewgitops(): Promise<void> {\n await this.closeModalIfPresent();\n await this.ensureExplorerTreeReady();\n\n const infrastructureRoot = this.page.locator('span[data-id=\"Configuration\"]');\n await infrastructureRoot.scrollIntoViewIfNeeded();\n await infrastructureRoot.click();\n\n const contextMenu = this.page.locator('i.context-menu-button[data-id=\"Configuration\"]');\n await contextMenu.scrollIntoViewIfNeeded();\n await contextMenu.click({ force: true });\n\n await this.page.getByRole('link', { name: 'New' }).click();\n await this.page.locator('a[title=\"git\"]').click();\n await this.page.getByRole('link', { name: 'GitSource' }).click();\n }\n\n async openConfigurationNewgit(): Promise<void> {\n await this.openNewgitops();\n }\n\n /* Helps to create a gitops ci*/\n async createGitopsCI(ciName: string, gitData: string[]): Promise<void> {\n await this.page.locator('input[name=\"name\"]').fill(ciName);\n await this.page.locator('input[name=\"username\"]').fill(gitData[0]);\n await this.page.locator('input[name=\"password\"]').fill(gitData[1]);\n await this.page.locator('input[name=\"url\"]').fill(gitData[2]);\n await this.page.getByRole('button', { name: /^Save and close$/i }).click();\n await this.handleSaveToastOrAlreadyExists();\n }\n\n /**\n * Opens New -> git -> GitDirectory under the provided GitSource node.\n * @param gitSourceDataId The full tree data-id, e.g. \"Configuration/MyGitSource\"\n */\n async openNewGitDirectoryUnderGitSource(gitSourceDataId: string): Promise<void> {\n const configurationToggle = this.page.locator('div[data-id=\"Configuration\"] .infinite-tree-node > a');\n const gitSourceNode = this.page.locator(`span[data-id=\"${gitSourceDataId}\"]`);\n\n for (let attempt = 0; attempt < 3; attempt += 1) {\n if ((await gitSourceNode.count()) > 0 && (await gitSourceNode.isVisible())) {\n break;\n }\n await configurationToggle.click();\n await this.page.waitForTimeout(500);\n }\n\n await gitSourceNode.scrollIntoViewIfNeeded();\n await gitSourceNode.hover();\n\n const contextMenu = this.page.locator(`i.context-menu-button[data-id=\"${gitSourceDataId}\"]`);\n await contextMenu.waitFor({ state: 'visible', timeout: 5000 });\n await contextMenu.click({ force: true });\n\n await this.page.getByRole('link', { name: /^New$/i }).click();\n await this.page.getByRole('link', { name: /^git$/i }).click();\n await this.page.getByRole('link', { name: /^GitDirectory$/i }).click();\n }\n\n /**\n * Runs the \"Check connection\" control task on the given GitSource node once.\n * @param gitSourceDataId The full tree data-id, e.g. \"Configuration/MyGitSource\"\n */\n async runCheckConnection(gitSourceDataId: string): Promise<void> {\n const configurationToggle = this.page.locator('div[data-id=\"Configuration\"] .infinite-tree-node > a');\n const gitSourceNode = this.page.locator(`span[data-id=\"${gitSourceDataId}\"]`);\n\n // Ensure the GitSource node is visible in the tree before opening context menu.\n for (let attempt = 0; attempt < 3; attempt += 1) {\n if ((await gitSourceNode.count()) > 0 && (await gitSourceNode.isVisible())) {\n break;\n }\n await configurationToggle.click();\n await this.page.waitForTimeout(500);\n }\n\n await gitSourceNode.waitFor({ state: 'visible', timeout: 5000 });\n\n await gitSourceNode.scrollIntoViewIfNeeded();\n await gitSourceNode.hover();\n\n const ctxBtn = this.page.locator(`i.context-menu-button[data-id=\"${gitSourceDataId}\"]`);\n await ctxBtn.waitFor({ state: 'visible', timeout: 5000 });\n await ctxBtn.click({ force: true });\n\n await this.page.getByRole('link', { name: /check connection/i }).click();\n\n await this.page\n .locator('.xl-react-widget-modal-dialog button.deploy.xl-primary, button.xl-primary:has-text(\"Execute\")')\n .first()\n .waitFor({ state: 'visible', timeout: 10000 });\n await this.page\n .locator('.xl-react-widget-modal-dialog button.deploy.xl-primary, button.xl-primary:has-text(\"Execute\")')\n .first()\n .click();\n\n // Wait for DONE status\n const doneLabel = this.page.locator('span.label', { hasText: 'DONE' }).first();\n await doneLabel.waitFor({ state: 'visible', timeout: 45000 });\n\n // Capture task ID using the same source as deployment flows.\n const taskIdLocator = this.page.locator('div.task-id').first();\n await expect(taskIdLocator).toBeVisible({ timeout: 60000 });\n await expect(taskIdLocator).not.toHaveText('', { timeout: 60000 });\n const capturedTaskId = ((await taskIdLocator.textContent()) ?? '').trim();\n if (!capturedTaskId) {\n throw new Error(`Unable to capture check connection task ID for ${gitSourceDataId}.`);\n }\n this.taskId = capturedTaskId;\n this.executedText = 'DONE';\n this.targetCi = gitSourceDataId;\n\n // Finish\n const finishButton = this.page.locator('button.finish.xl-primary, button:has-text(\"Finish\")').first();\n if (await finishButton.isVisible()) {\n await finishButton.click();\n }\n\n // Wait for modal/plan to close\n const modal = this.page.locator('div.xl-react-widget-modal-dialog.in');\n if ((await modal.count()) > 0) {\n await modal.first().waitFor({ state: 'hidden', timeout: 15000 });\n }\n }\n\n /**\n * Runs the \"Check connection\" control task and expects it to fail with invalid credentials.\n * @param gitSourceDataId The full tree data-id, e.g. \"Configuration/MyGitSource\"\n */\n async runCheckConnectionExpectFailure(gitSourceDataId: string): Promise<void> {\n const configurationToggle = this.page.locator('div[data-id=\"Configuration\"] .infinite-tree-node > a');\n const gitSourceNode = this.page.locator(`span[data-id=\"${gitSourceDataId}\"]`);\n\n // Ensure the GitSource node is visible in the tree before opening context menu.\n for (let attempt = 0; attempt < 3; attempt += 1) {\n if ((await gitSourceNode.count()) > 0 && (await gitSourceNode.isVisible())) {\n break;\n }\n await configurationToggle.click();\n await this.page.waitForTimeout(500);\n }\n\n await gitSourceNode.scrollIntoViewIfNeeded();\n await gitSourceNode.hover();\n\n const ctxBtn = this.page.locator(`i.context-menu-button[data-id=\"${gitSourceDataId}\"]`);\n await ctxBtn.waitFor({ state: 'visible', timeout: 5000 });\n await ctxBtn.click({ force: true });\n\n await this.page.getByRole('link', { name: /check connection/i }).click();\n\n // Click Execute button\n await this.page\n .locator('.xl-react-widget-modal-dialog button.deploy.xl-primary, button.xl-primary:has-text(\"Execute\")')\n .first()\n .waitFor({ state: 'visible', timeout: 10000 });\n await this.page\n .locator('.xl-react-widget-modal-dialog button.deploy.xl-primary, button.xl-primary:has-text(\"Execute\")')\n .first()\n .click();\n\n // Wait for FAILED status (instead of EXECUTED)\n const failedLabel = this.page.locator('span.label', { hasText: 'FAILED' }).first();\n await failedLabel.waitFor({ state: 'visible', timeout: 30000 });\n\n // Finish\n const finishButton = this.page.locator('button.finish.xl-primary, button:has-text(\"Finish\")').first();\n if (await finishButton.isVisible()) {\n await finishButton.click();\n }\n\n // Wait for modal/plan to close\n const modal = this.page.locator('div.xl-react-widget-modal-dialog.in');\n if ((await modal.count()) > 0) {\n await modal.first().waitFor({ state: 'hidden', timeout: 15000 });\n }\n }\n\n /**\n * Verifies the captured Check Connection task in Reports -> Control tasks.\n */\n async verifyCheckConnectionTaskInReports(): Promise<void> {\n if (!this.taskId) {\n throw new Error('Check connection task ID is empty. Run check connection before verifying reports.');\n }\n\n await this.page.locator('p.MuiTypography-root', { hasText: 'Reports' }).click();\n\n const controlTasksTab = this.page\n .locator('.app-root .dot-sidebar .dot-list p')\n .filter({ hasText: 'Control tasks' })\n .first();\n await controlTasksTab.scrollIntoViewIfNeeded();\n await controlTasksTab.click();\n\n const pane = this.page.locator('#pane-ControlTasksTab');\n await pane.waitFor({ state: 'visible', timeout: 20000 });\n\n const showFilters = pane.getByRole('button', { name: 'Show filters' });\n if (await showFilters.isVisible()) {\n await showFilters.click({ force: true });\n }\n\n const taskIdFilter = pane.locator('.control-task-id input[placeholder=\"Search\"]');\n await taskIdFilter.fill(this.taskId);\n\n const tableBody = pane.locator('table.table-striped tbody');\n const row = tableBody.locator('tr').filter({ hasText: this.taskId }).first();\n\n for (let attempt = 0; attempt < 3; attempt += 1) {\n if ((await row.count()) > 0 && (await row.isVisible())) {\n break;\n }\n const refreshButton = pane.getByRole('button', { name: 'Refresh' });\n if (await refreshButton.isVisible()) {\n await refreshButton.click();\n }\n await this.page.waitForTimeout(1500);\n }\n\n await expect(row).toBeVisible({ timeout: 30000 });\n await expect(row).toContainText(this.taskId);\n await expect(row).toContainText(/check connection/i);\n await expect(row).toContainText(new RegExp(this.executedText, 'i'));\n await expect(row).toContainText(this.targetCi);\n }\n}\n","import { expect, type Download } from '@playwright/test';\nimport { WithPage } from '../withPage';\n\nexport class ReportsPage extends WithPage {\n private async openTab(tabLabel: string, paneId: string): Promise<void> {\n const tab = this.page.locator('.app-root .dot-sidebar .dot-list p').filter({ hasText: tabLabel }).first();\n await tab.scrollIntoViewIfNeeded();\n await tab.click();\n await this.page.locator(`#pane-${paneId}`).waitFor({ state: 'visible', timeout: 20000 });\n }\n\n private async downloadReport(buttonLabel: string, paneId: string, selector?: string): Promise<Download> {\n const pane = this.page.locator(`#pane-${paneId}`);\n const exportButton = selector ? pane.locator(selector) : pane.getByRole('button', { name: buttonLabel });\n const fallbackButton = pane.locator('button:has-text(\"Export\")');\n const downloadPromise = this.page.waitForEvent('download', { timeout: 20000 });\n if (await exportButton.isVisible()) {\n await exportButton.click();\n } else {\n await fallbackButton.first().click();\n }\n return downloadPromise;\n }\n\n async openDashboardTab(): Promise<void> {\n await this.openTab('Dashboard', 'DashboardTab');\n }\n\n async openDeploymentsTab(): Promise<void> {\n await this.openTab('Deployments', 'DeploymentsTab');\n }\n\n async openControlTasksTab(): Promise<void> {\n await this.openTab('Control tasks', 'ControlTasksTab');\n }\n\n async openAuditReportTab(): Promise<void> {\n await this.openTab('Audit report', 'AuditReportTab');\n }\n\n async downloadDeploymentsExport(): Promise<Download> {\n return this.downloadReport('Export report', 'DeploymentsTab');\n }\n\n async downloadControlTasksExport(): Promise<Download> {\n return this.downloadReport('Export report', 'ControlTasksTab');\n }\n\n async downloadAuditReportExport(): Promise<Download> {\n return this.downloadReport('Export report', 'AuditReportTab');\n }\n\n /* Clicks on the Deployment Tasks section */\n async clickDeploymentTasks(): Promise<void> {\n await this.page.locator('p.MuiTypography-root', { hasText: 'Deployments' }).click();\n }\n\n async verifyTheDeploymentValues(values: string[]): Promise<void> {\n await this.page\n .locator('div.deployment-task-filter-task-id input[placeholder=\"Search\"]:visible')\n .first()\n .fill(values[0]);\n const escapedApp = values[2].replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const escapedPkg = values[3].replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const packagePattern = new RegExp(`${escapedApp}/${escapedPkg}`, 'i');\n const row = this.page\n .locator('table.table-striped tbody tr')\n .filter({\n has: this.page.locator('td.report-table-package .deployment-report-package', { hasText: packagePattern }),\n })\n .first();\n await row.waitFor({ state: 'visible', timeout: 5000 });\n const packageCell = row.locator('td.report-table-package .deployment-report-package').first();\n await expect(packageCell).toContainText(packagePattern);\n await expect(row.locator('td.report-table-originalType .deployment-report-task-type')).toHaveText(/Initial/i);\n await expect(row.locator('td.report-table-user .deployment-report-user')).toHaveText('admin');\n\n //Click the row\n await packageCell.dblclick();\n await this.page.locator('div[data-id=\"0_1_1\"] .infinite-tree-node > a').click();\n await this.page.getByTitle('Execute Test Command').click();\n\n //Get the log text\n const text = await this.page.locator('div.step-log-body pre').nth(1).innerText();\n\n //Verify both the log text are same\n expect(text).toContain(values[1]);\n }\n}\n","import { expect, type Locator } from '@playwright/test';\nimport { WithPage } from '../withPage';\n\nexport class ReportsControlTasksPage extends WithPage {\n private getPane(): Locator {\n return this.page.locator('#pane-ControlTasksTab');\n }\n\n private getPagination(): Locator {\n return this.getPane().locator('.react-bootstrap-table-pagination');\n }\n\n private getTableBody(): Locator {\n return this.getPane().locator('.react-bootstrap-table tbody');\n }\n\n private getLastUpdated(): Locator {\n return this.getPane().locator('.last-updated-component');\n }\n\n // ── Navigation ───────────────────────────────────────────────────────────\n\n async verifySelected(): Promise<void> {\n const pane = this.getPane();\n await expect(pane).toBeVisible();\n await expect(\n this.page\n .locator('.dot-sidebar a[href*=\"controltasks\"], .dot-sidebar .dot-list p', {\n hasText: 'Control tasks',\n })\n .first(),\n ).toBeVisible();\n }\n\n // ── Filters ───────────────────────────────────────────────────────────────\n\n async verifyFiltersVisible(): Promise<void> {\n const pane = this.getPane();\n const filtersPanel = pane.locator('.xl-react-redux-table-filters-panel');\n await expect(filtersPanel).toBeVisible();\n await expect(pane.locator('.control-task-filter-targets .react-tagsinput-input')).toBeVisible();\n await expect(pane.locator('.control-task-filter-task-name input[placeholder=\"Search\"]')).toBeVisible();\n await expect(pane.locator('.control-task-id input[placeholder=\"Search\"]')).toBeVisible();\n await expect(pane.locator('.control-task-filter-start-date')).toBeVisible();\n await expect(pane.locator('.control-task-filter-end-date')).toBeVisible();\n await expect(pane.locator('.control-task-filter-worker input[placeholder=\"Search\"]')).toBeVisible();\n await expect(pane.locator('.control-task-filter-state .react-tagsinput-input')).toBeVisible();\n }\n\n async hideFilters(): Promise<void> {\n const pane = this.getPane();\n const filtersPanel = pane.locator('.xl-react-redux-table-filters-panel');\n const hideFiltersButton = pane.getByRole('button', { name: 'Hide filters' });\n await expect(filtersPanel).toBeVisible();\n await hideFiltersButton.click();\n await expect(filtersPanel).toBeHidden();\n }\n\n async showFilters(): Promise<void> {\n const pane = this.getPane();\n const filtersPanel = pane.locator('.xl-react-redux-table-filters-panel');\n const showFiltersButton = pane.getByRole('button', { name: 'Show filters' });\n if (await filtersPanel.isVisible()) {\n return;\n }\n for (let attempt = 0; attempt < 3; attempt += 1) {\n if (await showFiltersButton.isVisible()) {\n await showFiltersButton.click({ force: true });\n }\n if (await filtersPanel.isVisible()) {\n return;\n }\n await this.page.waitForTimeout(300);\n }\n await expect(filtersPanel).toBeVisible();\n }\n\n async ensureFiltersVisible(): Promise<void> {\n const pane = this.getPane();\n const filtersPanel = pane.locator('.xl-react-redux-table-filters-panel');\n if (await filtersPanel.isVisible()) {\n return;\n }\n const showFiltersButton = pane.getByRole('button', { name: 'Show filters' });\n if (await showFiltersButton.isVisible()) {\n await showFiltersButton.click({ force: true });\n }\n await expect(filtersPanel).toBeVisible();\n }\n\n // ── Date filters ─────────────────────────────────────────────────────────\n\n async setStartDate(value: string): Promise<void> {\n const field = this.getPane().locator('.control-task-filter-start-date');\n await field.click();\n await field.fill(value);\n await this.getLastUpdated().click({ force: true });\n }\n\n async setEndDate(value: string): Promise<void> {\n const field = this.getPane().locator('.control-task-filter-end-date');\n await field.click();\n await field.fill(value);\n await this.getLastUpdated().click({ force: true });\n }\n\n async expectStartDateValue(value: string): Promise<void> {\n await expect(this.getPane().locator('.control-task-filter-start-date')).toHaveValue(value);\n }\n\n async expectEndDateValue(value: string): Promise<void> {\n await expect(this.getPane().locator('.control-task-filter-end-date')).toHaveValue(value);\n }\n\n async checkInvalidStartDateError(): Promise<void> {\n const field = this.getPane().locator('.control-task-filter-start-date');\n await field.click();\n await field.press('End');\n await field.press('a');\n await this.page.keyboard.press('Escape');\n await expect(this.getPane().getByText('Example: Dec 1, 2018').first()).toBeVisible();\n }\n\n async checkInvalidEndDateError(): Promise<void> {\n const field = this.getPane().locator('.control-task-filter-end-date');\n await field.click();\n await field.press('End');\n await field.press('b');\n await this.page.keyboard.press('Escape');\n await expect(this.getPane().getByText('Example: Dec 1, 2018').first()).toBeVisible();\n }\n\n async expectNoStartDateError(): Promise<void> {\n await expect(this.getPane().getByText('Example: Dec 1, 2018')).toHaveCount(0);\n }\n\n async expectNoEndDateError(): Promise<void> {\n await expect(this.getPane().getByText('Example: Dec 1, 2018')).toHaveCount(0);\n }\n\n // ── Tag filters ───────────────────────────────────────────────────────────\n\n async selectTargetsTagsFilter(text: string, optionName: string): Promise<void> {\n await this.selectTagsFilterFirstSuggestion('.control-task-filter-targets .react-tagsinput', text, optionName);\n }\n\n async clearTargetsTagsFirstTag(): Promise<void> {\n const remove = this.getPane().locator(\n '.control-task-filter-targets .react-tagsinput-tag:nth-child(1) .react-tagsinput-remove',\n );\n if (await remove.count()) {\n await remove.click();\n }\n }\n\n async selectStatesTagsFilter(text: string, optionName: string): Promise<void> {\n await this.selectTagsFilterFirstSuggestion('.control-task-filter-state .react-tagsinput', text, optionName);\n }\n\n async clearStatesTagsFirstTag(): Promise<void> {\n const remove = this.getPane().locator(\n '.control-task-filter-state .react-tagsinput-tag:nth-child(1) .react-tagsinput-remove',\n );\n if (await remove.count()) {\n await remove.click();\n }\n }\n\n // ── Text filters ──────────────────────────────────────────────────────────\n\n async filterByTaskName(name: string): Promise<void> {\n await this.getPane().locator('.control-task-filter-task-name input[placeholder=\"Search\"]').fill(name);\n }\n\n async clearTaskName(): Promise<void> {\n await this.filterByTaskName('');\n }\n\n async filterByTaskId(id: string): Promise<void> {\n await this.getPane().locator('.control-task-id input[placeholder=\"Search\"]').fill(id);\n }\n\n async clearTaskId(): Promise<void> {\n await this.filterByTaskId('');\n }\n\n async filterByWorker(worker: string): Promise<void> {\n await this.getPane().locator('.control-task-filter-worker input[placeholder=\"Search\"]').fill(worker);\n }\n\n async clearWorkerFilter(): Promise<void> {\n await this.filterByWorker('');\n }\n\n // ── Tasks toggle ──────────────────────────────────────────────────────────\n\n async clickMyTasks(): Promise<void> {\n await this.getPane().getByRole('button', { name: 'My tasks' }).click();\n }\n\n async clickAllTasks(): Promise<void> {\n await this.getPane().getByRole('button', { name: 'All tasks' }).click();\n }\n\n // ── Toolbar ───────────────────────────────────────────────────────────────\n\n async clickRefresh(): Promise<void> {\n await this.getPane().getByRole('button', { name: 'Refresh' }).click();\n }\n\n async verifyLastUpdatedAndRefresh(): Promise<void> {\n const lastUpdated = this.getLastUpdated();\n await expect(lastUpdated).toBeVisible();\n await expect(lastUpdated).not.toHaveText('');\n await this.getPane().getByRole('button', { name: 'Refresh' }).click();\n await expect(lastUpdated).toBeVisible();\n }\n\n // ── Table assertions ──────────────────────────────────────────────────────\n\n async verifyTableHasRowsOrEmpty(): Promise<void> {\n const pane = this.getPane();\n const table = pane.locator('table.table-striped');\n await expect(table).toBeVisible();\n const rows = this.getTableBody().locator('tr');\n const noDataCell = this.getTableBody().locator('td.react-bs-table-no-data');\n const emptyState = pane.getByText(/No report data available/i);\n await expect(async () => {\n if ((await rows.count()) > 0) return true;\n if ((await noDataCell.count()) > 0 && (await noDataCell.first().isVisible())) return true;\n if ((await emptyState.count()) > 0 && (await emptyState.first().isVisible())) return true;\n return false;\n }).toBeTruthy();\n }\n\n async verifyTableColumns(): Promise<void> {\n const headers = this.getPane().locator('.react-bootstrap-table thead th');\n await expect(headers.filter({ hasText: 'Control task name' })).toBeVisible();\n await expect(headers.filter({ hasText: 'Target CI' })).toBeVisible();\n await expect(headers.filter({ hasText: 'Description' })).toBeVisible();\n await expect(headers.filter({ hasText: 'User' })).toBeVisible();\n await expect(headers.filter({ hasText: 'State' })).toBeVisible();\n await expect(headers.filter({ hasText: 'Start date' })).toBeVisible();\n await expect(headers.filter({ hasText: 'End date' })).toBeVisible();\n await expect(headers.filter({ hasText: 'Worker' })).toBeVisible();\n }\n\n async waitForTableReady(): Promise<void> {\n await expect(async () => {\n const loading = await this.getPane().getByText('Data loading').count();\n expect(loading).toBe(0);\n const table = this.getPane().locator('table.table-striped');\n expect(await table.count()).toBeGreaterThan(0);\n }).toPass({ timeout: 20000 });\n }\n\n async expectNumberOfRows(count: number): Promise<void> {\n await this.waitForTableReady();\n await expect(this.getTableBody().locator('tr')).toHaveCount(count);\n }\n\n async expectAtLeastNumberOfRows(count: number): Promise<void> {\n await this.waitForTableReady();\n await expect(async () => {\n const total = await this.getTableBody().locator('tr').count();\n expect(total).toBeGreaterThanOrEqual(count);\n }).toPass({ timeout: 30000 });\n }\n\n async expectTotal(total: number): Promise<void> {\n await expect(this.getPagination().locator('> div').filter({ hasText: 'Total:' })).toContainText(`Total: ${total}`);\n }\n\n async expectAtLeastTotal(count: number): Promise<void> {\n await this.waitForTableReady();\n await expect(async () => {\n const text = await this.getPagination().locator('> div').filter({ hasText: 'Total:' }).textContent();\n const match = text?.match(/Total:\\s*(\\d+)/);\n const total = match ? Number(match[1]) : 0;\n expect(total).toBeGreaterThanOrEqual(count);\n }).toPass();\n }\n\n async getTotalCount(): Promise<number> {\n await this.waitForTableReady();\n const text = await this.getPagination().locator('> div').filter({ hasText: 'Total:' }).textContent();\n const match = text?.match(/Total:\\s*(\\d+)/);\n return match ? Number(match[1]) : 0;\n }\n\n async expectValue(row: number, column: string, expected: string): Promise<void> {\n const cell = this.getTableBody().locator(`tr:nth-child(${row}) td.report-table-${column}`);\n await expect(cell).toHaveText(expected);\n }\n\n async expectValueContains(row: number, column: string, expected: string): Promise<void> {\n const cell = this.getTableBody().locator(`tr:nth-child(${row}) td.report-table-${column}`);\n await expect(cell).toContainText(expected);\n }\n\n async shouldHaveScrollBar(): Promise<void> {\n await this.waitForTableReady();\n const container = this.getPane().locator('div.report');\n const overflowX = await container.evaluate((el) => window.getComputedStyle(el).overflowX);\n expect(['auto', 'scroll']).toContain(overflowX);\n }\n\n // ── Sorting ───────────────────────────────────────────────────────────────\n\n async sortBy(column: string): Promise<void> {\n await this.getPane().locator(`.react-bootstrap-table thead th.report-table-${column}`).click();\n }\n\n async verifyIsSorted(column: string): Promise<void> {\n const sortOrder = this.getPane().locator(\n `.react-bootstrap-table thead th.report-table-${column} .react-bootstrap-table-sort-order`,\n );\n await expect(sortOrder).toBeVisible();\n }\n\n async getColumnValues(column: string): Promise<string[]> {\n await this.waitForTableReady();\n const cells = this.getTableBody().locator(`tr td.report-table-${column}`);\n const count = await cells.count();\n const values: string[] = [];\n for (let i = 0; i < count; i += 1) {\n values.push((await cells.nth(i).textContent())?.trim() ?? '');\n }\n return values;\n }\n\n // ── Pagination ────────────────────────────────────────────────────────────\n\n async getLastPageNumber(): Promise<number> {\n await this.waitForTableReady();\n const links = this.getPagination().getByRole('list').getByRole('link');\n const count = await links.count();\n if (count < 2) return 1;\n const text = await links.nth(count - 2).textContent();\n const num = Number(text?.trim());\n return Number.isFinite(num) && num > 0 ? num : 1;\n }\n\n async goToPage(page: number): Promise<void> {\n await this.getPagination().getByRole('link', { name: page.toString(), exact: true }).click();\n }\n\n async goToFirstPage(): Promise<void> {\n const firstLink = this.getPagination().getByRole('link', { name: '<<' });\n if (await firstLink.count()) {\n await firstLink.click();\n } else {\n await this.getPagination().getByRole('link', { name: '1', exact: true }).click();\n }\n }\n\n async goToLastPage(): Promise<void> {\n const lastLink = this.getPagination().getByRole('link', { name: '>>' });\n if (await lastLink.count()) {\n await lastLink.click();\n } else {\n const links = this.getPagination().getByRole('list').getByRole('link');\n const count = await links.count();\n await links.nth(count - 2).click();\n }\n }\n\n async goToPreviousPage(): Promise<void> {\n await this.getPagination().getByRole('link', { name: '<', exact: true }).click();\n }\n\n async goToNextPage(): Promise<void> {\n await this.getPagination().getByRole('link', { name: '>', exact: true }).click();\n }\n\n async expectPage(page: number): Promise<void> {\n await expect(async () => {\n const pagination = this.getPagination();\n const activeLink = pagination.locator('li.active').getByRole('link', { name: page.toString(), exact: true });\n if ((await activeLink.count()) > 0) return;\n const ariaCurrent = pagination.locator('[aria-current=\"page\"]').filter({ hasText: page.toString() });\n if ((await ariaCurrent.count()) > 0) return;\n // When there is only 1 page, the pagination may not render page links at all.\n // In that case page 1 is implicitly active.\n if (page === 1) {\n const nextLink = pagination.getByRole('link', { name: '>', exact: true });\n const pageLinks = pagination.getByRole('link').filter({ hasText: /^\\d+$/ });\n if ((await nextLink.count()) === 0 && (await pageLinks.count()) === 0) return;\n }\n throw new Error(`Page ${page} not active`);\n }).toPass({ timeout: 30000 });\n }\n\n async expectPageLinkVisible(pageNumber: number): Promise<void> {\n await expect(this.getPagination().getByRole('link', { name: pageNumber.toString(), exact: true })).toBeVisible();\n }\n\n async expectPaginationLinksVisible(): Promise<void> {\n await expect(this.getPagination().getByRole('link', { name: '>', exact: true })).toBeVisible();\n }\n\n async expectPaginationLinksHidden(): Promise<void> {\n await expect(this.getPagination().getByRole('link', { name: '>', exact: true })).toHaveCount(0);\n }\n\n async setPageSize(size: number): Promise<void> {\n await this.openPageSizeMenu();\n await this.getPagination().getByRole('menu').getByRole('menuitem', { name: size.toString(), exact: true }).click();\n await this.waitForTableReady();\n }\n\n async expectPageSize(size: number): Promise<void> {\n await expect(this.getPagination().getByRole('button', { name: size.toString(), exact: true })).toBeVisible();\n }\n\n async expectPageSizes(sizes: number[]): Promise<void> {\n await this.openPageSizeMenu();\n const menu = this.getPagination().getByRole('menu');\n await expect(menu.getByRole('menuitem')).toHaveCount(sizes.length);\n for (const size of sizes) {\n await expect(menu.getByRole('menuitem', { name: size.toString(), exact: true })).toBeVisible();\n }\n await this.closePageSizeMenu();\n }\n\n // ── Private helpers ───────────────────────────────────────────────────────\n\n private async openPageSizeMenu(): Promise<void> {\n const toggle = this.getPagination().locator('.dropdown-toggle');\n await toggle.click();\n await this.getPagination().getByRole('menu').waitFor({ state: 'visible' });\n }\n\n private async closePageSizeMenu(): Promise<void> {\n const menu = this.getPagination().getByRole('menu');\n if (await menu.isVisible()) {\n await this.getPagination().locator('.dropdown-toggle').click();\n }\n }\n\n private async expectTagAdded(tagTitle: string): Promise<void> {\n const tags = this.getPane().locator('.xl-react-widget-tags .react-tagsinput-tag');\n const byTitle = tags.locator(`[title='${tagTitle}']`);\n const byContainsTitle = tags.filter({ hasText: tagTitle.split('/').pop() ?? tagTitle });\n if ((await byTitle.count()) > 0) {\n await expect(byTitle.first()).toBeVisible();\n } else {\n await expect(byContainsTitle.first()).toBeVisible();\n }\n }\n\n private async selectTagsFilterFirstSuggestion(\n filterSelector: string,\n text: string,\n optionName: string,\n ): Promise<void> {\n const pane = this.getPane();\n const filter = pane.locator(filterSelector);\n const input = filter.locator('.xl-react-widget-autocomplete .react-tagsinput-input');\n await input.click({ force: true });\n await input.fill(text);\n const suggestionList = pane.locator('.xl-react-autocomplete-suggestion-list');\n await expect(suggestionList).toBeVisible();\n const optionByTitle = suggestionList.locator(`.yt-option[title=\"${optionName}\"]`);\n const optionByText = suggestionList.locator('.yt-option', { hasText: optionName });\n const gridOption = suggestionList.getByRole('rowgroup').getByText(optionName, { exact: false });\n let option;\n if (await optionByTitle.count()) {\n option = optionByTitle.first();\n } else if (await optionByText.count()) {\n option = optionByText.first();\n } else {\n option = gridOption.first();\n }\n await expect(option).toBeVisible();\n const iconCheckbox = option.locator('i.xl-icon.icon-s.checkbox');\n if (await iconCheckbox.count()) {\n await iconCheckbox.click();\n } else {\n await option.click();\n }\n await this.page.locator('body').click({ position: { x: 10, y: 10 } });\n await this.expectTagAdded(optionName);\n }\n}\n","import { expect, type Download, type Locator } from '@playwright/test';\nimport { WithPage } from '../withPage';\n\nexport class ReportsDashboardPage extends WithPage {\n private async downloadReport(): Promise<Download> {\n const pane = this.page.locator('#pane-DashboardTab');\n const exportButton = pane.locator('button.export-audit-report');\n const fallbackButton = pane.locator('button:has-text(\"Export\")');\n const downloadPromise = this.page.waitForEvent('download', { timeout: 20000 });\n if (await exportButton.isVisible()) {\n await exportButton.click();\n } else {\n await fallbackButton.first().click();\n }\n return downloadPromise;\n }\n\n async downloadDashboardExport(): Promise<Download> {\n return this.downloadReport();\n }\n\n async verifySummarySection(): Promise<void> {\n const pane = this.page.locator('#pane-DashboardTab');\n const summary = pane.locator('.statistics-block');\n await expect(pane.getByText('Usage summary for current month', { exact: false })).toBeVisible();\n await expect(pane.locator('button:has-text(\"Export\")')).toBeVisible();\n await expect(summary.locator('.tile-title[title=\"Successful deployments\"]')).toBeVisible();\n await expect(summary.locator('.tile-title[title=\"Retried deployments\"]')).toBeVisible();\n await expect(summary.locator('.tile-title[title=\"Rollback deployments\"]')).toBeVisible();\n await expect(summary.locator('.tile-title[title=\"Aborted deployments\"]')).toBeVisible();\n await expect(pane.getByText('Deployment status overview', { exact: true })).toBeVisible();\n }\n\n async verifyLast30DaysSection(): Promise<void> {\n const pane = this.page.locator('#pane-DashboardTab');\n await expect(pane.locator('h1.time-period-text', { hasText: /Last 30 days/i })).toBeVisible();\n\n const successCard = pane.getByText('Top 10 successful deployments', { exact: true }).first().locator('..');\n const retriedCard = pane.getByText('Top 10 retried deployments', { exact: true }).first().locator('..');\n const longestCard = pane.getByText('Top 10 longest deployments', { exact: true }).first().locator('..');\n\n await this.expectCardHasDataOrEmpty(successCard);\n await this.expectCardHasDataOrEmpty(retriedCard);\n await this.expectCardHasDataOrEmpty(longestCard);\n }\n\n async verifySelected(): Promise<void> {\n const pane = this.page.locator('#pane-DashboardTab');\n await expect(pane).toBeVisible();\n await expect(this.page.getByText('Dashboard', { exact: true })).toBeVisible();\n }\n\n async verifyLastUpdatedAndRefresh(): Promise<void> {\n const pane = this.page.locator('#pane-DashboardTab');\n const lastUpdated = pane.locator('.last-updated-component');\n await expect(lastUpdated).toBeVisible();\n await expect(lastUpdated).not.toHaveText('');\n const refreshButton = pane.getByRole('button', { name: 'Refresh' });\n await refreshButton.click();\n await expect(lastUpdated).toBeVisible();\n }\n\n async verifyDateRangeDefault(): Promise<void> {\n const pane = this.page.locator('#pane-DashboardTab');\n const dateRangeInput = pane.locator('#date-range-input');\n await expect(dateRangeInput).toHaveValue('Current month');\n }\n\n async selectDateRange(optionLabel: string): Promise<void> {\n const pane = this.page.locator('#pane-DashboardTab');\n const dateRangeInput = pane.locator('#date-range-input');\n try {\n await dateRangeInput.selectOption({ label: optionLabel });\n return;\n } catch {\n // Fall back to clicking the open dropdown list.\n }\n\n await dateRangeInput.click();\n\n const optionRole = this.page.getByRole('option', { name: optionLabel });\n const menuItemRole = this.page.getByRole('menuitem', { name: optionLabel });\n const fallbackOption = this.page.locator('li', { hasText: optionLabel });\n\n if (await optionRole.isVisible()) {\n await optionRole.click();\n return;\n }\n if (await menuItemRole.isVisible()) {\n await menuItemRole.click();\n return;\n }\n await fallbackOption.first().click();\n }\n\n async verifyDateRangeHeaderContains(label: string): Promise<void> {\n const pane = this.page.locator('#pane-DashboardTab');\n await expect(pane.locator('.title-header', { hasText: label })).toBeVisible();\n }\n\n async verifyOverviewChartsOrEmpty(): Promise<void> {\n const pane = this.page.locator('#pane-DashboardTab');\n const statusOverview = pane.getByText('Deployment status overview', { exact: true }).first().locator('..');\n await this.expectWidgetHasChartOrEmpty(statusOverview);\n\n const numberOfDeployments = pane\n .getByText('Number of deployments over time', { exact: true })\n .first()\n .locator('..');\n await this.expectWidgetHasChartOrEmpty(numberOfDeployments);\n\n const averageDuration = pane\n .getByText('Average deployment duration over time', { exact: true })\n .first()\n .locator('..');\n await this.expectWidgetHasChartOrEmpty(averageDuration);\n }\n\n async verifyDeploymentStatusLegend(): Promise<void> {\n const pane = this.page.locator('#pane-DashboardTab');\n const tile = pane.locator('.deployment-status-overview');\n await expect(tile).toBeVisible();\n const legendItems = tile.locator('.recharts-legend-item-text');\n if (await legendItems.count()) {\n await expect(legendItems.filter({ hasText: 'Successful' }).first()).toBeVisible();\n await expect(legendItems.filter({ hasText: 'Retried' }).first()).toBeVisible();\n await expect(legendItems.filter({ hasText: 'Rollback' }).first()).toBeVisible();\n await expect(legendItems.filter({ hasText: 'Aborted' }).first()).toBeVisible();\n return;\n }\n // No-data state: chart, canvas, or no-data widget must be visible\n const chartOrNoData = tile.locator('svg, canvas, .no-data-widget');\n await expect(chartOrNoData.first()).toBeVisible();\n }\n\n async verifyButtonsFocusable(): Promise<void> {\n const pane = this.page.locator('#pane-DashboardTab');\n const exportButton = pane.getByRole('button', { name: 'Export' });\n const refreshButton = pane.getByRole('button', { name: 'Refresh' });\n await exportButton.focus();\n await expect(exportButton).toBeFocused();\n await refreshButton.focus();\n await expect(refreshButton).toBeFocused();\n }\n\n async verifyDateRangeOptions(): Promise<void> {\n const pane = this.page.locator('#pane-DashboardTab');\n const select = pane.locator('#date-range-input');\n const expectedOptions = [\n 'Current month',\n 'Last 30 days',\n 'Last 90 days',\n 'Last 180 days',\n 'Last 360 days',\n 'Custom date range',\n ];\n for (const option of expectedOptions) {\n await expect(select.locator(`option:has-text(\"${option}\")`)).toBeAttached();\n }\n }\n\n async verifyLast6MonthsSection(): Promise<void> {\n const pane = this.page.locator('#pane-DashboardTab');\n const trendBlock = pane.locator('.time-period-section.trend-block');\n await expect(trendBlock).toBeVisible();\n await expect(trendBlock.locator('h1.time-period-text')).toContainText('Last 6 months');\n const numDeployments = trendBlock.locator('.number-of-deployments-over-time');\n const avgDuration = trendBlock.locator('.average-deployment-duration-over-time');\n await expect(numDeployments).toBeVisible();\n await expect(avgDuration).toBeVisible();\n }\n\n async verifyKpiTileNumbers(): Promise<void> {\n const pane = this.page.locator('#pane-DashboardTab');\n const tiles = [\n pane.locator('.successful.text-widget'),\n pane.locator('.retried.text-widget'),\n pane.locator('.rollback.text-widget'),\n pane.locator('.aborted.text-widget'),\n ];\n for (const tile of tiles) {\n await expect(tile).toBeVisible();\n await expect(tile.locator('.number')).toBeVisible();\n }\n }\n\n async verifyCustomDateRangeInputs(): Promise<void> {\n const pane = this.page.locator('#pane-DashboardTab');\n await pane.locator('#date-range-input').selectOption({ label: 'Custom date range' });\n await expect(pane.locator('.custom-date-range')).toBeVisible();\n await expect(pane.locator('#custom-range-start-date')).toBeVisible();\n await expect(pane.locator('#custom-range-end-date')).toBeVisible();\n // Restore default\n await pane.locator('#date-range-input').selectOption({ label: 'Current month' });\n }\n\n private async expectCardHasDataOrEmpty(card: Locator): Promise<void> {\n const tableRows = card.locator('table tbody tr');\n if (await tableRows.count()) {\n await expect(tableRows.first()).toBeVisible();\n return;\n }\n\n const rowData = card.locator('.row-data');\n if (await rowData.count()) {\n await expect(rowData.first()).toBeAttached();\n return;\n }\n\n await expect(card.getByText('No data available for the current period', { exact: true })).toBeVisible();\n }\n\n private async expectWidgetHasChartOrEmpty(widget: Locator): Promise<void> {\n const chart = widget.locator('svg, canvas');\n const noData = widget.getByText('No data available for the current period', { exact: true });\n const chartVisible = await chart.first().isVisible();\n const noDataVisible = await noData.isVisible();\n expect(chartVisible || noDataVisible).toBeTruthy();\n }\n}\n","import { expect, type Locator } from '@playwright/test';\nimport { WithPage } from '../withPage';\n\nexport class ReportsDeploymentsPage extends WithPage {\n private getPane(): Locator {\n return this.page.locator('#pane-DeploymentsTab');\n }\n\n private getPagination(): Locator {\n return this.getPane().locator('.react-bootstrap-table-pagination');\n }\n\n private getTableBody(): Locator {\n return this.getPane().locator('.react-bootstrap-table tbody');\n }\n\n private getLastUpdated(): Locator {\n return this.getPane().locator('.last-updated-component');\n }\n\n private async resolveDateField(containerSelector: string): Promise<Locator> {\n const container = this.getPane().locator(containerSelector);\n const input = container.locator('input');\n if (await input.count()) {\n return input.first();\n }\n return container;\n }\n\n async verifySelected(): Promise<void> {\n const pane = this.getPane();\n await expect(pane).toBeVisible();\n await expect(this.page.getByText('Deployments', { exact: true })).toBeVisible();\n }\n\n async verifyFiltersVisible(): Promise<void> {\n const pane = this.getPane();\n const filtersPanel = pane.locator('.xl-react-redux-table-filters-panel');\n await expect(filtersPanel).toBeVisible();\n await expect(pane.locator('.deployment-task-filter-start-date')).toBeVisible();\n await expect(pane.locator('.deployment-task-filter-end-date')).toBeVisible();\n await expect(pane.locator('.deployment-task-filter-task-id input[placeholder=\"Search\"]')).toBeVisible();\n await expect(pane.locator('.deployment-task-filter-worker input[placeholder=\"Search\"]')).toBeVisible();\n await expect(pane.locator('.deployment-task-filter-applications .react-tagsinput-input')).toBeVisible();\n await expect(pane.locator('.deployment-task-filter-environments .react-tagsinput-input')).toBeVisible();\n await expect(pane.locator('.deployment-task-filter-state .react-tagsinput-input')).toBeVisible();\n await expect(pane.locator('.deployment-task-filter-types .react-tagsinput-input')).toBeVisible();\n const tasksFilterInput = pane.locator('.deployment-task-filter-tasks .react-tagsinput-input');\n if (await tasksFilterInput.count()) {\n await expect(tasksFilterInput).toBeVisible();\n }\n }\n\n async verifyLastUpdatedAndRefresh(): Promise<void> {\n const pane = this.getPane();\n const lastUpdated = this.getLastUpdated();\n await expect(lastUpdated).toBeVisible();\n await expect(lastUpdated).not.toHaveText('');\n const refreshButton = pane.getByRole('button', { name: 'Refresh' });\n await refreshButton.click();\n await expect(lastUpdated).toBeVisible();\n }\n\n async verifyTableHasRowsOrEmpty(): Promise<void> {\n const pane = this.getPane();\n const table = pane.locator('table.table-striped');\n await expect(table).toBeVisible();\n const rows = this.getTableBody().locator('tr');\n const noDataCell = this.getTableBody().locator('tr td.react-bs-table-no-data');\n const emptyState = pane.getByText(/No data/i);\n\n await expect(async () => {\n if (await rows.count()) {\n return true;\n }\n if ((await noDataCell.count()) > 0 && (await noDataCell.first().isVisible())) {\n return true;\n }\n if ((await emptyState.count()) > 0 && (await emptyState.first().isVisible())) {\n return true;\n }\n return false;\n }).toBeTruthy();\n }\n\n async hideFilters(): Promise<void> {\n const pane = this.getPane();\n const filtersPanel = pane.locator('.xl-react-redux-table-filters-panel');\n const hideFiltersButton = pane.getByRole('button', { name: 'Hide filters' });\n await expect(filtersPanel).toBeVisible();\n await hideFiltersButton.click();\n await expect(filtersPanel).toBeHidden();\n }\n\n async showFilters(): Promise<void> {\n const pane = this.getPane();\n const filtersPanel = pane.locator('.xl-react-redux-table-filters-panel');\n const showFiltersButton = pane.getByRole('button', { name: 'Show filters' });\n if (await filtersPanel.isVisible()) {\n return;\n }\n\n for (let attempt = 0; attempt < 3; attempt += 1) {\n if (await showFiltersButton.isVisible()) {\n await showFiltersButton.click({ force: true });\n }\n if (await filtersPanel.isVisible()) {\n return;\n }\n await this.page.waitForTimeout(300);\n }\n\n await expect(filtersPanel).toBeVisible();\n }\n\n async ensureFiltersVisible(): Promise<void> {\n const pane = this.getPane();\n const filtersPanel = pane.locator('.xl-react-redux-table-filters-panel');\n if (await filtersPanel.isVisible()) {\n return;\n }\n const showFiltersButton = pane.getByRole('button', { name: 'Show filters' });\n if (await showFiltersButton.isVisible()) {\n await showFiltersButton.click({ force: true });\n }\n await expect(filtersPanel).toBeVisible();\n }\n\n async clickRefresh(): Promise<void> {\n const pane = this.getPane();\n await pane.getByRole('button', { name: 'Refresh' }).click();\n }\n\n async expectTotal(total: number): Promise<void> {\n await expect(this.getPagination().locator('> div').filter({ hasText: 'Total:' })).toContainText(`Total: ${total}`);\n }\n\n async expectNumberOfRows(count: number): Promise<void> {\n await this.waitForTableReady();\n await expect(this.getTableBody().locator('tr')).toHaveCount(count);\n }\n\n async expectAtLeastNumberOfRows(count: number): Promise<void> {\n await this.waitForTableReady();\n await expect(async () => {\n const total = await this.getTableBody().locator('tr').count();\n expect(total).toBeGreaterThanOrEqual(count);\n }).toPass({ timeout: 30000 });\n }\n\n async expectAtLeastTotal(count: number): Promise<void> {\n await this.waitForTableReady();\n await expect(async () => {\n const text = await this.getPagination().locator('> div').filter({ hasText: 'Total:' }).textContent();\n const match = text?.match(/Total:\\s*(\\d+)/);\n const total = match ? Number(match[1]) : 0;\n expect(total).toBeGreaterThanOrEqual(count);\n }).toPass();\n }\n\n async expectValue(row: number, column: string, expected: string): Promise<void> {\n const cell = this.getTableBody().locator(`tr:nth-child(${row}) td.report-table-${column}`);\n await expect(cell).toHaveText(expected);\n }\n\n async expectValueContains(row: number, column: string, expected: string): Promise<void> {\n const cell = this.getTableBody().locator(`tr:nth-child(${row}) td.report-table-${column}`);\n await expect(cell).toContainText(expected);\n }\n\n async sortBy(column: string): Promise<void> {\n const header = this.getPane().locator(`.react-bootstrap-table thead th.report-table-${column}`);\n await header.click();\n }\n\n async isAscendingSorted(column: string): Promise<void> {\n const sortOrder = this.getPane().locator(\n `.react-bootstrap-table thead th.report-table-${column} .react-bootstrap-table-sort-order`,\n );\n await expect(sortOrder).toBeVisible();\n }\n\n async getColumnValues(column: string): Promise<string[]> {\n await this.waitForTableReady();\n const cells = this.getTableBody().locator(`tr td.report-table-${column}`);\n const count = await cells.count();\n const values: string[] = [];\n for (let i = 0; i < count; i += 1) {\n values.push((await cells.nth(i).textContent())?.trim() ?? '');\n }\n return values;\n }\n\n async getLastPageNumber(): Promise<number> {\n await this.waitForTableReady();\n const links = this.getPagination().getByRole('list').getByRole('link');\n const count = await links.count();\n if (count < 2) return 1;\n // links order on page 1: [1, 2, ..., n, >] — last numeric is nth(count-2)\n const text = await links.nth(count - 2).textContent();\n const num = Number(text?.trim());\n return Number.isFinite(num) && num > 0 ? num : 1;\n }\n\n async getTotalCount(): Promise<number> {\n await this.waitForTableReady();\n const text = await this.getPagination().locator('> div').filter({ hasText: 'Total:' }).textContent();\n const match = text?.match(/Total:\\s*(\\d+)/);\n return match ? Number(match[1]) : 0;\n }\n\n async expectPage(page: number): Promise<void> {\n await expect(async () => {\n const pagination = this.getPagination();\n // primary: react-bootstrap li.active with child link\n const activeLink = pagination.locator('li.active').getByRole('link', { name: page.toString(), exact: true });\n if ((await activeLink.count()) > 0) return;\n // fallback: aria-current=\"page\"\n const ariaCurrent = pagination.locator('[aria-current=\"page\"]').filter({ hasText: page.toString() });\n if ((await ariaCurrent.count()) > 0) return;\n throw new Error(`Page ${page} not active`);\n }).toPass({ timeout: 30000 });\n }\n\n async goToPage(page: number): Promise<void> {\n await this.getPagination().getByRole('link', { name: page.toString() }).click();\n }\n\n async goToFirstPage(): Promise<void> {\n const firstLink = this.getPagination().getByRole('link', { name: '<<' });\n if (await firstLink.count()) {\n await firstLink.click();\n } else {\n await this.getPagination().getByRole('link', { name: '1', exact: true }).click();\n }\n }\n\n async goToLastPage(): Promise<void> {\n const lastLink = this.getPagination().getByRole('link', { name: '>>' });\n if (await lastLink.count()) {\n await lastLink.click();\n } else {\n const links = this.getPagination().getByRole('list').getByRole('link');\n const count = await links.count();\n // last numeric link is second-to-last (last is '>')\n await links.nth(count - 2).click();\n }\n }\n\n async goToPreviousPage(): Promise<void> {\n await this.getPagination().getByRole('link', { name: '<', exact: true }).click();\n }\n\n async goToNextPage(): Promise<void> {\n await this.getPagination().getByRole('link', { name: '>', exact: true }).click();\n }\n\n async expectPageLinkVisible(pageNumber: number): Promise<void> {\n await expect(this.getPagination().getByRole('link', { name: pageNumber.toString(), exact: true })).toBeVisible();\n }\n\n async expectPaginationLinksVisible(): Promise<void> {\n await expect(this.getPagination().getByRole('link', { name: '>', exact: true })).toBeVisible();\n }\n\n async expectPaginationLinksHidden(): Promise<void> {\n await expect(this.getPagination().getByRole('link', { name: '>', exact: true })).toHaveCount(0);\n }\n\n async expectPageSize(size: number): Promise<void> {\n await expect(this.getPagination().getByRole('button', { name: size.toString(), exact: true })).toBeVisible();\n }\n\n async expectPageSizes(sizes: number[]): Promise<void> {\n await this.openPageSizeMenu();\n const menu = this.getPagination().getByRole('menu');\n await expect(menu.getByRole('menuitem')).toHaveCount(sizes.length);\n for (const size of sizes) {\n await expect(menu.getByRole('menuitem', { name: size.toString(), exact: true })).toBeVisible();\n }\n await this.closePageSizeMenu();\n }\n\n async setPageSize(size: number): Promise<void> {\n await this.openPageSizeMenu();\n await this.getPagination().getByRole('menu').getByRole('menuitem', { name: size.toString(), exact: true }).click();\n await this.waitForTableReady();\n }\n\n async shouldHaveScrollBar(): Promise<void> {\n await this.waitForTableReady();\n const container = this.getPane().locator('div.report');\n const overflowX = await container.evaluate((el) => window.getComputedStyle(el).overflowX);\n expect(['auto', 'scroll']).toContain(overflowX);\n }\n\n async setStartDate(value: string): Promise<void> {\n const field = await this.resolveDateField('.deployment-task-filter-start-date');\n await field.click();\n await field.fill(value);\n await this.getLastUpdated().click({ force: true });\n }\n\n async setEndDate(value: string): Promise<void> {\n const field = await this.resolveDateField('.deployment-task-filter-end-date');\n await field.click();\n await field.fill(value);\n await this.getLastUpdated().click({ force: true });\n }\n\n async expectStartDateValue(value: string): Promise<void> {\n await this.expectDateFieldValue('.deployment-task-filter-start-date', value);\n }\n\n async expectEndDateValue(value: string): Promise<void> {\n await this.expectDateFieldValue('.deployment-task-filter-end-date', value);\n }\n\n async checkInvalidStartDateError(): Promise<void> {\n const field = await this.resolveDateField('.deployment-task-filter-start-date');\n await field.click(); // opens calendar\n await field.press('End');\n await field.press('a'); // append invalid char\n await this.page.keyboard.press('Escape'); // close calendar → error appears below field\n await expect(this.getPane().getByText('Example: Dec 1, 2018').first()).toBeVisible();\n }\n\n async checkInvalidEndDateError(): Promise<void> {\n const field = await this.resolveDateField('.deployment-task-filter-end-date');\n await field.click(); // opens calendar\n await field.press('End');\n await field.press('b'); // append invalid char\n await this.page.keyboard.press('Escape'); // close calendar → error appears below field\n await expect(this.getPane().getByText('Example: Dec 1, 2018').first()).toBeVisible();\n }\n\n async expectNoStartDateError(): Promise<void> {\n await expect(this.getPane().getByText('Example: Dec 1, 2018')).toHaveCount(0);\n }\n\n async expectNoEndDateError(): Promise<void> {\n await expect(this.getPane().getByText('Example: Dec 1, 2018')).toHaveCount(0);\n }\n\n async selectRadioFilter(label: 'None' | 'Application(s)' | 'Environment(s)'): Promise<void> {\n await this.ensureFiltersVisible();\n const pane = this.getPane();\n const radioGroup = pane.locator('.xl-react-widget-radio-group');\n const labelLocator = radioGroup.locator(`label[data='${label}']`);\n if (await labelLocator.count()) {\n await labelLocator.click();\n return;\n }\n\n const fallbackByText = radioGroup.getByText(label, { exact: true });\n if (await fallbackByText.count()) {\n await fallbackByText.click();\n return;\n }\n const ariaRadio = pane.locator('[role=\"radio\"]', { hasText: label });\n if (await ariaRadio.count()) {\n await ariaRadio.first().click();\n }\n }\n\n async expectApplicationsRadioSelected(): Promise<void> {\n const radio = this.getPane().locator('.xl-react-widget-radio-group label[data=\"Application(s)\"]');\n if ((await radio.count()) === 0) {\n return;\n }\n await expect(radio).toHaveAttribute('style', /background-color/);\n }\n\n async selectTagsFilterApplications(text: string, optionName: string): Promise<void> {\n await this.selectTagsFilterFirstSuggestion(\n '.deployment-task-filter-applications .react-tagsinput',\n text,\n optionName,\n );\n }\n\n async selectTagsFilterEnvironments(text: string, optionName: string): Promise<void> {\n await this.selectTagsFilterFirstSuggestion(\n '.deployment-task-filter-environments .react-tagsinput',\n text,\n optionName,\n );\n }\n\n async selectStatesTagsFilterFirstSuggestion(text: string, optionName: string): Promise<void> {\n await this.selectTagsFilterFirstSuggestion('.deployment-task-filter-state .react-tagsinput', text, optionName);\n }\n\n async clearStatesTagsFirstTag(): Promise<void> {\n const remove = this.getPane().locator(\n '.deployment-task-filter-state .react-tagsinput-tag:nth-child(1) .react-tagsinput-remove',\n );\n if (await remove.count()) {\n await remove.click();\n }\n }\n\n async clearApplicationsTagsFirstTag(): Promise<void> {\n const remove = this.getPane().locator(\n '.deployment-task-filter-applications .react-tagsinput-tag:nth-child(1) .react-tagsinput-remove',\n );\n if (await remove.count()) {\n await remove.click();\n }\n }\n\n async clearEnvironmentsTagsFirstTag(): Promise<void> {\n const remove = this.getPane().locator(\n '.deployment-task-filter-environments .react-tagsinput-tag:nth-child(1) .react-tagsinput-remove',\n );\n if (await remove.count()) {\n await remove.click();\n }\n }\n\n async setTaskId(taskId: string): Promise<void> {\n const input = this.getPane().locator('.deployment-task-filter-task-id input');\n await input.fill(taskId);\n await expect(input).toHaveValue(taskId);\n }\n\n async setWorkerName(workerName: string): Promise<void> {\n const input = this.getPane().locator('.deployment-task-filter-worker input');\n await input.fill(workerName);\n await expect(input).toHaveValue(workerName);\n }\n\n async clearWorkerName(): Promise<void> {\n await this.setWorkerName('');\n }\n\n async expectTagAdded(tagTitle: string): Promise<void> {\n const tags = this.getPane().locator('.xl-react-widget-tags .react-tagsinput-tag');\n const byTitle = tags.locator(`[title='${tagTitle}']`);\n const byContainsTitle = tags.filter({ hasText: tagTitle.split('/').pop() ?? tagTitle });\n const count = await byTitle.count();\n if (count > 0) {\n await expect(byTitle.first()).toBeVisible();\n } else {\n await expect(byContainsTitle.first()).toBeVisible();\n }\n }\n\n private async selectTagsFilterFirstSuggestion(\n filterSelector: string,\n text: string,\n optionName: string,\n ): Promise<void> {\n const pane = this.getPane();\n const filter = pane.locator(filterSelector);\n const input = filter.locator('.xl-react-widget-autocomplete .react-tagsinput-input');\n await input.click({ force: true });\n await input.fill(text);\n const suggestionList = pane.locator('.xl-react-autocomplete-suggestion-list');\n await expect(suggestionList).toBeVisible();\n // Try .yt-option first (State/Type filters), then aria grid row (Application/Environment filters)\n const optionByTitle = suggestionList.locator(`.yt-option[title=\"${optionName}\"]`);\n const optionByText = suggestionList.locator('.yt-option', { hasText: optionName });\n const gridOption = suggestionList.getByRole('rowgroup').getByText(optionName, { exact: false });\n let option;\n if (await optionByTitle.count()) {\n option = optionByTitle.first();\n } else if (await optionByText.count()) {\n option = optionByText.first();\n } else {\n option = gridOption.first();\n }\n await expect(option).toBeVisible();\n const iconCheckbox = option.locator('i.xl-icon.icon-s.checkbox');\n if (await iconCheckbox.count()) {\n await iconCheckbox.click();\n } else {\n await option.click();\n }\n await this.page.locator('body').click({ position: { x: 10, y: 10 } });\n await this.expectTagAdded(optionName);\n }\n\n private async waitForTableReady(): Promise<void> {\n // Poll until loading indicator is gone AND table content (rows or empty state) is present\n await expect(async () => {\n const loading = await this.getPane().getByText('Data loading').count();\n if (loading > 0) throw new Error('Still loading');\n const rows = await this.getTableBody().locator('tr').count();\n const noData = await this.getTableBody().locator('td.react-bs-table-no-data').count();\n if (rows === 0 && noData === 0) throw new Error('No table content yet');\n }).toPass({ timeout: 60000 });\n }\n\n private async openPageSizeMenu(): Promise<void> {\n const btn = this.getPagination().getByRole('toolbar').getByRole('button');\n const expanded = await btn.getAttribute('aria-expanded');\n if (expanded !== 'true') {\n await btn.click();\n await expect(this.getPagination().getByRole('menu')).toBeVisible();\n }\n }\n\n private async closePageSizeMenu(): Promise<void> {\n const btn = this.getPagination().getByRole('toolbar').getByRole('button');\n const expanded = await btn.getAttribute('aria-expanded');\n if (expanded === 'true') {\n await btn.click();\n await expect(this.getPagination().getByRole('menu')).toBeHidden();\n }\n }\n\n private async expectDateFieldValue(containerSelector: string, value: string): Promise<void> {\n const container = this.getPane().locator(containerSelector);\n const input = container.locator('input');\n if ((await input.count()) > 0) {\n await expect(input.first()).toHaveValue(value);\n return;\n }\n await expect(container).toHaveValue(value);\n }\n}\n","import { ExplorerPage } from '../explorerPage';\n\nexport class InfrastructureEditPermissionsPage extends ExplorerPage {\n /* Navigates to the Infrastructure Edit Permissions page via the tree context menu */\n async navigateToPage(): Promise<void> {\n await this.openRootContextMenu('Infrastructure');\n await this.page.getByRole('link', { name: 'Edit Permissions' }).click();\n }\n\n async navigateToInfraEditPermissionPage(): Promise<void> {\n await this.navigateToPage();\n }\n\n /* Gives the permissions to a role */\n async givePermissionsToRole(roleName: string): Promise<void> {\n const filter = this.page.getByPlaceholder('Filter by roles').first();\n await filter.waitFor({ state: 'visible' });\n await filter.scrollIntoViewIfNeeded();\n await filter.fill(roleName);\n const roleRow = this.page.locator('table.table-striped tbody tr').first();\n const checkboxes = roleRow.locator('input[type=\"checkbox\"]');\n const count = await checkboxes.count();\n for (let i = 0; i < count; i += 1) {\n const checkbox = checkboxes.nth(i);\n if (!(await checkbox.isChecked())) {\n await checkbox.check();\n }\n }\n await this.page.getByRole('button', { name: 'Save and close' }).click();\n await this.handleSaveToastOrAlreadyExists();\n }\n}\n","import { ExplorerPage } from '../explorerPage';\n\nexport class EnvironmentEditPermissionsPage extends ExplorerPage {\n /* Navigates to the Environments Edit Permissions page via the tree context menu */\n async navigateToPage(): Promise<void> {\n await this.openRootContextMenu('Environments');\n await this.page.getByRole('link', { name: 'Edit Permissions' }).click();\n }\n\n async navigateToEnvEditPermissionPage(): Promise<void> {\n await this.navigateToPage();\n }\n\n /* Gives the permissions to a role */\n async givePermissionsToRole(roleName: string): Promise<void> {\n const filter = this.page.getByPlaceholder('Filter by roles').first();\n await filter.waitFor({ state: 'visible' });\n await filter.scrollIntoViewIfNeeded();\n await filter.fill(roleName);\n const roleRow = this.page.locator('table.table-striped tbody tr').first();\n const labels = ['deploy initial', 'read', 'repo edit'];\n const headers = this.page.locator('table.table-striped thead th');\n const headerCount = await headers.count();\n const headerTexts: string[] = [];\n for (let i = 0; i < headerCount; i += 1) {\n headerTexts.push((await headers.nth(i).innerText()).trim().toLowerCase());\n }\n for (const label of labels) {\n const colIndex = headerTexts.findIndex((text) => text.includes(label));\n if (colIndex === -1) {\n throw new Error(`Permission column not found: ${label}`);\n }\n const checkbox = roleRow.locator('td').nth(colIndex).locator('input[type=\"checkbox\"]');\n if (!(await checkbox.isChecked())) {\n await checkbox.check();\n }\n }\n await this.page.getByRole('button', { name: 'Save and close' }).click();\n await this.handleSaveToastOrAlreadyExists();\n }\n}\n","import { ExplorerPage } from '../explorerPage';\n\nexport class ApplicationEditPermissionsPage extends ExplorerPage {\n /* Navigates to the Applications Edit Permissions page via the tree context menu */\n async navigateToPage(): Promise<void> {\n await this.openRootContextMenu('Applications');\n await this.page.getByRole('link', { name: 'Edit Permissions' }).click();\n }\n\n async navigateToAppEditPermissionPage(): Promise<void> {\n await this.navigateToPage();\n }\n\n /* Gives the permissions to a role */\n async givePermissionsToRole(roleName: string): Promise<void> {\n const filter = this.page.getByPlaceholder('Filter by roles').first();\n await filter.waitFor({ state: 'visible' });\n await filter.scrollIntoViewIfNeeded();\n await filter.fill(roleName);\n const roleRow = this.page.locator('table.table-striped tbody tr').first();\n const labels = ['read', 'repo edit'];\n const headers = this.page.locator('table.table-striped thead th');\n const headerCount = await headers.count();\n const headerTexts: string[] = [];\n for (let i = 0; i < headerCount; i += 1) {\n headerTexts.push((await headers.nth(i).innerText()).trim().toLowerCase());\n }\n for (const label of labels) {\n const colIndex = headerTexts.findIndex((text) => text.includes(label));\n if (colIndex === -1) {\n throw new Error(`Permission column not found: ${label}`);\n }\n const checkbox = roleRow.locator('td').nth(colIndex).locator('input[type=\"checkbox\"]');\n if (!(await checkbox.isChecked())) {\n await checkbox.check();\n }\n }\n await this.page.getByRole('button', { name: 'Save and close' }).click();\n await this.handleSaveToastOrAlreadyExists();\n }\n}\n","import { ExplorerPage } from '../explorerPage';\n\nexport class ConfigurationEditPermissionsPage extends ExplorerPage {\n /* Navigates to the Configuration Edit Permissions page via the tree context menu */\n async navigateToPage(): Promise<void> {\n await this.openRootContextMenu('Configuration');\n await this.page.getByRole('link', { name: 'Edit Permissions' }).click();\n }\n\n async navigateToConfigurationEditPermissionsPage(): Promise<void> {\n await this.navigateToPage();\n }\n\n /* Gives the permissions to a role */\n async givePermissionsToRole(roleName: string): Promise<void> {\n const filter = this.page.getByPlaceholder('Filter by roles').first();\n await filter.waitFor({ state: 'visible' });\n await filter.scrollIntoViewIfNeeded();\n await filter.fill(roleName);\n const roleRow = this.page.locator('table.table-striped tbody tr').first();\n const checkboxes = roleRow.locator('input[type=\"checkbox\"]');\n const count = await checkboxes.count();\n for (let i = 0; i < count; i += 1) {\n const checkbox = checkboxes.nth(i);\n if (!(await checkbox.isChecked())) {\n await checkbox.check();\n }\n }\n await this.page.getByRole('button', { name: 'Save and close' }).click();\n await this.handleSaveToastOrAlreadyExists();\n }\n}\n","import { expect } from '@playwright/test';\nimport type { Page } from '@playwright/test';\nimport { WithPage } from './withPage';\n\nexport class LoginPage extends WithPage {\n /* Login with username and password*/\n async login(userName: string, password: string, pageOverride?: Page): Promise<void> {\n const p = pageOverride ?? this.page;\n await p.goto('/#/login');\n await expect(p).toHaveTitle('Digital.ai Deploy');\n await p.getByPlaceholder('user').fill(userName, { timeout: 10000 });\n await p.getByPlaceholder('Password').fill(password, { timeout: 10000 });\n await p.getByRole('button', { name: 'Log in' }).click({ timeout: 10000 });\n }\n\n /* Verify invalid password message */\n async verifyInvalidPasswordMessage(): Promise<void> {\n const errorMessage = this.page.getByText('The username and/or password you have entered is incorrect.');\n await expect(errorMessage).toBeVisible();\n }\n /* Verify the error message shown when a disabled user attempts to log in */\n async verifyDisabledUserLoginError(pageOverride?: Page): Promise<void> {\n const p = pageOverride ?? this.page;\n const errorMessage = p.getByText(\n 'Your account is currently disabled. Please contact your Deploy administrator for further assistance.',\n );\n await expect(errorMessage).toBeVisible();\n }\n\n /* Verify the error message shown when a user without login permission attempts to log in */\n async verifyNoLoginPermissionError(pageOverride?: Page): Promise<void> {\n const p = pageOverride ?? this.page;\n const errorMessage = p.locator('div.error-message.permission-error');\n await expect(errorMessage).toBeVisible({ timeout: 20000 });\n }\n\n /* Logout as authenticated user */\n async logout(): Promise<void> {\n await this.page.locator('button.dot-avatar').click();\n await this.page.getByText('Log out', { exact: true }).click();\n await this.page.waitForURL('**/#/login', { timeout: 15000 });\n await this.page.reload();\n await this.page.waitForLoadState('networkidle');\n await this.page.waitForURL('**/#/login', { timeout: 15000 });\n await this.page.getByPlaceholder('user').waitFor({ state: 'visible', timeout: 15000 });\n }\n}\n"],"names":[],"version":3,"file":"main.js.map"}
|