che-server/tests/e2e/pageobjects/dashboard/Workspaces.ts

190 lines
8.7 KiB
TypeScript

/*********************************************************************
* Copyright (c) 2019 Red Hat, Inc.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
**********************************************************************/
import { injectable, inject } from 'inversify';
import { DriverHelper } from '../../utils/DriverHelper';
import { CLASSES } from '../../inversify.types';
import { By } from 'selenium-webdriver';
import { Logger } from '../../utils/Logger';
import { TimeoutConstants } from '../../TimeoutConstants';
export enum WorkspaceStatusUI {
Running = 'green',
Stopped = 'grey'
}
@injectable()
export class Workspaces {
private static readonly ADD_WORKSPACE_BUTTON_XPATH: string = `//button[text()='Add Workspace']`;
constructor(@inject(CLASSES.DriverHelper) private readonly driverHelper: DriverHelper) { }
async waitPage(timeout: number = TimeoutConstants.TS_SELENIUM_LOAD_PAGE_TIMEOUT) {
Logger.debug('Workspaces.waitPage');
await this.driverHelper.waitVisibility(By.xpath(Workspaces.ADD_WORKSPACE_BUTTON_XPATH), timeout);
}
async clickAddWorkspaceButton(timeout: number = TimeoutConstants.TS_CLICK_DASHBOARD_ITEM_TIMEOUT) {
Logger.debug('Workspaces.clickAddWorkspaceButton');
await this.driverHelper.waitAndClick(By.xpath(Workspaces.ADD_WORKSPACE_BUTTON_XPATH), timeout);
}
async clickOpenButton(workspaceName: string, timeout: number = TimeoutConstants.TS_SELENIUM_LOAD_PAGE_TIMEOUT) {
Logger.debug('Workspaces.clickOpenButton');
await this.driverHelper.waitAndClick(this.getOpenButtonLocator(workspaceName), timeout);
}
async waitWorkspaceListItem(workspaceName: string, timeout: number = TimeoutConstants.TS_COMMON_DASHBOARD_WAIT_TIMEOUT) {
Logger.debug(`Workspaces.waitWorkspaceListItem "${workspaceName}"`);
const workspaceListItemLocator: By = By.xpath(this.getWorkspaceListItemLocator(workspaceName));
await this.driverHelper.waitVisibility(workspaceListItemLocator, timeout);
}
async waitWorkspaceWithRunningStatus(workspaceName: string, timeout: number = TimeoutConstants.TS_COMMON_DASHBOARD_WAIT_TIMEOUT) {
Logger.debug(`Workspaces.waitWorkspaceWithRunningStatus "${workspaceName}"`);
const runningStatusLocator: By = this.getWorkspaceStatusLocator(workspaceName, WorkspaceStatusUI.Running);
await this.driverHelper.waitVisibility(runningStatusLocator, timeout);
}
async waitWorkspaceWithStoppedStatus(workspaceName: string, timeout: number = TimeoutConstants.TS_DASHBOARD_WORKSPACE_STOP_TIMEOUT) {
Logger.debug(`Workspaces.waitWorkspaceWithStoppedStatus "${workspaceName}"`);
const stoppedStatusLocator: By = this.getWorkspaceStatusLocator(workspaceName, WorkspaceStatusUI.Stopped);
await this.driverHelper.waitVisibility(stoppedStatusLocator, timeout);
}
async clickWorkspaceListItem(workspaceName: string, timeout: number = TimeoutConstants.TS_CLICK_DASHBOARD_ITEM_TIMEOUT) {
Logger.debug(`Workspaces.clickWorkspaceListItem "${workspaceName}"`);
const workspaceListItemLocator: By = By.xpath(this.getWorkspaceListItemLocator(workspaceName));
await this.driverHelper.waitAndClick(workspaceListItemLocator, timeout);
}
async clickActionsButton(workspaceName: string) {
Logger.debug(`Workspaces.clickActionsButton of the '${workspaceName}' list item`);
await this.driverHelper.waitAndClick(this.getActionsLocator(workspaceName));
}
async waitActionsPopup(workspaceName: string, timeout: number = TimeoutConstants.TS_CONTEXT_MENU_TIMEOUT) {
Logger.debug(`Workspaces.waitActionsPopup of the '${workspaceName}' list item`);
await this.driverHelper.waitVisibility(this.getExpandedActionsLocator(workspaceName), timeout);
await this.driverHelper.wait(5000);
}
async openActionsPopup(workspaceName: string, timeout: number = TimeoutConstants.TS_CONTEXT_MENU_TIMEOUT) {
Logger.debug(`Workspaces.openActionsPopup for the '${workspaceName}' list item`);
await this.clickActionsButton(workspaceName);
await this.waitActionsPopup(workspaceName, timeout);
}
async clickActionsDeleteButton(workspaceName: string) {
Logger.debug(`Workspaces.clickActionsDeleteButton for the '${workspaceName}' list item`);
await this.driverHelper.waitAndClick(this.getActionsPopupButtonLocator(workspaceName, 'Delete Workspace'));
}
async clickActionsStopWorkspaceButton(workspaceName: string) {
Logger.debug(`Workspaces.clickActionsStopWorkspaceButton for the '${workspaceName}' list item`);
await this.driverHelper.waitAndClick(this.getActionsPopupButtonLocator(workspaceName, 'Stop Workspace'));
}
async waitDeleteWorkspaceConfirmationWindow(timeout: number = TimeoutConstants.TS_DASHBOARD_WORKSPACE_STOP_TIMEOUT) {
Logger.debug(`Workspaces.waitDeleteWorkspaceConfirmationWindow`);
const confirmationWindowLocator: By = By.xpath(`//div[@aria-label='Delete workspaces confirmation window']`);
await this.driverHelper.waitVisibility(confirmationWindowLocator, timeout);
await this.driverHelper.wait(5000);
}
async clickToDeleteConfirmationCheckbox(timeout: number = TimeoutConstants.TS_DASHBOARD_WORKSPACE_STOP_TIMEOUT) {
Logger.debug(`Workspaces.clickToDeleteConfirmationCheckbox`);
const deleteConfirmationCheckboxLocator: By = By.xpath(`//input[@data-testid='confirmation-checkbox']`);
await this.driverHelper.waitAndClick(deleteConfirmationCheckboxLocator, timeout);
}
async waitAndClickEnabledConfirmationWindowDeleteButton(timeout: number = TimeoutConstants.TS_DASHBOARD_WORKSPACE_STOP_TIMEOUT) {
Logger.debug(`Workspaces.waitEnabledConfirmationWindowDeleteButton`);
const enabledConfirmationWindowDeleteButton: By = By.xpath(`//button[@data-testid='delete-workspace-button' and not(@disabled)]`);
await this.driverHelper.waitAndClick(enabledConfirmationWindowDeleteButton, timeout);
}
async deleteWorkspaceByActionsButton(workspaceName: string, timeout: number = TimeoutConstants.TS_DASHBOARD_WORKSPACE_STOP_TIMEOUT) {
Logger.debug('Workspaces.deleteWorkspaceByActionsButton');
await this.waitWorkspaceListItem(workspaceName, timeout);
await this.openActionsPopup(workspaceName, timeout);
await this.clickActionsDeleteButton(workspaceName);
await this.waitDeleteWorkspaceConfirmationWindow(timeout);
await this.clickToDeleteConfirmationCheckbox(timeout);
await this.waitAndClickEnabledConfirmationWindowDeleteButton(timeout);
}
async stopWorkspaceByActionsButton(workspaceName: string, timeout: number = TimeoutConstants.TS_DASHBOARD_WORKSPACE_STOP_TIMEOUT) {
Logger.debug('Workspaces.stopWorkspaceByActionsButton');
await this.waitWorkspaceListItem(workspaceName, timeout);
await this.openActionsPopup(workspaceName, timeout);
await this.clickActionsStopWorkspaceButton(workspaceName);
}
async waitWorkspaceListItemAbcence(workspaceName: string, timeout: number = TimeoutConstants.TS_COMMON_DASHBOARD_WAIT_TIMEOUT) {
Logger.debug(`Workspaces.waitWorkspaceListItemAbcence "${workspaceName}"`);
const workspaceListItemLocator: By = By.xpath(this.getWorkspaceListItemLocator(workspaceName));
await this.driverHelper.waitDisappearance(workspaceListItemLocator, timeout);
}
private getWorkspaceListItemLocator(workspaceName: string): string {
return `//tr[td/span/a[text()='${workspaceName}']]`;
}
private getWorkspaceStatusLocator(workspaceName: string, workspaceStatus: WorkspaceStatusUI): By {
return By.xpath(`${this.getWorkspaceListItemLocator(workspaceName)}//span[@data-testid='workspace-status-indicator']//*[local-name()='svg' and @fill='${workspaceStatus}']`);
}
private getActionsLocator(workspaceName: string): By {
return By.xpath(`${this.getWorkspaceListItemLocator(workspaceName)}/td/div/button[@aria-label='Actions']`);
}
private getExpandedActionsLocator(workspaceName: string): By {
return By.xpath(`${this.getWorkspaceListItemLocator(workspaceName)}//button[@aria-label='Actions' and @aria-expanded='true']`);
}
private getActionsPopupButtonLocator(workspaceName: string, buttonText: string): By {
return By.xpath(`${this.getWorkspaceListItemLocator(workspaceName)}//li[@role='menuitem']//button[text()='${buttonText}']`);
}
private getOpenButtonLocator(workspaceName: string) {
return By.xpath(`${this.getWorkspaceListItemLocator(workspaceName)}//td[@data-key=5]//a[text()='Open']`);
}
}