From 9a7a77949f383fab9e232508103a7b3690ec68d2 Mon Sep 17 00:00:00 2001 From: mdolhalo Date: Tue, 24 Oct 2023 13:31:09 +0200 Subject: [PATCH 1/7] feat: change Login, Logout, Stop and delete workspace tests to be hooks (suileSetup, suiteTeardown) Signed-off-by: mdolhalo --- tests/e2e/specs/SmokeTest.spec.ts | 8 ++++-- .../dashboard-samples/Documentation.spec.ts | 11 +++++--- .../dashboard-samples/EmptyWorkspace.spec.ts | 23 +++++++++++------ .../specs/dashboard-samples/Quarkus.spec.ts | 22 ++++++++++------ .../RecommendedExtensions.spec.ts | 22 ++++++++++------ .../DevConsoleIntegration.spec.ts | 16 +++++++++--- tests/e2e/specs/factory/Factory.spec.ts | 22 ++++++++++------ .../specs/factory/NoSetupRepoFactory.spec.ts | 24 ++++++++++-------- .../specs/factory/RefusedOAuthFactory.spec.ts | 22 ++++++++++------ .../CreateWorkspaceWithExistedName.spec.ts | 23 +++++++++++------ .../miscellaneous/KubedockPodmanTest.spec.ts | 23 +++++++++++------ .../miscellaneous/PredefinedNamespace.spec.ts | 8 ++++-- .../WorkspaceIdleTimeout.spec.ts | 25 ++++++++++++++----- .../miscellaneous/WorkspaceWithParent.spec.ts | 11 +++++--- tests/e2e/tests-library/LoginTests.ts | 17 ++++++++----- .../tests-library/WorkspaceHandlingTests.ts | 8 ------ tests/e2e/utils/BrowserTabsUtil.ts | 9 ++++++- 17 files changed, 199 insertions(+), 95 deletions(-) diff --git a/tests/e2e/specs/SmokeTest.spec.ts b/tests/e2e/specs/SmokeTest.spec.ts index 4524f708585..7a44f5e03cb 100644 --- a/tests/e2e/specs/SmokeTest.spec.ts +++ b/tests/e2e/specs/SmokeTest.spec.ts @@ -29,7 +29,9 @@ suite(`The SmokeTest userstory ${BASE_TEST_CONSTANTS.TEST_ENVIRONMENT}`, functio FACTORY_TEST_CONSTANTS.TS_SELENIUM_FACTORY_GIT_REPO_URL || 'https://github.com/che-incubator/quarkus-api-example.git'; let projectSection: ViewSection; suite(`Create workspace from factory:${factoryUrl}`, function (): void { - loginTests.loginIntoChe(); + suiteSetup('Login', async function (): Promise { + await loginTests.loginIntoChe(); + }); test(`Create and open new workspace from factory:${factoryUrl}`, async function (): Promise { await workspaceHandlingTests.createAndOpenWorkspaceFromGitRepository(factoryUrl); }); @@ -61,6 +63,8 @@ suite(`The SmokeTest userstory ${BASE_TEST_CONSTANTS.TEST_ENVIRONMENT}`, functio test('Delete the workspace', async function (): Promise { await workspaceHandlingTests.removeWorkspace(WorkspaceHandlingTests.getWorkspaceName()); }); - loginTests.logoutFromChe(); + suiteTeardown('Unregister running workspace', function (): void { + registerRunningWorkspace(''); + }); }); }); diff --git a/tests/e2e/specs/dashboard-samples/Documentation.spec.ts b/tests/e2e/specs/dashboard-samples/Documentation.spec.ts index 8fe3df09fe0..6280c5f538f 100644 --- a/tests/e2e/specs/dashboard-samples/Documentation.spec.ts +++ b/tests/e2e/specs/dashboard-samples/Documentation.spec.ts @@ -65,14 +65,16 @@ suite(`Check links to documentation page in Dashboard ${BASE_TEST_CONSTANTS.TEST ({ webSocketTroubleshooting, workspace, devfile, general, storageTypes } = docs); }); + suiteSetup('Login', async function (): Promise { + await loginTests.loginIntoChe(); + }); + test('Check if product.json config contains correct application version', function (): void { [productVersion, links[1].href, devfile, workspace, general, storageTypes, webSocketTroubleshooting].forEach((e): void => { expect(e, 'Fetched links not matches with tested product version').contains(testingVersion); }); }); - loginTests.loginIntoChe(); - test('Check if documentation section "About" present on Dashboard', async function (): Promise { await dashboard.openAboutMenu(); }); @@ -135,7 +137,10 @@ suite(`Check links to documentation page in Dashboard ${BASE_TEST_CONSTANTS.TEST }); } - loginTests.logoutFromChe(); + suiteTeardown('Open dashboard and close all other tabs', async function (): Promise { + await dashboard.openDashboard(); + await browserTabsUtil.closeAllTabsExceptCurrent(); + }); suiteTeardown('Delete default DevWorkspace', function (): void { kubernetesCommandLineToolsExecutor.deleteDevWorkspace(); diff --git a/tests/e2e/specs/dashboard-samples/EmptyWorkspace.spec.ts b/tests/e2e/specs/dashboard-samples/EmptyWorkspace.spec.ts index 9634cefa7ae..db0c9cccfb8 100644 --- a/tests/e2e/specs/dashboard-samples/EmptyWorkspace.spec.ts +++ b/tests/e2e/specs/dashboard-samples/EmptyWorkspace.spec.ts @@ -9,7 +9,7 @@ **********************************************************************/ import { e2eContainer } from '../../configs/inversify.config'; import { ActivityBar, ViewControl, Workbench } from 'monaco-page-objects'; -import { CLASSES } from '../../configs/inversify.types'; +import { CLASSES, TYPES } from '../../configs/inversify.types'; import { WorkspaceHandlingTests } from '../../tests-library/WorkspaceHandlingTests'; import { Logger } from '../../utils/Logger'; import { ProjectAndFileTests } from '../../tests-library/ProjectAndFileTests'; @@ -17,6 +17,8 @@ import { LoginTests } from '../../tests-library/LoginTests'; import { registerRunningWorkspace } from '../MochaHooks'; import { BrowserTabsUtil } from '../../utils/BrowserTabsUtil'; import { BASE_TEST_CONSTANTS } from '../../constants/BASE_TEST_CONSTANTS'; +import { ITestWorkspaceUtil } from '../../utils/workspace/ITestWorkspaceUtil'; +import { Dashboard } from '../../pageobjects/dashboard/Dashboard'; const stackName: string = 'Empty Workspace'; @@ -25,9 +27,12 @@ suite(`${stackName} test ${BASE_TEST_CONSTANTS.TEST_ENVIRONMENT}`, function (): const projectAndFileTests: ProjectAndFileTests = e2eContainer.get(CLASSES.ProjectAndFileTests); const loginTests: LoginTests = e2eContainer.get(CLASSES.LoginTests); const browserTabsUtil: BrowserTabsUtil = e2eContainer.get(CLASSES.BrowserTabsUtil); + const testWorkspaceUtil: ITestWorkspaceUtil = e2eContainer.get(TYPES.WorkspaceUtil); + const dashboard: Dashboard = e2eContainer.get(CLASSES.Dashboard); - loginTests.loginIntoChe(); - + suiteSetup('Login', async function (): Promise { + await loginTests.loginIntoChe(); + }); test(`Create and open new workspace, stack:${stackName}`, async function (): Promise { await workspaceHandlingTests.createAndOpenWorkspace(stackName); }); @@ -53,14 +58,16 @@ suite(`${stackName} test ${BASE_TEST_CONSTANTS.TEST_ENVIRONMENT}`, function (): } }); - test('Stop the workspace', async function (): Promise { - await workspaceHandlingTests.stopWorkspace(WorkspaceHandlingTests.getWorkspaceName()); + suiteTeardown('Open dashboard and close all other tabs', async function (): Promise { + await dashboard.openDashboard(); await browserTabsUtil.closeAllTabsExceptCurrent(); }); - test('Delete the workspace', async function (): Promise { - await workspaceHandlingTests.removeWorkspace(WorkspaceHandlingTests.getWorkspaceName()); + suiteTeardown('Stop and delete the workspace by API', function (): void { + testWorkspaceUtil.stopAndDeleteWorkspaceByName(WorkspaceHandlingTests.getWorkspaceName()); }); - loginTests.logoutFromChe(); + suiteTeardown('Unregister running workspace', function (): void { + registerRunningWorkspace(''); + }); }); diff --git a/tests/e2e/specs/dashboard-samples/Quarkus.spec.ts b/tests/e2e/specs/dashboard-samples/Quarkus.spec.ts index bb524d37037..a6586813c1f 100644 --- a/tests/e2e/specs/dashboard-samples/Quarkus.spec.ts +++ b/tests/e2e/specs/dashboard-samples/Quarkus.spec.ts @@ -12,12 +12,14 @@ import { ViewSection } from 'monaco-page-objects'; import { registerRunningWorkspace } from '../MochaHooks'; import { LoginTests } from '../../tests-library/LoginTests'; import { e2eContainer } from '../../configs/inversify.config'; -import { CLASSES } from '../../configs/inversify.types'; +import { CLASSES, TYPES } from '../../configs/inversify.types'; import { WorkspaceHandlingTests } from '../../tests-library/WorkspaceHandlingTests'; import { ProjectAndFileTests } from '../../tests-library/ProjectAndFileTests'; import { BASE_TEST_CONSTANTS } from '../../constants/BASE_TEST_CONSTANTS'; import { BrowserTabsUtil } from '../../utils/BrowserTabsUtil'; import { expect } from 'chai'; +import { ITestWorkspaceUtil } from '../../utils/workspace/ITestWorkspaceUtil'; +import { Dashboard } from '../../pageobjects/dashboard/Dashboard'; const stackName: string = 'Java 11 with Quarkus'; @@ -26,11 +28,15 @@ suite(`The ${stackName} userstory ${BASE_TEST_CONSTANTS.TEST_ENVIRONMENT}`, func const workspaceHandlingTests: WorkspaceHandlingTests = e2eContainer.get(CLASSES.WorkspaceHandlingTests); const loginTests: LoginTests = e2eContainer.get(CLASSES.LoginTests); const browserTabsUtil: BrowserTabsUtil = e2eContainer.get(CLASSES.BrowserTabsUtil); + const testWorkspaceUtil: ITestWorkspaceUtil = e2eContainer.get(TYPES.WorkspaceUtil); + const dashboard: Dashboard = e2eContainer.get(CLASSES.Dashboard); let projectSection: ViewSection; const projectName: string = 'quarkus-quickstarts'; - loginTests.loginIntoChe(); + suiteSetup('Login', async function (): Promise { + await loginTests.loginIntoChe(); + }); test(`Create and open new workspace, stack:${stackName}`, async function (): Promise { await workspaceHandlingTests.createAndOpenWorkspace(stackName); @@ -64,14 +70,16 @@ suite(`The ${stackName} userstory ${BASE_TEST_CONSTANTS.TEST_ENVIRONMENT}`, func ).not.undefined; }); - test('Stop the workspace', async function (): Promise { - await workspaceHandlingTests.stopWorkspace(WorkspaceHandlingTests.getWorkspaceName()); + suiteTeardown('Open dashboard and close all other tabs', async function (): Promise { + await dashboard.openDashboard(); await browserTabsUtil.closeAllTabsExceptCurrent(); }); - test('Delete the workspace', async function (): Promise { - await workspaceHandlingTests.removeWorkspace(WorkspaceHandlingTests.getWorkspaceName()); + suiteTeardown('Stop and delete the workspace by API', function (): void { + testWorkspaceUtil.stopAndDeleteWorkspaceByName(WorkspaceHandlingTests.getWorkspaceName()); }); - loginTests.logoutFromChe(); + suiteTeardown('Unregister running workspace', function (): void { + registerRunningWorkspace(''); + }); }); diff --git a/tests/e2e/specs/dashboard-samples/RecommendedExtensions.spec.ts b/tests/e2e/specs/dashboard-samples/RecommendedExtensions.spec.ts index 4ca9f29d0eb..9948fd579d3 100644 --- a/tests/e2e/specs/dashboard-samples/RecommendedExtensions.spec.ts +++ b/tests/e2e/specs/dashboard-samples/RecommendedExtensions.spec.ts @@ -23,7 +23,7 @@ import { import { registerRunningWorkspace } from '../MochaHooks'; import { LoginTests } from '../../tests-library/LoginTests'; import { e2eContainer } from '../../configs/inversify.config'; -import { CLASSES } from '../../configs/inversify.types'; +import { CLASSES, TYPES } from '../../configs/inversify.types'; import { WorkspaceHandlingTests } from '../../tests-library/WorkspaceHandlingTests'; import { ProjectAndFileTests } from '../../tests-library/ProjectAndFileTests'; import { Logger } from '../../utils/Logger'; @@ -34,6 +34,8 @@ import { TIMEOUT_CONSTANTS } from '../../constants/TIMEOUT_CONSTANTS'; import { BrowserTabsUtil } from '../../utils/BrowserTabsUtil'; import { PLUGIN_TEST_CONSTANTS } from '../../constants/PLUGIN_TEST_CONSTANTS'; import { BASE_TEST_CONSTANTS } from '../../constants/BASE_TEST_CONSTANTS'; +import { ITestWorkspaceUtil } from '../../utils/workspace/ITestWorkspaceUtil'; +import { Dashboard } from '../../pageobjects/dashboard/Dashboard'; const samples: string[] = PLUGIN_TEST_CONSTANTS.TS_SAMPLE_LIST.split(','); @@ -46,6 +48,8 @@ for (const sample of samples) { const browserTabsUtil: BrowserTabsUtil = e2eContainer.get(CLASSES.BrowserTabsUtil); const cheCodeLocatorLoader: CheCodeLocatorLoader = e2eContainer.get(CLASSES.CheCodeLocatorLoader); const webCheCodeLocators: Locators = cheCodeLocatorLoader.webCheCodeLocators; + const testWorkspaceUtil: ITestWorkspaceUtil = e2eContainer.get(TYPES.WorkspaceUtil); + const dashboard: Dashboard = e2eContainer.get(CLASSES.Dashboard); let projectSection: ViewSection; let extensionSection: ExtensionsViewSection; @@ -56,7 +60,9 @@ for (const sample of samples) { recommendations: [] }; - loginTests.loginIntoChe(); + suiteSetup('Login', async function (): Promise { + await loginTests.loginIntoChe(); + }); test(`Create and open new workspace, stack:${sample}`, async function (): Promise { await workspaceHandlingTests.createAndOpenWorkspace(sample); @@ -202,15 +208,17 @@ for (const sample of samples) { } }); - test('Stop the workspace', async function (): Promise { - await workspaceHandlingTests.stopWorkspace(WorkspaceHandlingTests.getWorkspaceName()); + suiteTeardown('Open dashboard and close all other tabs', async function (): Promise { + await dashboard.openDashboard(); await browserTabsUtil.closeAllTabsExceptCurrent(); }); - test('Delete the workspace', async function (): Promise { - await workspaceHandlingTests.removeWorkspace(WorkspaceHandlingTests.getWorkspaceName()); + suiteTeardown('Stop and delete the workspace by API', function (): void { + testWorkspaceUtil.stopAndDeleteWorkspaceByName(WorkspaceHandlingTests.getWorkspaceName()); }); - loginTests.logoutFromChe(); + suiteTeardown('Unregister running workspace', function (): void { + registerRunningWorkspace(''); + }); }); } diff --git a/tests/e2e/specs/devconsole-intergration/DevConsoleIntegration.spec.ts b/tests/e2e/specs/devconsole-intergration/DevConsoleIntegration.spec.ts index 79eb7fa13a8..6d15829e0dc 100644 --- a/tests/e2e/specs/devconsole-intergration/DevConsoleIntegration.spec.ts +++ b/tests/e2e/specs/devconsole-intergration/DevConsoleIntegration.spec.ts @@ -24,12 +24,14 @@ import { OcpApplicationPage } from '../../pageobjects/openshift/OcpApplicationPa import { BASE_TEST_CONSTANTS } from '../../constants/BASE_TEST_CONSTANTS'; import { ITestWorkspaceUtil } from '../../utils/workspace/ITestWorkspaceUtil'; import { BrowserTabsUtil } from '../../utils/BrowserTabsUtil'; +import { Dashboard } from '../../pageobjects/dashboard/Dashboard'; suite(`DevConsole Integration ${BASE_TEST_CONSTANTS.TEST_ENVIRONMENT}`, function (): void { let ocpImportPage: OcpImportFromGitPage; let ocpApplicationPage: OcpApplicationPage; const projectAndFileTests: ProjectAndFileTests = e2eContainer.get(CLASSES.ProjectAndFileTests); + const dashboard: Dashboard = e2eContainer.get(CLASSES.Dashboard); const loginTests: LoginTests = e2eContainer.get(CLASSES.LoginTests); const workspaceHandlingTests: WorkspaceHandlingTests = e2eContainer.get(CLASSES.WorkspaceHandlingTests); const browserTabsUtil: BrowserTabsUtil = e2eContainer.get(CLASSES.BrowserTabsUtil); @@ -72,7 +74,9 @@ suite(`DevConsole Integration ${BASE_TEST_CONSTANTS.TEST_ENVIRONMENT}`, function await ocpApplicationPage.waitAndOpenEditSourceCodeIcon(); }); - loginTests.loginIntoChe(); + test('Login', async function (): Promise { + await loginTests.loginIntoChe(); + }); test('Obtain workspace name from workspace loader page', async function (): Promise { await workspaceHandlingTests.obtainWorkspaceNameFromStartingPage(); @@ -99,12 +103,18 @@ suite(`DevConsole Integration ${BASE_TEST_CONSTANTS.TEST_ENVIRONMENT}`, function ).not.undefined; }); - test('Stop and delete the workspace by API', async function (): Promise { + suiteTeardown('Open dashboard and close all other tabs', async function (): Promise { + await dashboard.openDashboard(); await browserTabsUtil.closeAllTabsExceptCurrent(); + }); + + suiteTeardown('Stop and delete the workspace by API', function (): void { testWorkspaceUtil.stopAndDeleteWorkspaceByName(WorkspaceHandlingTests.getWorkspaceName()); }); - loginTests.logoutFromChe(); + suiteTeardown('Unregister running workspace', function (): void { + registerRunningWorkspace(''); + }); suiteTeardown('Delete project using ocp', function (): void { kubernetesCommandLineToolsExecutor.deleteProject(projectName); diff --git a/tests/e2e/specs/factory/Factory.spec.ts b/tests/e2e/specs/factory/Factory.spec.ts index b6adfeddf74..4ab45f2d4ec 100644 --- a/tests/e2e/specs/factory/Factory.spec.ts +++ b/tests/e2e/specs/factory/Factory.spec.ts @@ -29,7 +29,7 @@ import { CheCodeLocatorLoader } from '../../pageobjects/ide/CheCodeLocatorLoader import { registerRunningWorkspace } from '../MochaHooks'; import { BrowserTabsUtil } from '../../utils/BrowserTabsUtil'; import { WorkspaceHandlingTests } from '../../tests-library/WorkspaceHandlingTests'; -import { CLASSES } from '../../configs/inversify.types'; +import { CLASSES, TYPES } from '../../configs/inversify.types'; import { DriverHelper } from '../../utils/DriverHelper'; import { ProjectAndFileTests } from '../../tests-library/ProjectAndFileTests'; import { Logger } from '../../utils/Logger'; @@ -37,6 +37,8 @@ import { LoginTests } from '../../tests-library/LoginTests'; import { OAUTH_CONSTANTS } from '../../constants/OAUTH_CONSTANTS'; import { BASE_TEST_CONSTANTS } from '../../constants/BASE_TEST_CONSTANTS'; import { FACTORY_TEST_CONSTANTS } from '../../constants/FACTORY_TEST_CONSTANTS'; +import { ITestWorkspaceUtil } from '../../utils/workspace/ITestWorkspaceUtil'; +import { Dashboard } from '../../pageobjects/dashboard/Dashboard'; suite( `Create a workspace via launching a factory from the ${FACTORY_TEST_CONSTANTS.TS_SELENIUM_FACTORY_GIT_PROVIDER} repository ${BASE_TEST_CONSTANTS.TEST_ENVIRONMENT}`, @@ -49,6 +51,8 @@ suite( const cheCodeLocatorLoader: CheCodeLocatorLoader = e2eContainer.get(CLASSES.CheCodeLocatorLoader); const webCheCodeLocators: Locators = cheCodeLocatorLoader.webCheCodeLocators; const oauthPage: OauthPage = e2eContainer.get(CLASSES.OauthPage); + const testWorkspaceUtil: ITestWorkspaceUtil = e2eContainer.get(TYPES.WorkspaceUtil); + const dashboard: Dashboard = e2eContainer.get(CLASSES.Dashboard); let projectSection: ViewSection; let scmProvider: SingleScmProvider; @@ -64,7 +68,9 @@ suite( const pushItemLabel: string = 'Push'; let testRepoProjectName: string; - loginTests.loginIntoChe(); + suiteSetup('Login', async function (): Promise { + await loginTests.loginIntoChe(); + }); test('Navigate to the factory URL', async function (): Promise { await browserTabsUtil.navigateTo(FACTORY_TEST_CONSTANTS.TS_SELENIUM_FACTORY_URL()); }); @@ -189,15 +195,17 @@ suite( expect(isCommitButtonDisabled).to.equal('true'); }); - test('Stop the workspace', async function (): Promise { - await workspaceHandlingTests.stopWorkspace(WorkspaceHandlingTests.getWorkspaceName()); + suiteTeardown('Open dashboard and close all other tabs', async function (): Promise { + await dashboard.openDashboard(); await browserTabsUtil.closeAllTabsExceptCurrent(); }); - test('Delete the workspace', async function (): Promise { - await workspaceHandlingTests.removeWorkspace(WorkspaceHandlingTests.getWorkspaceName()); + suiteTeardown('Stop and delete the workspace by API', function (): void { + testWorkspaceUtil.stopAndDeleteWorkspaceByName(WorkspaceHandlingTests.getWorkspaceName()); }); - loginTests.logoutFromChe(); + suiteTeardown('Unregister running workspace', function (): void { + registerRunningWorkspace(''); + }); } ); diff --git a/tests/e2e/specs/factory/NoSetupRepoFactory.spec.ts b/tests/e2e/specs/factory/NoSetupRepoFactory.spec.ts index 5a580750d87..b77faebaf57 100644 --- a/tests/e2e/specs/factory/NoSetupRepoFactory.spec.ts +++ b/tests/e2e/specs/factory/NoSetupRepoFactory.spec.ts @@ -28,7 +28,7 @@ import { StringUtil } from '../../utils/StringUtil'; import { CheCodeLocatorLoader } from '../../pageobjects/ide/CheCodeLocatorLoader'; import { registerRunningWorkspace } from '../MochaHooks'; import { BrowserTabsUtil } from '../../utils/BrowserTabsUtil'; -import { CLASSES } from '../../configs/inversify.types'; +import { CLASSES, TYPES } from '../../configs/inversify.types'; import { WorkspaceHandlingTests } from '../../tests-library/WorkspaceHandlingTests'; import { ProjectAndFileTests } from '../../tests-library/ProjectAndFileTests'; import { DriverHelper } from '../../utils/DriverHelper'; @@ -39,6 +39,7 @@ import { LoginTests } from '../../tests-library/LoginTests'; import { FACTORY_TEST_CONSTANTS, GitProviderType } from '../../constants/FACTORY_TEST_CONSTANTS'; import { OAUTH_CONSTANTS } from '../../constants/OAUTH_CONSTANTS'; import { BASE_TEST_CONSTANTS } from '../../constants/BASE_TEST_CONSTANTS'; +import { ITestWorkspaceUtil } from '../../utils/workspace/ITestWorkspaceUtil'; suite( `Create a workspace via launching a factory from the ${FACTORY_TEST_CONSTANTS.TS_SELENIUM_FACTORY_GIT_PROVIDER} repository without PAT/OAuth setup ${BASE_TEST_CONSTANTS.TEST_ENVIRONMENT}`, @@ -52,6 +53,7 @@ suite( const dashboard: Dashboard = e2eContainer.get(CLASSES.Dashboard); const workspaces: Workspaces = e2eContainer.get(CLASSES.Workspaces); const loginTests: LoginTests = e2eContainer.get(CLASSES.LoginTests); + const testWorkspaceUtil: ITestWorkspaceUtil = e2eContainer.get(TYPES.WorkspaceUtil); let projectSection: ViewSection; let scmProvider: SingleScmProvider; @@ -69,7 +71,9 @@ suite( let testRepoProjectName: string; const isPrivateRepo: string = FACTORY_TEST_CONSTANTS.TS_SELENIUM_IS_PRIVATE_FACTORY_GIT_REPO ? 'private' : 'public'; - loginTests.loginIntoChe(); + suiteSetup('Login', async function (): Promise { + await loginTests.loginIntoChe(); + }); test('Get number of previously created workspaces', async function (): Promise { await dashboard.clickWorkspacesButton(); @@ -95,8 +99,6 @@ suite( const allCreatedWorkspacesNames: string[] = await workspaces.getAllCreatedWorkspacesNames(); expect(allCreatedWorkspacesNames).has.length(numberOfCreatedWorkspaces); }); - - loginTests.logoutFromChe(); } else { test('Obtain workspace name from workspace loader page', async function (): Promise { await workspaceHandlingTests.obtainWorkspaceNameFromStartingPage(); @@ -241,16 +243,18 @@ suite( expect(isCommitButtonDisabled).to.be.true; }); - test('Stop the workspace', async function (): Promise { - await workspaceHandlingTests.stopWorkspace(WorkspaceHandlingTests.getWorkspaceName()); + suiteTeardown('Open dashboard and close all other tabs', async function (): Promise { + await dashboard.openDashboard(); await browserTabsUtil.closeAllTabsExceptCurrent(); }); - test('Delete the workspace', async function (): Promise { - await workspaceHandlingTests.removeWorkspace(WorkspaceHandlingTests.getWorkspaceName()); + suiteTeardown('Stop and delete the workspace by API', function (): void { + testWorkspaceUtil.stopAndDeleteWorkspaceByName(WorkspaceHandlingTests.getWorkspaceName()); }); - - loginTests.logoutFromChe(); } + + suiteTeardown('Unregister running workspace', function (): void { + registerRunningWorkspace(''); + }); } ); diff --git a/tests/e2e/specs/factory/RefusedOAuthFactory.spec.ts b/tests/e2e/specs/factory/RefusedOAuthFactory.spec.ts index 453d9f401e1..fe9dd15b973 100644 --- a/tests/e2e/specs/factory/RefusedOAuthFactory.spec.ts +++ b/tests/e2e/specs/factory/RefusedOAuthFactory.spec.ts @@ -26,7 +26,7 @@ import { import { expect } from 'chai'; import { registerRunningWorkspace } from '../MochaHooks'; import { BrowserTabsUtil } from '../../utils/BrowserTabsUtil'; -import { CLASSES } from '../../configs/inversify.types'; +import { CLASSES, TYPES } from '../../configs/inversify.types'; import { WorkspaceHandlingTests } from '../../tests-library/WorkspaceHandlingTests'; import { CheCodeLocatorLoader } from '../../pageobjects/ide/CheCodeLocatorLoader'; import { ProjectAndFileTests } from '../../tests-library/ProjectAndFileTests'; @@ -38,6 +38,8 @@ import { LoginTests } from '../../tests-library/LoginTests'; import { OAUTH_CONSTANTS } from '../../constants/OAUTH_CONSTANTS'; import { BASE_TEST_CONSTANTS } from '../../constants/BASE_TEST_CONSTANTS'; import { FACTORY_TEST_CONSTANTS, GitProviderType } from '../../constants/FACTORY_TEST_CONSTANTS'; +import { ITestWorkspaceUtil } from '../../utils/workspace/ITestWorkspaceUtil'; +import { Dashboard } from '../../pageobjects/dashboard/Dashboard'; suite( `Create a workspace via launching a factory from the ${FACTORY_TEST_CONSTANTS.TS_SELENIUM_FACTORY_GIT_PROVIDER} repository and deny the access ${BASE_TEST_CONSTANTS.TEST_ENVIRONMENT}`, @@ -50,6 +52,8 @@ suite( const driverHelper: DriverHelper = e2eContainer.get(CLASSES.DriverHelper); const loginTests: LoginTests = e2eContainer.get(CLASSES.LoginTests); const oauthPage: OauthPage = e2eContainer.get(CLASSES.OauthPage); + const testWorkspaceUtil: ITestWorkspaceUtil = e2eContainer.get(TYPES.WorkspaceUtil); + const dashboard: Dashboard = e2eContainer.get(CLASSES.Dashboard); let projectSection: ViewSection; let scmProvider: SingleScmProvider; @@ -66,7 +70,9 @@ suite( let testRepoProjectName: string; const isPrivateRepo: string = FACTORY_TEST_CONSTANTS.TS_SELENIUM_IS_PRIVATE_FACTORY_GIT_REPO ? 'private' : 'public'; - loginTests.loginIntoChe(); + suiteSetup('Login', async function (): Promise { + await loginTests.loginIntoChe(); + }); test(`Navigate to the ${isPrivateRepo} repository factory URL`, async function (): Promise { await browserTabsUtil.navigateTo(FACTORY_TEST_CONSTANTS.TS_SELENIUM_FACTORY_URL()); @@ -232,15 +238,17 @@ suite( }); } - test('Stop the workspace', async function (): Promise { - await workspaceHandlingTests.stopWorkspace(WorkspaceHandlingTests.getWorkspaceName()); + suiteTeardown('Open dashboard and close all other tabs', async function (): Promise { + await dashboard.openDashboard(); await browserTabsUtil.closeAllTabsExceptCurrent(); }); - test('Delete the workspace', async function (): Promise { - await workspaceHandlingTests.removeWorkspace(WorkspaceHandlingTests.getWorkspaceName()); + suiteTeardown('Stop and delete the workspace by API', function (): void { + testWorkspaceUtil.stopAndDeleteWorkspaceByName(WorkspaceHandlingTests.getWorkspaceName()); }); - loginTests.logoutFromChe(); + suiteTeardown('Unregister running workspace', function (): void { + registerRunningWorkspace(''); + }); } ); diff --git a/tests/e2e/specs/miscellaneous/CreateWorkspaceWithExistedName.spec.ts b/tests/e2e/specs/miscellaneous/CreateWorkspaceWithExistedName.spec.ts index 3197d301c98..775265e9f45 100644 --- a/tests/e2e/specs/miscellaneous/CreateWorkspaceWithExistedName.spec.ts +++ b/tests/e2e/specs/miscellaneous/CreateWorkspaceWithExistedName.spec.ts @@ -9,7 +9,7 @@ **********************************************************************/ import { e2eContainer } from '../../configs/inversify.config'; import { ViewSection } from 'monaco-page-objects'; -import { CLASSES } from '../../configs/inversify.types'; +import { CLASSES, TYPES } from '../../configs/inversify.types'; import { expect } from 'chai'; import { WorkspaceHandlingTests } from '../../tests-library/WorkspaceHandlingTests'; import { ProjectAndFileTests } from '../../tests-library/ProjectAndFileTests'; @@ -19,6 +19,7 @@ import { BrowserTabsUtil } from '../../utils/BrowserTabsUtil'; import { BASE_TEST_CONSTANTS } from '../../constants/BASE_TEST_CONSTANTS'; import { Dashboard } from '../../pageobjects/dashboard/Dashboard'; import { FACTORY_TEST_CONSTANTS } from '../../constants/FACTORY_TEST_CONSTANTS'; +import { ITestWorkspaceUtil } from '../../utils/workspace/ITestWorkspaceUtil'; const stackName: string = BASE_TEST_CONSTANTS.TS_SELENIUM_DASHBOARD_SAMPLE_NAME || 'Python'; const projectName: string = FACTORY_TEST_CONSTANTS.TS_SELENIUM_PROJECT_NAME || 'python-hello-world'; @@ -29,10 +30,14 @@ suite(`"Start workspace with existed workspace name" test ${BASE_TEST_CONSTANTS. const loginTests: LoginTests = e2eContainer.get(CLASSES.LoginTests); const browserTabsUtil: BrowserTabsUtil = e2eContainer.get(CLASSES.BrowserTabsUtil); const dashboard: Dashboard = e2eContainer.get(CLASSES.Dashboard); + const testWorkspaceUtil: ITestWorkspaceUtil = e2eContainer.get(TYPES.WorkspaceUtil); + let projectSection: ViewSection; let existedWorkspaceName: string; - loginTests.loginIntoChe(); + suiteSetup('Login', async function (): Promise { + await loginTests.loginIntoChe(); + }); test(`Create and open new workspace, stack:${stackName}`, async function (): Promise { await workspaceHandlingTests.createAndOpenWorkspace(stackName); @@ -76,15 +81,17 @@ suite(`"Start workspace with existed workspace name" test ${BASE_TEST_CONSTANTS. ).not.undefined; }); - test(`Stop all created ${stackName} workspaces`, async function (): Promise { - await workspaceHandlingTests.stopWorkspace(WorkspaceHandlingTests.getWorkspaceName()); + suiteTeardown('Open dashboard and close all other tabs', async function (): Promise { + await dashboard.openDashboard(); await browserTabsUtil.closeAllTabsExceptCurrent(); }); - test(`Delete all created ${stackName} workspaces`, async function (): Promise { - await workspaceHandlingTests.removeWorkspace(WorkspaceHandlingTests.getWorkspaceName()); - await workspaceHandlingTests.removeWorkspace(existedWorkspaceName); + suiteTeardown(`Stop and delete all created ${stackName} workspaces by API`, function (): void { + testWorkspaceUtil.stopAndDeleteWorkspaceByName(WorkspaceHandlingTests.getWorkspaceName()); + testWorkspaceUtil.stopAndDeleteWorkspaceByName(existedWorkspaceName); }); - loginTests.logoutFromChe(); + suiteTeardown('Unregister running workspace', function (): void { + registerRunningWorkspace(''); + }); }); diff --git a/tests/e2e/specs/miscellaneous/KubedockPodmanTest.spec.ts b/tests/e2e/specs/miscellaneous/KubedockPodmanTest.spec.ts index 3bc7c902220..769445df36a 100644 --- a/tests/e2e/specs/miscellaneous/KubedockPodmanTest.spec.ts +++ b/tests/e2e/specs/miscellaneous/KubedockPodmanTest.spec.ts @@ -9,7 +9,7 @@ **********************************************************************/ import { ViewSection } from 'monaco-page-objects'; import { ProjectAndFileTests } from '../../tests-library/ProjectAndFileTests'; -import { CLASSES } from '../../configs/inversify.types'; +import { CLASSES, TYPES } from '../../configs/inversify.types'; import { e2eContainer } from '../../configs/inversify.config'; import { WorkspaceHandlingTests } from '../../tests-library/WorkspaceHandlingTests'; import { registerRunningWorkspace } from '../MochaHooks'; @@ -19,6 +19,8 @@ import { expect } from 'chai'; import { KubernetesCommandLineToolsExecutor } from '../../utils/KubernetesCommandLineToolsExecutor'; import { ShellString } from 'shelljs'; import { BASE_TEST_CONSTANTS } from '../../constants/BASE_TEST_CONSTANTS'; +import { ITestWorkspaceUtil } from '../../utils/workspace/ITestWorkspaceUtil'; +import { Dashboard } from '../../pageobjects/dashboard/Dashboard'; suite( `Check possibility to manage containers within a workspace with kubedock and podman ${BASE_TEST_CONSTANTS.TEST_ENVIRONMENT}`, @@ -27,6 +29,9 @@ suite( const workspaceHandlingTests: WorkspaceHandlingTests = e2eContainer.get(CLASSES.WorkspaceHandlingTests); const loginTests: LoginTests = e2eContainer.get(CLASSES.LoginTests); const browserTabsUtil: BrowserTabsUtil = e2eContainer.get(CLASSES.BrowserTabsUtil); + const testWorkspaceUtil: ITestWorkspaceUtil = e2eContainer.get(TYPES.WorkspaceUtil); + const dashboard: Dashboard = e2eContainer.get(CLASSES.Dashboard); + let kubernetesCommandLineToolsExecutor: KubernetesCommandLineToolsExecutor; let workspaceName: string = ''; @@ -48,7 +53,9 @@ suite( const factoryUrl: string = 'https://github.com/l0rd/dockerfile-hello-world'; - loginTests.loginIntoChe(); + suiteSetup('Login', async function (): Promise { + await loginTests.loginIntoChe(); + }); test(`Create and open new workspace from factory:${factoryUrl}`, async function (): Promise { await workspaceHandlingTests.createAndOpenWorkspaceFromGitRepository(factoryUrl); @@ -82,15 +89,17 @@ suite( expect(output, 'Podman test script failed').contains('Hello from Kubedock!'); }); - test('Stop the workspace', async function (): Promise { - await workspaceHandlingTests.stopWorkspace(workspaceName); + suiteTeardown('Open dashboard and close all other tabs', async function (): Promise { + await dashboard.openDashboard(); await browserTabsUtil.closeAllTabsExceptCurrent(); }); - test('Delete the workspace', async function (): Promise { - await workspaceHandlingTests.removeWorkspace(workspaceName); + suiteTeardown('Stop and delete the workspace by API', function (): void { + testWorkspaceUtil.stopAndDeleteWorkspaceByName(WorkspaceHandlingTests.getWorkspaceName()); }); - loginTests.logoutFromChe(); + suiteTeardown('Unregister running workspace', function (): void { + registerRunningWorkspace(''); + }); } ); diff --git a/tests/e2e/specs/miscellaneous/PredefinedNamespace.spec.ts b/tests/e2e/specs/miscellaneous/PredefinedNamespace.spec.ts index f9972b1005f..02fb6f1a941 100644 --- a/tests/e2e/specs/miscellaneous/PredefinedNamespace.spec.ts +++ b/tests/e2e/specs/miscellaneous/PredefinedNamespace.spec.ts @@ -62,7 +62,9 @@ suite(`Create predefined workspace and check it ${BASE_TEST_CONSTANTS.TEST_ENVIR } }); - loginTests.loginIntoChe('user'); + suiteSetup('Login', async function (): Promise { + await loginTests.loginIntoChe('user'); + }); // create the Empty workspace using CHE Dashboard test(`Create and open new workspace, stack:${stackName}`, async function (): Promise { await workspaceHandlingTests.createAndOpenWorkspace(stackName); @@ -81,5 +83,7 @@ suite(`Create predefined workspace and check it ${BASE_TEST_CONSTANTS.TEST_ENVIR expect(ocDevWorkspaceOutput).includes(workspaceName); }); - loginTests.logoutFromChe(); + suiteTeardown('Unregister running workspace', function (): void { + registerRunningWorkspace(''); + }); }); diff --git a/tests/e2e/specs/miscellaneous/WorkspaceIdleTimeout.spec.ts b/tests/e2e/specs/miscellaneous/WorkspaceIdleTimeout.spec.ts index 5e5186684d5..6df16153103 100644 --- a/tests/e2e/specs/miscellaneous/WorkspaceIdleTimeout.spec.ts +++ b/tests/e2e/specs/miscellaneous/WorkspaceIdleTimeout.spec.ts @@ -8,7 +8,7 @@ * SPDX-License-Identifier: EPL-2.0 **********************************************************************/ import { e2eContainer } from '../../configs/inversify.config'; -import { CLASSES } from '../../configs/inversify.types'; +import { CLASSES, TYPES } from '../../configs/inversify.types'; import { WorkspaceHandlingTests } from '../../tests-library/WorkspaceHandlingTests'; import { ProjectAndFileTests } from '../../tests-library/ProjectAndFileTests'; import { LoginTests } from '../../tests-library/LoginTests'; @@ -22,6 +22,8 @@ import { Locators, ModalDialog } from 'monaco-page-objects'; import { expect } from 'chai'; import { KubernetesCommandLineToolsExecutor } from '../../utils/KubernetesCommandLineToolsExecutor'; import { ShellExecutor } from '../../utils/ShellExecutor'; +import { ITestWorkspaceUtil } from '../../utils/workspace/ITestWorkspaceUtil'; +import { BrowserTabsUtil } from '../../utils/BrowserTabsUtil'; suite('"Check workspace idle timeout" test', function (): void { const workspaceHandlingTests: WorkspaceHandlingTests = e2eContainer.get(CLASSES.WorkspaceHandlingTests); @@ -36,6 +38,8 @@ suite('"Check workspace idle timeout" test', function (): void { CLASSES.KubernetesCommandLineToolsExecutor ); const shellExecutor: ShellExecutor = e2eContainer.get(CLASSES.ShellExecutor); + const testWorkspaceUtil: ITestWorkspaceUtil = e2eContainer.get(TYPES.WorkspaceUtil); + const browserTabsUtil: BrowserTabsUtil = e2eContainer.get(CLASSES.BrowserTabsUtil); const stackName: string = 'Empty Workspace'; const cheClusterName: string = 'devspaces'; @@ -65,7 +69,9 @@ suite('"Check workspace idle timeout" test', function (): void { ); }); - loginTests.loginIntoChe(); + suiteSetup('Login', async function (): Promise { + await loginTests.loginIntoChe(); + }); test(`Create and open new workspace, stack:${stackName}`, async function (): Promise { await workspaceHandlingTests.createAndOpenWorkspace(stackName); @@ -85,14 +91,21 @@ suite('"Check workspace idle timeout" test', function (): void { await dialog.pushButton('Return to dashboard'); }); - test('Check that the workskpace has Stopped state', async function (): Promise { + test('Check that the workspace has Stopped state', async function (): Promise { await dashboard.waitPage(); await workspaces.waitWorkspaceWithStoppedStatus(WorkspaceHandlingTests.getWorkspaceName()); }); - test('Delete the workspace', async function (): Promise { - await dashboard.deleteStoppedWorkspaceByUI(WorkspaceHandlingTests.getWorkspaceName()); + suiteTeardown('Open dashboard and close all other tabs', async function (): Promise { + await dashboard.openDashboard(); + await browserTabsUtil.closeAllTabsExceptCurrent(); + }); + + suiteTeardown('Stop and delete the workspace by API', function (): void { + testWorkspaceUtil.deleteWorkspaceByName(WorkspaceHandlingTests.getWorkspaceName()); }); - loginTests.logoutFromChe(); + suiteTeardown('Unregister running workspace', function (): void { + registerRunningWorkspace(''); + }); }); diff --git a/tests/e2e/specs/miscellaneous/WorkspaceWithParent.spec.ts b/tests/e2e/specs/miscellaneous/WorkspaceWithParent.spec.ts index 8ad4f5c64d8..4f220f26079 100644 --- a/tests/e2e/specs/miscellaneous/WorkspaceWithParent.spec.ts +++ b/tests/e2e/specs/miscellaneous/WorkspaceWithParent.spec.ts @@ -41,7 +41,9 @@ suite(`Workspace using a parent test suite ${BASE_TEST_CONSTANTS.TEST_ENVIRONMEN kubernetesCommandLineToolsExecutor.loginToOcp(); }); - loginTests.loginIntoChe(); + suiteSetup('Login', async function (): Promise { + await loginTests.loginIntoChe(); + }); test('Create a workspace using a parent', async function (): Promise { const factoryUrl: string = `${BASE_TEST_CONSTANTS.TS_SELENIUM_BASE_URL}/dashboard/#https://github.com/testsfactory/parentDevfile`; @@ -98,10 +100,13 @@ suite(`Workspace using a parent test suite ${BASE_TEST_CONSTANTS.TEST_ENVIRONMEN expect(envList).contains('DEVFILE_ENV_VAR=true').and.contains('PARENT_ENV_VAR=true'); }); - test('Stop and delete the workspace by API', async function (): Promise { + suiteTeardown('Stop and delete the workspace by API', async function (): Promise { + await dashboard.openDashboard(); await browserTabsUtil.closeAllTabsExceptCurrent(); testWorkspaceUtil.stopAndDeleteWorkspaceByName(WorkspaceHandlingTests.getWorkspaceName()); }); - loginTests.logoutFromChe(); + suiteTeardown('Unregister running workspace', function (): void { + registerRunningWorkspace(''); + }); }); diff --git a/tests/e2e/tests-library/LoginTests.ts b/tests/e2e/tests-library/LoginTests.ts index 4bbc2fa6e4e..91f8d54760b 100644 --- a/tests/e2e/tests-library/LoginTests.ts +++ b/tests/e2e/tests-library/LoginTests.ts @@ -15,7 +15,8 @@ import { inject, injectable } from 'inversify'; import { Dashboard } from '../pageobjects/dashboard/Dashboard'; import { IOcpLoginPage } from '../pageobjects/login/interfaces/IOcpLoginPage'; import { BASE_TEST_CONSTANTS } from '../constants/BASE_TEST_CONSTANTS'; -import { registerRunningWorkspace } from '../specs/MochaHooks'; +import { TIMEOUT_CONSTANTS } from '../constants/TIMEOUT_CONSTANTS'; +import { Logger } from '../utils/Logger'; @injectable() export class LoginTests { @@ -28,19 +29,24 @@ export class LoginTests { @inject(CLASSES.Dashboard) private readonly dashboard: Dashboard ) {} - loginIntoChe(userName?: string, password?: string): void { - test('Login', async (): Promise => { + async loginIntoChe(userName?: string, password?: string): Promise { + Logger.debug(); + try { if (!(await this.browserTabsUtil.getCurrentUrl()).includes(BASE_TEST_CONSTANTS.TS_SELENIUM_BASE_URL)) { await this.browserTabsUtil.navigateTo(BASE_TEST_CONSTANTS.TS_SELENIUM_BASE_URL); } + await this.dashboard.waitPage(TIMEOUT_CONSTANTS.TS_COMMON_DASHBOARD_WAIT_TIMEOUT); + Logger.debug('user already logged in'); + } catch (e) { + Logger.debug('try to login into application'); await this.productLoginPage.login(userName, password); await this.browserTabsUtil.maximize(); await this.dashboard.waitStartingPageLoaderDisappearance(); - }); + } } loginIntoOcpConsole(): void { - test('Login into ocp console', async (): Promise => { + suiteSetup('Login into ocp console', async (): Promise => { const openshiftConsoleUrl: string = BASE_TEST_CONSTANTS.TS_SELENIUM_BASE_URL.replace( BASE_TEST_CONSTANTS.TESTING_APPLICATION_NAME(), 'console-openshift-console' @@ -54,7 +60,6 @@ export class LoginTests { logoutFromChe(): void { test('Logout', async (): Promise => { await this.dashboard.logout(); - registerRunningWorkspace(''); }); } } diff --git a/tests/e2e/tests-library/WorkspaceHandlingTests.ts b/tests/e2e/tests-library/WorkspaceHandlingTests.ts index 99f16a5259c..fb2370d1a0c 100644 --- a/tests/e2e/tests-library/WorkspaceHandlingTests.ts +++ b/tests/e2e/tests-library/WorkspaceHandlingTests.ts @@ -42,14 +42,6 @@ export class WorkspaceHandlingTests { return WorkspaceHandlingTests.workspaceName; } - setWindowHandle(guid: string): void { - WorkspaceHandlingTests.parentGUID = guid; - } - - getWindowHandle(): string { - return WorkspaceHandlingTests.parentGUID; - } - async createAndOpenWorkspace(stack: string): Promise { await this.dashboard.clickWorkspacesButton(); await this.dashboard.waitPage(); diff --git a/tests/e2e/utils/BrowserTabsUtil.ts b/tests/e2e/utils/BrowserTabsUtil.ts index cce2ee1bd99..2168cbb2c08 100644 --- a/tests/e2e/utils/BrowserTabsUtil.ts +++ b/tests/e2e/utils/BrowserTabsUtil.ts @@ -76,7 +76,14 @@ export class BrowserTabsUtil { async getCurrentUrl(): Promise { Logger.trace(); - return await this.driverHelper.getDriver().getCurrentUrl(); + let currentUrl: string = ''; + try { + currentUrl = await this.driverHelper.getDriver().getCurrentUrl(); + } catch (e) { + Logger.trace('cannot get current url'); + } + + return currentUrl; } async waitURL(expectedUrl: string, timeout: number): Promise { From 8f88c0ed966d64d06236db87720c858d7cec76c9 Mon Sep 17 00:00:00 2001 From: mdolhalo Date: Sun, 29 Oct 2023 11:07:15 +0100 Subject: [PATCH 2/7] fix: delete workspace in DevConsoleIntegration.spec.ts Signed-off-by: mdolhalo --- tests/e2e/specs/SmokeTest.spec.ts | 4 ++-- .../DevConsoleIntegration.spec.ts | 15 ++++++--------- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/tests/e2e/specs/SmokeTest.spec.ts b/tests/e2e/specs/SmokeTest.spec.ts index 7a44f5e03cb..577cb165e6d 100644 --- a/tests/e2e/specs/SmokeTest.spec.ts +++ b/tests/e2e/specs/SmokeTest.spec.ts @@ -56,11 +56,11 @@ suite(`The SmokeTest userstory ${BASE_TEST_CONSTANTS.TEST_ENVIRONMENT}`, functio 'Project files were not imported' ).not.undefined; }); - test('Stop the workspace', async function (): Promise { + test('Stop the workspace by UI', async function (): Promise { await workspaceHandlingTests.stopWorkspace(WorkspaceHandlingTests.getWorkspaceName()); await browserTabsUtil.closeAllTabsExceptCurrent(); }); - test('Delete the workspace', async function (): Promise { + test('Delete the workspace by UI', async function (): Promise { await workspaceHandlingTests.removeWorkspace(WorkspaceHandlingTests.getWorkspaceName()); }); suiteTeardown('Unregister running workspace', function (): void { diff --git a/tests/e2e/specs/devconsole-intergration/DevConsoleIntegration.spec.ts b/tests/e2e/specs/devconsole-intergration/DevConsoleIntegration.spec.ts index 6d15829e0dc..6e3f3c17a16 100644 --- a/tests/e2e/specs/devconsole-intergration/DevConsoleIntegration.spec.ts +++ b/tests/e2e/specs/devconsole-intergration/DevConsoleIntegration.spec.ts @@ -12,7 +12,7 @@ import { ViewSection } from 'monaco-page-objects'; import { registerRunningWorkspace } from '../MochaHooks'; import { LoginTests } from '../../tests-library/LoginTests'; import { e2eContainer } from '../../configs/inversify.config'; -import { CLASSES, TYPES } from '../../configs/inversify.types'; +import { CLASSES } from '../../configs/inversify.types'; import { WorkspaceHandlingTests } from '../../tests-library/WorkspaceHandlingTests'; import { ProjectAndFileTests } from '../../tests-library/ProjectAndFileTests'; import { expect } from 'chai'; @@ -22,7 +22,6 @@ import { KubernetesCommandLineToolsExecutor } from '../../utils/KubernetesComman import { StringUtil } from '../../utils/StringUtil'; import { OcpApplicationPage } from '../../pageobjects/openshift/OcpApplicationPage'; import { BASE_TEST_CONSTANTS } from '../../constants/BASE_TEST_CONSTANTS'; -import { ITestWorkspaceUtil } from '../../utils/workspace/ITestWorkspaceUtil'; import { BrowserTabsUtil } from '../../utils/BrowserTabsUtil'; import { Dashboard } from '../../pageobjects/dashboard/Dashboard'; @@ -36,7 +35,6 @@ suite(`DevConsole Integration ${BASE_TEST_CONSTANTS.TEST_ENVIRONMENT}`, function const workspaceHandlingTests: WorkspaceHandlingTests = e2eContainer.get(CLASSES.WorkspaceHandlingTests); const browserTabsUtil: BrowserTabsUtil = e2eContainer.get(CLASSES.BrowserTabsUtil); const ocpMainPage: OcpMainPage = e2eContainer.get(CLASSES.OcpMainPage); - const testWorkspaceUtil: ITestWorkspaceUtil = e2eContainer.get(TYPES.WorkspaceUtil); const kubernetesCommandLineToolsExecutor: KubernetesCommandLineToolsExecutor = e2eContainer.get( CLASSES.KubernetesCommandLineToolsExecutor ); @@ -108,15 +106,14 @@ suite(`DevConsole Integration ${BASE_TEST_CONSTANTS.TEST_ENVIRONMENT}`, function await browserTabsUtil.closeAllTabsExceptCurrent(); }); - suiteTeardown('Stop and delete the workspace by API', function (): void { - testWorkspaceUtil.stopAndDeleteWorkspaceByName(WorkspaceHandlingTests.getWorkspaceName()); + suiteTeardown('Delete project using ocp', function (): void { + kubernetesCommandLineToolsExecutor.workspaceName = + WorkspaceHandlingTests.getWorkspaceName() !== '' ? WorkspaceHandlingTests.getWorkspaceName() : 'spring-music'; + kubernetesCommandLineToolsExecutor.deleteDevWorkspace(); + kubernetesCommandLineToolsExecutor.deleteProject(projectName); }); suiteTeardown('Unregister running workspace', function (): void { registerRunningWorkspace(''); }); - - suiteTeardown('Delete project using ocp', function (): void { - kubernetesCommandLineToolsExecutor.deleteProject(projectName); - }); }); From 071f7243f06a45a8f2bfe2626d5bd9cbf2730bc2 Mon Sep 17 00:00:00 2001 From: mdolhalo Date: Sun, 29 Oct 2023 14:57:45 +0100 Subject: [PATCH 3/7] fix: update method to clear ws name in WorkspaceHandlingTests.ts Signed-off-by: mdolhalo --- tests/e2e/specs/MochaHooks.ts | 8 +++++++- tests/e2e/tests-library/WorkspaceHandlingTests.ts | 4 ++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/tests/e2e/specs/MochaHooks.ts b/tests/e2e/specs/MochaHooks.ts index 42a403628b1..e16d597c615 100644 --- a/tests/e2e/specs/MochaHooks.ts +++ b/tests/e2e/specs/MochaHooks.ts @@ -26,13 +26,19 @@ import { decorate, injectable, unmanaged } from 'inversify'; import { Main } from '@eclipse-che/che-devworkspace-generator/lib/main'; import { LocatorLoader } from 'monaco-page-objects/out/locators/loader'; import { REPORTER_CONSTANTS } from '../constants/REPORTER_CONSTANTS'; +import { WorkspaceHandlingTests } from '../tests-library/WorkspaceHandlingTests'; const driverHelper: DriverHelper = e2eContainer.get(CLASSES.DriverHelper); let latestWorkspace: string = ''; export let rpApi: any = undefined; export function registerRunningWorkspace(workspaceName: string): void { - workspaceName !== '' ? Logger.debug(`with workspaceName:${workspaceName}`) : Logger.debug('delete workspace name'); + workspaceName !== '' + ? Logger.debug(`with workspaceName:${workspaceName}`) + : ((): void => { + Logger.debug('delete workspace name'); + WorkspaceHandlingTests.clearWorkspaceName(); + })(); latestWorkspace = workspaceName; } diff --git a/tests/e2e/tests-library/WorkspaceHandlingTests.ts b/tests/e2e/tests-library/WorkspaceHandlingTests.ts index fb2370d1a0c..6dfebb021df 100644 --- a/tests/e2e/tests-library/WorkspaceHandlingTests.ts +++ b/tests/e2e/tests-library/WorkspaceHandlingTests.ts @@ -42,6 +42,10 @@ export class WorkspaceHandlingTests { return WorkspaceHandlingTests.workspaceName; } + static clearWorkspaceName(): void { + WorkspaceHandlingTests.workspaceName = 'undefined'; + } + async createAndOpenWorkspace(stack: string): Promise { await this.dashboard.clickWorkspacesButton(); await this.dashboard.waitPage(); From e26fe620f31d8c01ecffc01a17e5fa930626ff6f Mon Sep 17 00:00:00 2001 From: mdolhalo Date: Sun, 29 Oct 2023 19:14:33 +0100 Subject: [PATCH 4/7] fix: update utils Signed-off-by: mdolhalo --- tests/e2e/configs/sh-scripts/runFunctionalTests.sh | 3 +++ tests/e2e/constants/BASE_TEST_CONSTANTS.ts | 6 ++++++ .../workspace-details/WorkspaceDetails.ts | 2 +- tests/e2e/specs/MochaHooks.ts | 13 +++++++++++++ .../DevConsoleIntegration.spec.ts | 7 ++++++- .../miscellaneous/PredefinedNamespace.spec.ts | 8 +++++++- tests/e2e/tests-library/LoginTests.ts | 14 ++++++++------ tests/e2e/utils/Logger.ts | 2 +- tests/e2e/utils/workspace/ITestWorkspaceUtil.ts | 8 ++++---- 9 files changed, 49 insertions(+), 14 deletions(-) diff --git a/tests/e2e/configs/sh-scripts/runFunctionalTests.sh b/tests/e2e/configs/sh-scripts/runFunctionalTests.sh index 576424978bb..a90c965b291 100755 --- a/tests/e2e/configs/sh-scripts/runFunctionalTests.sh +++ b/tests/e2e/configs/sh-scripts/runFunctionalTests.sh @@ -61,6 +61,7 @@ initTestValues() { export TEST_ENVIRONMENT="$OCP_INFRA $MOCHA_DIRECTORY $OCP_VERSION" export DELETE_WORKSPACE_ON_FAILED_TEST=${DELETE_WORKSPACE_ON_FAILED_TEST:-'false'} + export DELETE_ALL_WORKSPACES_ON_RUN_FINISH=${DELETE_ALL_WORKSPACES_ON_RUN_FINISH:-'true'} export DELETE_SCREENCAST_IF_TEST_PASS=${DELETE_SCREENCAST_IF_TEST_PASS:-'true'} export NODE_TLS_REJECT_UNAUTHORIZED=${NODE_TLS_REJECT_UNAUTHORIZED:-'0'} export TS_OCP_LOGIN_PAGE_PROVIDER_TITLE=${TS_OCP_LOGIN_PAGE_PROVIDER_TITLE:-'htpasswd'} @@ -77,9 +78,11 @@ initTestValues() { export MOCHA_BAIL=${MOCHA_BAIL:-'false'} export MOCHA_RETRIES=${MOCHA_RETRIES:-'1'} + echo "TS_SELENIUM_BASE_URL=${TS_SELENIUM_BASE_URL}" echo "TEST_ENVIRONMENT=${TEST_ENVIRONMENT}" echo "DELETE_WORKSPACE_ON_FAILED_TEST=${DELETE_WORKSPACE_ON_FAILED_TEST}" + echo "DELETE_ALL_WORKSPACES_ON_RUN_FINISH=${DELETE_ALL_WORKSPACES_ON_RUN_FINISH}" echo "DELETE_SCREENCAST_IF_TEST_PASS=${DELETE_SCREENCAST_IF_TEST_PASS}" echo "NODE_TLS_REJECT_UNAUTHORIZED=${NODE_TLS_REJECT_UNAUTHORIZED}" echo "TS_OCP_LOGIN_PAGE_PROVIDER_TITLE=${TS_OCP_LOGIN_PAGE_PROVIDER_TITLE}" diff --git a/tests/e2e/constants/BASE_TEST_CONSTANTS.ts b/tests/e2e/constants/BASE_TEST_CONSTANTS.ts index 8ab1ceb4441..585fd80b7da 100644 --- a/tests/e2e/constants/BASE_TEST_CONSTANTS.ts +++ b/tests/e2e/constants/BASE_TEST_CONSTANTS.ts @@ -13,6 +13,7 @@ export enum Platform { } export const BASE_TEST_CONSTANTS: { + DELETE_ALL_WORKSPACES_ON_RUN_FINISH: boolean; OCP_INFRA: string; DELETE_WORKSPACE_ON_FAILED_TEST: boolean; IS_CLUSTER_DISCONNECTED: () => boolean; @@ -125,6 +126,11 @@ export const BASE_TEST_CONSTANTS: { */ DELETE_WORKSPACE_ON_FAILED_TEST: process.env.DELETE_WORKSPACE_ON_FAILED_TEST === 'true', + /** + * stop and remove all workspaces on test run finish + */ + DELETE_ALL_WORKSPACES_ON_RUN_FINISH: process.env.DELETE_WORKSPACE_ON_FAILED_TEST === 'true', + /** * constant, which prolong timeout constants for local debug. */ diff --git a/tests/e2e/pageobjects/dashboard/workspace-details/WorkspaceDetails.ts b/tests/e2e/pageobjects/dashboard/workspace-details/WorkspaceDetails.ts index 1f4be079162..8a096148292 100644 --- a/tests/e2e/pageobjects/dashboard/workspace-details/WorkspaceDetails.ts +++ b/tests/e2e/pageobjects/dashboard/workspace-details/WorkspaceDetails.ts @@ -101,7 +101,7 @@ export class WorkspaceDetails { await this.clickOnOpenButton(timeout); await this.testProjectAndFileCheCode.waitWorkspaceReadinessForCheCodeEditor(); - this.testWorkspaceUtil.waitWorkspaceStatus(namespace, workspaceName, WorkspaceStatus.STARTING); + this.testWorkspaceUtil.waitWorkspaceStatus(workspaceName, WorkspaceStatus.STARTING); } async waitTabsPresence(timeout: number = TIMEOUT_CONSTANTS.TS_COMMON_DASHBOARD_WAIT_TIMEOUT): Promise { diff --git a/tests/e2e/specs/MochaHooks.ts b/tests/e2e/specs/MochaHooks.ts index e16d597c615..82c08815026 100644 --- a/tests/e2e/specs/MochaHooks.ts +++ b/tests/e2e/specs/MochaHooks.ts @@ -126,6 +126,19 @@ exports.mochaHooks = { ], afterAll: [ // stop and remove running workspace + function deleteAllWorkspacesOnFinish(): void { + if (BASE_TEST_CONSTANTS.DELETE_ALL_WORKSPACES_ON_RUN_FINISH) { + Logger.info( + 'Property DELETE_WORKSPACE_ON_FAILED_TEST is true - trying to stop and delete all running workspace after test run with API.' + ); + const testWorkspaceUtil: ITestWorkspaceUtil = e2eContainer.get(TYPES.WorkspaceUtil); + try { + testWorkspaceUtil.stopAndDeleteAllRunningWorkspaces(); + } catch (e) { + Logger.trace('Running workspaces not found'); + } + } + }, async function stopTheDriver(): Promise { if (!BASE_TEST_CONSTANTS.TS_DEBUG_MODE && CHROME_DRIVER_CONSTANTS.TS_USE_WEB_DRIVER_FOR_TEST) { // ensure that fired events done diff --git a/tests/e2e/specs/devconsole-intergration/DevConsoleIntegration.spec.ts b/tests/e2e/specs/devconsole-intergration/DevConsoleIntegration.spec.ts index 6e3f3c17a16..856c1797d90 100644 --- a/tests/e2e/specs/devconsole-intergration/DevConsoleIntegration.spec.ts +++ b/tests/e2e/specs/devconsole-intergration/DevConsoleIntegration.spec.ts @@ -24,6 +24,7 @@ import { OcpApplicationPage } from '../../pageobjects/openshift/OcpApplicationPa import { BASE_TEST_CONSTANTS } from '../../constants/BASE_TEST_CONSTANTS'; import { BrowserTabsUtil } from '../../utils/BrowserTabsUtil'; import { Dashboard } from '../../pageobjects/dashboard/Dashboard'; +import { TIMEOUT_CONSTANTS } from '../../constants/TIMEOUT_CONSTANTS'; suite(`DevConsole Integration ${BASE_TEST_CONSTANTS.TEST_ENVIRONMENT}`, function (): void { let ocpImportPage: OcpImportFromGitPage; @@ -73,7 +74,11 @@ suite(`DevConsole Integration ${BASE_TEST_CONSTANTS.TEST_ENVIRONMENT}`, function }); test('Login', async function (): Promise { - await loginTests.loginIntoChe(); + try { + await dashboard.waitLoader(TIMEOUT_CONSTANTS.TS_WAIT_LOADER_PRESENCE_TIMEOUT); + } catch (e) { + await loginTests.loginIntoChe(); + } }); test('Obtain workspace name from workspace loader page', async function (): Promise { diff --git a/tests/e2e/specs/miscellaneous/PredefinedNamespace.spec.ts b/tests/e2e/specs/miscellaneous/PredefinedNamespace.spec.ts index 02fb6f1a941..1448a494ac8 100644 --- a/tests/e2e/specs/miscellaneous/PredefinedNamespace.spec.ts +++ b/tests/e2e/specs/miscellaneous/PredefinedNamespace.spec.ts @@ -17,6 +17,7 @@ import { registerRunningWorkspace } from '../MochaHooks'; import { KubernetesCommandLineToolsExecutor } from '../../utils/KubernetesCommandLineToolsExecutor'; import { ShellExecutor } from '../../utils/ShellExecutor'; import { BASE_TEST_CONSTANTS } from '../../constants/BASE_TEST_CONSTANTS'; +import { OAUTH_CONSTANTS } from '../../constants/OAUTH_CONSTANTS'; suite(`Create predefined workspace and check it ${BASE_TEST_CONSTANTS.TEST_ENVIRONMENT}`, function (): void { const predefinedNamespaceName: string = 'predefined-ns'; @@ -63,7 +64,12 @@ suite(`Create predefined workspace and check it ${BASE_TEST_CONSTANTS.TEST_ENVIR }); suiteSetup('Login', async function (): Promise { - await loginTests.loginIntoChe('user'); + const userName: string = 'user'; + await loginTests.loginIntoChe(userName); + if (OAUTH_CONSTANTS.TS_SELENIUM_OCP_USERNAME !== userName) { + await loginTests.logoutFromChe(); + await loginTests.loginIntoChe(userName); + } }); // create the Empty workspace using CHE Dashboard test(`Create and open new workspace, stack:${stackName}`, async function (): Promise { diff --git a/tests/e2e/tests-library/LoginTests.ts b/tests/e2e/tests-library/LoginTests.ts index 91f8d54760b..2525f3cece0 100644 --- a/tests/e2e/tests-library/LoginTests.ts +++ b/tests/e2e/tests-library/LoginTests.ts @@ -29,13 +29,17 @@ export class LoginTests { @inject(CLASSES.Dashboard) private readonly dashboard: Dashboard ) {} - async loginIntoChe(userName?: string, password?: string): Promise { + async loginIntoChe( + userName?: string, + password?: string, + timeout: number = TIMEOUT_CONSTANTS.TS_COMMON_DASHBOARD_WAIT_TIMEOUT + ): Promise { Logger.debug(); try { if (!(await this.browserTabsUtil.getCurrentUrl()).includes(BASE_TEST_CONSTANTS.TS_SELENIUM_BASE_URL)) { await this.browserTabsUtil.navigateTo(BASE_TEST_CONSTANTS.TS_SELENIUM_BASE_URL); } - await this.dashboard.waitPage(TIMEOUT_CONSTANTS.TS_COMMON_DASHBOARD_WAIT_TIMEOUT); + await this.dashboard.waitPage(timeout); Logger.debug('user already logged in'); } catch (e) { Logger.debug('try to login into application'); @@ -57,9 +61,7 @@ export class LoginTests { }); } - logoutFromChe(): void { - test('Logout', async (): Promise => { - await this.dashboard.logout(); - }); + async logoutFromChe(): Promise { + await this.dashboard.logout(); } } diff --git a/tests/e2e/utils/Logger.ts b/tests/e2e/utils/Logger.ts index 1431dadcf14..36d1c302820 100644 --- a/tests/e2e/utils/Logger.ts +++ b/tests/e2e/utils/Logger.ts @@ -150,7 +150,7 @@ export class Logger { private static isRootCaller(traceLevel: number = 6): boolean { return this.getCallStackArray() - .slice(traceLevel, traceLevel + 2) + .slice(traceLevel, traceLevel + 3) .reduce((acc, e): boolean => { return acc || /MochaHooks|CheReporter/.test(e); }, false); diff --git a/tests/e2e/utils/workspace/ITestWorkspaceUtil.ts b/tests/e2e/utils/workspace/ITestWorkspaceUtil.ts index 676bc71f823..533192c2a99 100644 --- a/tests/e2e/utils/workspace/ITestWorkspaceUtil.ts +++ b/tests/e2e/utils/workspace/ITestWorkspaceUtil.ts @@ -11,7 +11,7 @@ import { WorkspaceStatus } from './WorkspaceStatus'; export interface ITestWorkspaceUtil { - waitWorkspaceStatus(namespace: string, workspaceName: string, expectedWorkspaceStatus: WorkspaceStatus): void; + waitWorkspaceStatus(workspaceName: string, expectedWorkspaceStatus: WorkspaceStatus): void; stopWorkspaceByName(workspaceName: string): void; @@ -28,16 +28,16 @@ export interface ITestWorkspaceUtil { /** * stop all run workspaces in the namespace */ - stopAllRunningWorkspaces(namespace: string): void; + stopAllRunningWorkspaces(): void; /** * stop all run workspaces, check statused and remove the workspaces */ - stopAndDeleteAllRunningWorkspaces(namespace: string): void; + stopAndDeleteAllRunningWorkspaces(): void; /** * stop all run workspaces without stopping and waiting for of 'Stopped' phase * Similar with 'force' deleting */ - deleteAllWorkspaces(namespace: string): void; + deleteAllWorkspaces(): void; } From 7300ae7da4a2c7740385fb02641120e69f750b22 Mon Sep 17 00:00:00 2001 From: mdolhalo Date: Mon, 30 Oct 2023 12:29:55 +0100 Subject: [PATCH 5/7] fix: missed await Signed-off-by: mdolhalo --- .../workspace-details/WorkspaceDetails.ts | 2 +- tests/e2e/specs/MochaHooks.ts | 26 +++++++++---------- .../dashboard-samples/EmptyWorkspace.spec.ts | 4 +-- .../specs/dashboard-samples/Quarkus.spec.ts | 4 +-- .../RecommendedExtensions.spec.ts | 4 +-- tests/e2e/specs/factory/Factory.spec.ts | 4 +-- .../specs/factory/NoSetupRepoFactory.spec.ts | 4 +-- .../specs/factory/RefusedOAuthFactory.spec.ts | 4 +-- .../CreateWorkspaceWithExistedName.spec.ts | 6 ++--- .../miscellaneous/KubedockPodmanTest.spec.ts | 4 +-- .../WorkspaceIdleTimeout.spec.ts | 4 +-- .../miscellaneous/WorkspaceWithParent.spec.ts | 2 +- .../e2e/utils/workspace/ITestWorkspaceUtil.ts | 14 +++++----- 13 files changed, 41 insertions(+), 41 deletions(-) diff --git a/tests/e2e/pageobjects/dashboard/workspace-details/WorkspaceDetails.ts b/tests/e2e/pageobjects/dashboard/workspace-details/WorkspaceDetails.ts index 8a096148292..27074835572 100644 --- a/tests/e2e/pageobjects/dashboard/workspace-details/WorkspaceDetails.ts +++ b/tests/e2e/pageobjects/dashboard/workspace-details/WorkspaceDetails.ts @@ -101,7 +101,7 @@ export class WorkspaceDetails { await this.clickOnOpenButton(timeout); await this.testProjectAndFileCheCode.waitWorkspaceReadinessForCheCodeEditor(); - this.testWorkspaceUtil.waitWorkspaceStatus(workspaceName, WorkspaceStatus.STARTING); + await this.testWorkspaceUtil.waitWorkspaceStatus(workspaceName, WorkspaceStatus.STARTING); } async waitTabsPresence(timeout: number = TIMEOUT_CONSTANTS.TS_COMMON_DASHBOARD_WAIT_TIMEOUT): Promise { diff --git a/tests/e2e/specs/MochaHooks.ts b/tests/e2e/specs/MochaHooks.ts index 82c08815026..e431dab7867 100644 --- a/tests/e2e/specs/MochaHooks.ts +++ b/tests/e2e/specs/MochaHooks.ts @@ -114,29 +114,29 @@ exports.mochaHooks = { } }, // stop and remove running workspace - function deleteWorkspaceOnFailedTest(this: Mocha.Context): void { + async function deleteWorkspaceOnFailedTest(this: Mocha.Context): Promise { if (this.currentTest?.state === 'failed') { - if (BASE_TEST_CONSTANTS.DELETE_WORKSPACE_ON_FAILED_TEST) { + if (BASE_TEST_CONSTANTS.DELETE_WORKSPACE_ON_FAILED_TEST && CHROME_DRIVER_CONSTANTS.TS_USE_WEB_DRIVER_FOR_TEST) { Logger.info('Property DELETE_WORKSPACE_ON_FAILED_TEST is true - trying to stop and delete running workspace with API.'); const testWorkspaceUtil: ITestWorkspaceUtil = e2eContainer.get(TYPES.WorkspaceUtil); - testWorkspaceUtil.stopAndDeleteWorkspaceByName(latestWorkspace); + await testWorkspaceUtil.stopAndDeleteWorkspaceByName(latestWorkspace); } } } ], afterAll: [ // stop and remove running workspace - function deleteAllWorkspacesOnFinish(): void { - if (BASE_TEST_CONSTANTS.DELETE_ALL_WORKSPACES_ON_RUN_FINISH) { - Logger.info( - 'Property DELETE_WORKSPACE_ON_FAILED_TEST is true - trying to stop and delete all running workspace after test run with API.' - ); - const testWorkspaceUtil: ITestWorkspaceUtil = e2eContainer.get(TYPES.WorkspaceUtil); - try { - testWorkspaceUtil.stopAndDeleteAllRunningWorkspaces(); - } catch (e) { - Logger.trace('Running workspaces not found'); + async function deleteAllWorkspacesOnFinish(): Promise { + try { + if (BASE_TEST_CONSTANTS.DELETE_ALL_WORKSPACES_ON_RUN_FINISH && CHROME_DRIVER_CONSTANTS.TS_USE_WEB_DRIVER_FOR_TEST) { + Logger.info( + 'Property DELETE_WORKSPACE_ON_FAILED_TEST is true - trying to stop and delete all running workspace after test run with API.' + ); + const testWorkspaceUtil: ITestWorkspaceUtil = e2eContainer.get(TYPES.WorkspaceUtil); + await testWorkspaceUtil.stopAndDeleteAllRunningWorkspaces(); } + } catch (e) { + Logger.trace('Running workspaces not found'); } }, async function stopTheDriver(): Promise { diff --git a/tests/e2e/specs/dashboard-samples/EmptyWorkspace.spec.ts b/tests/e2e/specs/dashboard-samples/EmptyWorkspace.spec.ts index db0c9cccfb8..3aac7ba430d 100644 --- a/tests/e2e/specs/dashboard-samples/EmptyWorkspace.spec.ts +++ b/tests/e2e/specs/dashboard-samples/EmptyWorkspace.spec.ts @@ -63,8 +63,8 @@ suite(`${stackName} test ${BASE_TEST_CONSTANTS.TEST_ENVIRONMENT}`, function (): await browserTabsUtil.closeAllTabsExceptCurrent(); }); - suiteTeardown('Stop and delete the workspace by API', function (): void { - testWorkspaceUtil.stopAndDeleteWorkspaceByName(WorkspaceHandlingTests.getWorkspaceName()); + suiteTeardown('Stop and delete the workspace by API', async function (): Promise { + await testWorkspaceUtil.stopAndDeleteWorkspaceByName(WorkspaceHandlingTests.getWorkspaceName()); }); suiteTeardown('Unregister running workspace', function (): void { diff --git a/tests/e2e/specs/dashboard-samples/Quarkus.spec.ts b/tests/e2e/specs/dashboard-samples/Quarkus.spec.ts index a6586813c1f..f1aacb142bd 100644 --- a/tests/e2e/specs/dashboard-samples/Quarkus.spec.ts +++ b/tests/e2e/specs/dashboard-samples/Quarkus.spec.ts @@ -75,8 +75,8 @@ suite(`The ${stackName} userstory ${BASE_TEST_CONSTANTS.TEST_ENVIRONMENT}`, func await browserTabsUtil.closeAllTabsExceptCurrent(); }); - suiteTeardown('Stop and delete the workspace by API', function (): void { - testWorkspaceUtil.stopAndDeleteWorkspaceByName(WorkspaceHandlingTests.getWorkspaceName()); + suiteTeardown('Stop and delete the workspace by API', async function (): Promise { + await testWorkspaceUtil.stopAndDeleteWorkspaceByName(WorkspaceHandlingTests.getWorkspaceName()); }); suiteTeardown('Unregister running workspace', function (): void { diff --git a/tests/e2e/specs/dashboard-samples/RecommendedExtensions.spec.ts b/tests/e2e/specs/dashboard-samples/RecommendedExtensions.spec.ts index 9948fd579d3..a88b4c5fe59 100644 --- a/tests/e2e/specs/dashboard-samples/RecommendedExtensions.spec.ts +++ b/tests/e2e/specs/dashboard-samples/RecommendedExtensions.spec.ts @@ -213,8 +213,8 @@ for (const sample of samples) { await browserTabsUtil.closeAllTabsExceptCurrent(); }); - suiteTeardown('Stop and delete the workspace by API', function (): void { - testWorkspaceUtil.stopAndDeleteWorkspaceByName(WorkspaceHandlingTests.getWorkspaceName()); + suiteTeardown('Stop and delete the workspace by API', async function (): Promise { + await testWorkspaceUtil.stopAndDeleteWorkspaceByName(WorkspaceHandlingTests.getWorkspaceName()); }); suiteTeardown('Unregister running workspace', function (): void { diff --git a/tests/e2e/specs/factory/Factory.spec.ts b/tests/e2e/specs/factory/Factory.spec.ts index 4ab45f2d4ec..70d237a4603 100644 --- a/tests/e2e/specs/factory/Factory.spec.ts +++ b/tests/e2e/specs/factory/Factory.spec.ts @@ -200,8 +200,8 @@ suite( await browserTabsUtil.closeAllTabsExceptCurrent(); }); - suiteTeardown('Stop and delete the workspace by API', function (): void { - testWorkspaceUtil.stopAndDeleteWorkspaceByName(WorkspaceHandlingTests.getWorkspaceName()); + suiteTeardown('Stop and delete the workspace by API', async function (): Promise { + await testWorkspaceUtil.stopAndDeleteWorkspaceByName(WorkspaceHandlingTests.getWorkspaceName()); }); suiteTeardown('Unregister running workspace', function (): void { diff --git a/tests/e2e/specs/factory/NoSetupRepoFactory.spec.ts b/tests/e2e/specs/factory/NoSetupRepoFactory.spec.ts index b77faebaf57..aab5ac7b005 100644 --- a/tests/e2e/specs/factory/NoSetupRepoFactory.spec.ts +++ b/tests/e2e/specs/factory/NoSetupRepoFactory.spec.ts @@ -248,8 +248,8 @@ suite( await browserTabsUtil.closeAllTabsExceptCurrent(); }); - suiteTeardown('Stop and delete the workspace by API', function (): void { - testWorkspaceUtil.stopAndDeleteWorkspaceByName(WorkspaceHandlingTests.getWorkspaceName()); + suiteTeardown('Stop and delete the workspace by API', async function (): Promise { + await testWorkspaceUtil.stopAndDeleteWorkspaceByName(WorkspaceHandlingTests.getWorkspaceName()); }); } diff --git a/tests/e2e/specs/factory/RefusedOAuthFactory.spec.ts b/tests/e2e/specs/factory/RefusedOAuthFactory.spec.ts index fe9dd15b973..0630c00a718 100644 --- a/tests/e2e/specs/factory/RefusedOAuthFactory.spec.ts +++ b/tests/e2e/specs/factory/RefusedOAuthFactory.spec.ts @@ -243,8 +243,8 @@ suite( await browserTabsUtil.closeAllTabsExceptCurrent(); }); - suiteTeardown('Stop and delete the workspace by API', function (): void { - testWorkspaceUtil.stopAndDeleteWorkspaceByName(WorkspaceHandlingTests.getWorkspaceName()); + suiteTeardown('Stop and delete the workspace by API', async function (): Promise { + await testWorkspaceUtil.stopAndDeleteWorkspaceByName(WorkspaceHandlingTests.getWorkspaceName()); }); suiteTeardown('Unregister running workspace', function (): void { diff --git a/tests/e2e/specs/miscellaneous/CreateWorkspaceWithExistedName.spec.ts b/tests/e2e/specs/miscellaneous/CreateWorkspaceWithExistedName.spec.ts index 775265e9f45..22d657125ae 100644 --- a/tests/e2e/specs/miscellaneous/CreateWorkspaceWithExistedName.spec.ts +++ b/tests/e2e/specs/miscellaneous/CreateWorkspaceWithExistedName.spec.ts @@ -86,9 +86,9 @@ suite(`"Start workspace with existed workspace name" test ${BASE_TEST_CONSTANTS. await browserTabsUtil.closeAllTabsExceptCurrent(); }); - suiteTeardown(`Stop and delete all created ${stackName} workspaces by API`, function (): void { - testWorkspaceUtil.stopAndDeleteWorkspaceByName(WorkspaceHandlingTests.getWorkspaceName()); - testWorkspaceUtil.stopAndDeleteWorkspaceByName(existedWorkspaceName); + suiteTeardown(`Stop and delete all created ${stackName} workspaces by API`, async function (): Promise { + await testWorkspaceUtil.stopAndDeleteWorkspaceByName(WorkspaceHandlingTests.getWorkspaceName()); + await testWorkspaceUtil.stopAndDeleteWorkspaceByName(existedWorkspaceName); }); suiteTeardown('Unregister running workspace', function (): void { diff --git a/tests/e2e/specs/miscellaneous/KubedockPodmanTest.spec.ts b/tests/e2e/specs/miscellaneous/KubedockPodmanTest.spec.ts index 769445df36a..bd0247fa930 100644 --- a/tests/e2e/specs/miscellaneous/KubedockPodmanTest.spec.ts +++ b/tests/e2e/specs/miscellaneous/KubedockPodmanTest.spec.ts @@ -94,8 +94,8 @@ suite( await browserTabsUtil.closeAllTabsExceptCurrent(); }); - suiteTeardown('Stop and delete the workspace by API', function (): void { - testWorkspaceUtil.stopAndDeleteWorkspaceByName(WorkspaceHandlingTests.getWorkspaceName()); + suiteTeardown('Stop and delete the workspace by API', async function (): Promise { + await testWorkspaceUtil.stopAndDeleteWorkspaceByName(WorkspaceHandlingTests.getWorkspaceName()); }); suiteTeardown('Unregister running workspace', function (): void { diff --git a/tests/e2e/specs/miscellaneous/WorkspaceIdleTimeout.spec.ts b/tests/e2e/specs/miscellaneous/WorkspaceIdleTimeout.spec.ts index 6df16153103..b0f35b5539f 100644 --- a/tests/e2e/specs/miscellaneous/WorkspaceIdleTimeout.spec.ts +++ b/tests/e2e/specs/miscellaneous/WorkspaceIdleTimeout.spec.ts @@ -101,8 +101,8 @@ suite('"Check workspace idle timeout" test', function (): void { await browserTabsUtil.closeAllTabsExceptCurrent(); }); - suiteTeardown('Stop and delete the workspace by API', function (): void { - testWorkspaceUtil.deleteWorkspaceByName(WorkspaceHandlingTests.getWorkspaceName()); + suiteTeardown('Stop and delete the workspace by API', async function (): Promise { + await testWorkspaceUtil.deleteWorkspaceByName(WorkspaceHandlingTests.getWorkspaceName()); }); suiteTeardown('Unregister running workspace', function (): void { diff --git a/tests/e2e/specs/miscellaneous/WorkspaceWithParent.spec.ts b/tests/e2e/specs/miscellaneous/WorkspaceWithParent.spec.ts index 4f220f26079..d5012a5c625 100644 --- a/tests/e2e/specs/miscellaneous/WorkspaceWithParent.spec.ts +++ b/tests/e2e/specs/miscellaneous/WorkspaceWithParent.spec.ts @@ -103,7 +103,7 @@ suite(`Workspace using a parent test suite ${BASE_TEST_CONSTANTS.TEST_ENVIRONMEN suiteTeardown('Stop and delete the workspace by API', async function (): Promise { await dashboard.openDashboard(); await browserTabsUtil.closeAllTabsExceptCurrent(); - testWorkspaceUtil.stopAndDeleteWorkspaceByName(WorkspaceHandlingTests.getWorkspaceName()); + await testWorkspaceUtil.stopAndDeleteWorkspaceByName(WorkspaceHandlingTests.getWorkspaceName()); }); suiteTeardown('Unregister running workspace', function (): void { diff --git a/tests/e2e/utils/workspace/ITestWorkspaceUtil.ts b/tests/e2e/utils/workspace/ITestWorkspaceUtil.ts index 533192c2a99..1fd3ce0ae56 100644 --- a/tests/e2e/utils/workspace/ITestWorkspaceUtil.ts +++ b/tests/e2e/utils/workspace/ITestWorkspaceUtil.ts @@ -11,33 +11,33 @@ import { WorkspaceStatus } from './WorkspaceStatus'; export interface ITestWorkspaceUtil { - waitWorkspaceStatus(workspaceName: string, expectedWorkspaceStatus: WorkspaceStatus): void; + waitWorkspaceStatus(workspaceName: string, expectedWorkspaceStatus: WorkspaceStatus): Promise; - stopWorkspaceByName(workspaceName: string): void; + stopWorkspaceByName(workspaceName: string): Promise; /** * delete a workspace without stopping phase (similar with force deleting) */ - deleteWorkspaceByName(workspaceName: string): void; + deleteWorkspaceByName(workspaceName: string): Promise; /** * stop workspace before deleting with checking stopping phase */ - stopAndDeleteWorkspaceByName(workspaceName: string): void; + stopAndDeleteWorkspaceByName(workspaceName: string): Promise; /** * stop all run workspaces in the namespace */ - stopAllRunningWorkspaces(): void; + stopAllRunningWorkspaces(): Promise; /** * stop all run workspaces, check statused and remove the workspaces */ - stopAndDeleteAllRunningWorkspaces(): void; + stopAndDeleteAllRunningWorkspaces(): Promise; /** * stop all run workspaces without stopping and waiting for of 'Stopped' phase * Similar with 'force' deleting */ - deleteAllWorkspaces(): void; + deleteAllWorkspaces(): Promise; } From 349e240cf5794ab66af27f1933df95c658be0dd3 Mon Sep 17 00:00:00 2001 From: mdolhalo Date: Mon, 30 Oct 2023 16:52:51 +0100 Subject: [PATCH 6/7] fix: added one level to isRootCaller() Signed-off-by: mdolhalo --- tests/e2e/utils/Logger.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/e2e/utils/Logger.ts b/tests/e2e/utils/Logger.ts index 36d1c302820..d67c6cc8583 100644 --- a/tests/e2e/utils/Logger.ts +++ b/tests/e2e/utils/Logger.ts @@ -150,7 +150,7 @@ export class Logger { private static isRootCaller(traceLevel: number = 6): boolean { return this.getCallStackArray() - .slice(traceLevel, traceLevel + 3) + .slice(traceLevel, traceLevel + 4) .reduce((acc, e): boolean => { return acc || /MochaHooks|CheReporter/.test(e); }, false); From baeb2c62d70e69473384c6ec8bef1d0897de2311 Mon Sep 17 00:00:00 2001 From: mdolhalo Date: Tue, 31 Oct 2023 09:59:46 +0100 Subject: [PATCH 7/7] fix: test PredefinedNamespace.spec.ts Signed-off-by: mdolhalo --- tests/e2e/specs/MochaHooks.ts | 6 +- .../miscellaneous/PredefinedNamespace.spec.ts | 63 +++++++++++++------ .../suites/disconnected-ocp/UITest.suite.ts | 2 +- tests/e2e/suites/online-ocp/UITest.suite.ts | 2 +- 4 files changed, 51 insertions(+), 22 deletions(-) diff --git a/tests/e2e/specs/MochaHooks.ts b/tests/e2e/specs/MochaHooks.ts index e431dab7867..2477a518f87 100644 --- a/tests/e2e/specs/MochaHooks.ts +++ b/tests/e2e/specs/MochaHooks.ts @@ -117,7 +117,9 @@ exports.mochaHooks = { async function deleteWorkspaceOnFailedTest(this: Mocha.Context): Promise { if (this.currentTest?.state === 'failed') { if (BASE_TEST_CONSTANTS.DELETE_WORKSPACE_ON_FAILED_TEST && CHROME_DRIVER_CONSTANTS.TS_USE_WEB_DRIVER_FOR_TEST) { - Logger.info('Property DELETE_WORKSPACE_ON_FAILED_TEST is true - trying to stop and delete running workspace with API.'); + Logger.trace( + 'Property DELETE_WORKSPACE_ON_FAILED_TEST is true - trying to stop and delete running workspace with API.' + ); const testWorkspaceUtil: ITestWorkspaceUtil = e2eContainer.get(TYPES.WorkspaceUtil); await testWorkspaceUtil.stopAndDeleteWorkspaceByName(latestWorkspace); } @@ -129,7 +131,7 @@ exports.mochaHooks = { async function deleteAllWorkspacesOnFinish(): Promise { try { if (BASE_TEST_CONSTANTS.DELETE_ALL_WORKSPACES_ON_RUN_FINISH && CHROME_DRIVER_CONSTANTS.TS_USE_WEB_DRIVER_FOR_TEST) { - Logger.info( + Logger.trace( 'Property DELETE_WORKSPACE_ON_FAILED_TEST is true - trying to stop and delete all running workspace after test run with API.' ); const testWorkspaceUtil: ITestWorkspaceUtil = e2eContainer.get(TYPES.WorkspaceUtil); diff --git a/tests/e2e/specs/miscellaneous/PredefinedNamespace.spec.ts b/tests/e2e/specs/miscellaneous/PredefinedNamespace.spec.ts index 1448a494ac8..0d42cacebc6 100644 --- a/tests/e2e/specs/miscellaneous/PredefinedNamespace.spec.ts +++ b/tests/e2e/specs/miscellaneous/PredefinedNamespace.spec.ts @@ -9,7 +9,7 @@ **********************************************************************/ import { e2eContainer } from '../../configs/inversify.config'; import { expect } from 'chai'; -import { CLASSES } from '../../configs/inversify.types'; +import { CLASSES, TYPES } from '../../configs/inversify.types'; import { WorkspaceHandlingTests } from '../../tests-library/WorkspaceHandlingTests'; import { Logger } from '../../utils/Logger'; import { LoginTests } from '../../tests-library/LoginTests'; @@ -17,26 +17,33 @@ import { registerRunningWorkspace } from '../MochaHooks'; import { KubernetesCommandLineToolsExecutor } from '../../utils/KubernetesCommandLineToolsExecutor'; import { ShellExecutor } from '../../utils/ShellExecutor'; import { BASE_TEST_CONSTANTS } from '../../constants/BASE_TEST_CONSTANTS'; +import { BrowserTabsUtil } from '../../utils/BrowserTabsUtil'; +import { Dashboard } from '../../pageobjects/dashboard/Dashboard'; import { OAUTH_CONSTANTS } from '../../constants/OAUTH_CONSTANTS'; +import { ITestWorkspaceUtil } from '../../utils/workspace/ITestWorkspaceUtil'; suite(`Create predefined workspace and check it ${BASE_TEST_CONSTANTS.TEST_ENVIRONMENT}`, function (): void { const predefinedNamespaceName: string = 'predefined-ns'; const stackName: string = 'Empty Workspace'; + const userName: string = 'user'; + const browserTabsUtil: BrowserTabsUtil = e2eContainer.get(CLASSES.BrowserTabsUtil); + const dashboard: Dashboard = e2eContainer.get(CLASSES.Dashboard); const loginTests: LoginTests = e2eContainer.get(CLASSES.LoginTests); const workspaceHandlingTests: WorkspaceHandlingTests = e2eContainer.get(CLASSES.WorkspaceHandlingTests); const kubernetesCommandLineToolsExecutor: KubernetesCommandLineToolsExecutor = e2eContainer.get( CLASSES.KubernetesCommandLineToolsExecutor ); const shellExecutor: ShellExecutor = e2eContainer.get(CLASSES.ShellExecutor); + const testWorkspaceUtil: ITestWorkspaceUtil = e2eContainer.get(TYPES.WorkspaceUtil); suiteSetup(function (): void { // create a predefined namespace for user using shell script and login into user dashboard - Logger.info('Test prerequisites:'); - Logger.info( + Logger.debug('Test prerequisites:'); + Logger.debug( ' (1) there is OCP user with username and user password that have been set in the TS_SELENIUM_OCP_USERNAME and TS_SELENIUM_OCP_PASSWORD variables' ); - Logger.info(' (2) "oc" client installed and logged into test OCP cluster with admin rights.'); + Logger.debug(' (2) "oc" client installed and logged into test OCP cluster with admin rights.'); kubernetesCommandLineToolsExecutor.loginToOcp('admin'); const predefinedProjectConfiguration: string = 'kind: Namespace\n' + @@ -53,21 +60,15 @@ suite(`Create predefined workspace and check it ${BASE_TEST_CONSTANTS.TEST_ENVIR shellExecutor.executeCommand(setEditRightsForUser); }); - suiteTeardown(function (): void { - const workspaceName: string = WorkspaceHandlingTests.getWorkspaceName(); - try { - kubernetesCommandLineToolsExecutor.deleteDevWorkspace(); - kubernetesCommandLineToolsExecutor.deleteProject(predefinedNamespaceName); - } catch (e) { - Logger.error(`Cannot remove the predefined project: ${workspaceName}, please fix it manually: ${e}`); - } - }); - suiteSetup('Login', async function (): Promise { - const userName: string = 'user'; - await loginTests.loginIntoChe(userName); - if (OAUTH_CONSTANTS.TS_SELENIUM_OCP_USERNAME !== userName) { - await loginTests.logoutFromChe(); + if (OAUTH_CONSTANTS.TS_SELENIUM_OCP_USERNAME === userName) { + await loginTests.loginIntoChe(); + } else { + try { + await loginTests.logoutFromChe(); + } catch (e) { + Logger.trace('user was not logged in.'); + } await loginTests.loginIntoChe(userName); } }); @@ -89,6 +90,32 @@ suite(`Create predefined workspace and check it ${BASE_TEST_CONSTANTS.TEST_ENVIR expect(ocDevWorkspaceOutput).includes(workspaceName); }); + suiteTeardown(function (): void { + const workspaceName: string = WorkspaceHandlingTests.getWorkspaceName(); + try { + kubernetesCommandLineToolsExecutor.deleteDevWorkspace(); + kubernetesCommandLineToolsExecutor.deleteProject(predefinedNamespaceName); + } catch (e) { + Logger.error(`Cannot remove the predefined project: ${workspaceName}, please fix it manually: ${e}`); + } + }); + + suiteTeardown('Re-login with test user', async function (): Promise { + if (OAUTH_CONSTANTS.TS_SELENIUM_OCP_USERNAME !== userName) { + await loginTests.logoutFromChe(); + await loginTests.loginIntoChe(); + } + }); + + suiteTeardown('Open dashboard and close all other tabs', async function (): Promise { + await dashboard.openDashboard(); + await browserTabsUtil.closeAllTabsExceptCurrent(); + }); + + suiteTeardown('Stop and delete the workspace by API', async function (): Promise { + await testWorkspaceUtil.stopAndDeleteWorkspaceByName(WorkspaceHandlingTests.getWorkspaceName()); + }); + suiteTeardown('Unregister running workspace', function (): void { registerRunningWorkspace(''); }); diff --git a/tests/e2e/suites/disconnected-ocp/UITest.suite.ts b/tests/e2e/suites/disconnected-ocp/UITest.suite.ts index 6b72940936f..879138158a0 100644 --- a/tests/e2e/suites/disconnected-ocp/UITest.suite.ts +++ b/tests/e2e/suites/disconnected-ocp/UITest.suite.ts @@ -12,5 +12,5 @@ import '../../specs/dashboard-samples/RecommendedExtensions.spec'; import '../../specs/dashboard-samples/Documentation.spec'; import '../../specs/devconsole-intergration/DevConsoleIntegration.spec'; import '../../specs/miscellaneous/CreateWorkspaceWithExistedName.spec'; -import '../../specs/miscellaneous/PredefinedNamespace.spec'; import '../../specs/miscellaneous/WorkspaceWithParent.spec'; +import '../../specs/miscellaneous/PredefinedNamespace.spec'; diff --git a/tests/e2e/suites/online-ocp/UITest.suite.ts b/tests/e2e/suites/online-ocp/UITest.suite.ts index 4efc46a8fea..0899211f776 100644 --- a/tests/e2e/suites/online-ocp/UITest.suite.ts +++ b/tests/e2e/suites/online-ocp/UITest.suite.ts @@ -15,5 +15,5 @@ import '../../specs/dashboard-samples/Documentation.spec'; import '../../specs/devconsole-intergration/DevConsoleIntegration.spec'; import '../../specs/miscellaneous/CreateWorkspaceWithExistedName.spec'; import '../../specs/miscellaneous/KubedockPodmanTest.spec'; -import '../../specs/miscellaneous/PredefinedNamespace.spec'; import '../../specs/miscellaneous/WorkspaceWithParent.spec'; +import '../../specs/miscellaneous/PredefinedNamespace.spec';