@eclipse-che/che-e2e 7.73.0-dev-11985ec → 7.73.0-dev-62c0c9d
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/configs/inversify.config.ts +6 -6
- package/configs/inversify.types.ts +27 -27
- package/configs/mocharc.ts +21 -21
- package/constants/APITestConstants.ts +39 -38
- package/constants/BaseTestConstants.ts +44 -43
- package/constants/ChromeDriverConstants.ts +29 -29
- package/constants/FactoryTestConstants.ts +30 -30
- package/constants/MonacoConstants.ts +10 -10
- package/constants/OAuthConstants.ts +46 -46
- package/constants/PluginsTestConstants.ts +1 -1
- package/constants/ReporterConstants.ts +28 -28
- package/constants/TimeoutConstants.ts +101 -101
- package/dist/configs/inversify.config.js.map +1 -1
- package/dist/configs/inversify.types.js.map +1 -1
- package/dist/configs/mocharc.js +1 -1
- package/dist/configs/mocharc.js.map +1 -1
- package/dist/constants/APITestConstants.js +2 -2
- package/dist/constants/APITestConstants.js.map +1 -1
- package/dist/constants/BaseTestConstants.js +1 -1
- package/dist/constants/BaseTestConstants.js.map +1 -1
- package/dist/constants/ChromeDriverConstants.js +1 -1
- package/dist/constants/ChromeDriverConstants.js.map +1 -1
- package/dist/constants/FactoryTestConstants.js +2 -2
- package/dist/constants/FactoryTestConstants.js.map +1 -1
- package/dist/constants/MonacoConstants.js +1 -1
- package/dist/constants/MonacoConstants.js.map +1 -1
- package/dist/constants/OAuthConstants.js +1 -1
- package/dist/constants/OAuthConstants.js.map +1 -1
- package/dist/constants/PluginsTestConstants.js +1 -1
- package/dist/constants/ReporterConstants.js +1 -1
- package/dist/constants/ReporterConstants.js.map +1 -1
- package/dist/constants/TimeoutConstants.js.map +1 -1
- package/dist/driver/ChromeDriver.js.map +1 -1
- package/dist/pageobjects/dashboard/CreateWorkspace.js +8 -8
- package/dist/pageobjects/dashboard/CreateWorkspace.js.map +1 -1
- package/dist/pageobjects/dashboard/Dashboard.js +11 -11
- package/dist/pageobjects/dashboard/Dashboard.js.map +1 -1
- package/dist/pageobjects/dashboard/Workspaces.js +14 -14
- package/dist/pageobjects/dashboard/Workspaces.js.map +1 -1
- package/dist/pageobjects/dashboard/workspace-details/WorkspaceDetails.js +8 -8
- package/dist/pageobjects/dashboard/workspace-details/WorkspaceDetails.js.map +1 -1
- package/dist/pageobjects/git-providers/OauthPage.js +21 -21
- package/dist/pageobjects/git-providers/OauthPage.js.map +1 -1
- package/dist/pageobjects/ide/CheCodeLocatorLoader.js +1 -1
- package/dist/pageobjects/ide/CheCodeLocatorLoader.js.map +1 -1
- package/dist/pageobjects/login/kubernetes/DexLoginPage.js +5 -5
- package/dist/pageobjects/login/kubernetes/DexLoginPage.js.map +1 -1
- package/dist/pageobjects/login/kubernetes/KubernetesLoginPage.js +1 -1
- package/dist/pageobjects/login/kubernetes/KubernetesLoginPage.js.map +1 -1
- package/dist/pageobjects/login/openshift/OcpLoginPage.js +10 -10
- package/dist/pageobjects/login/openshift/OcpLoginPage.js.map +1 -1
- package/dist/pageobjects/login/openshift/OcpRedHatLoginPage.js +2 -2
- package/dist/pageobjects/login/openshift/OcpRedHatLoginPage.js.map +1 -1
- package/dist/pageobjects/login/openshift/OcpUserLoginPage.js +1 -1
- package/dist/pageobjects/login/openshift/OcpUserLoginPage.js.map +1 -1
- package/dist/pageobjects/login/openshift/RedHatLoginPage.js +6 -6
- package/dist/pageobjects/login/openshift/RedHatLoginPage.js.map +1 -1
- package/dist/pageobjects/login/openshift/RegularUserOcpCheLoginPage.js +2 -2
- package/dist/pageobjects/login/openshift/RegularUserOcpCheLoginPage.js.map +1 -1
- package/dist/pageobjects/openshift/OcpApplicationPage.js +2 -2
- package/dist/pageobjects/openshift/OcpApplicationPage.js.map +1 -1
- package/dist/pageobjects/openshift/OcpImportFromGitPage.js +5 -5
- package/dist/pageobjects/openshift/OcpImportFromGitPage.js.map +1 -1
- package/dist/pageobjects/openshift/OcpMainPage.js +11 -11
- package/dist/pageobjects/openshift/OcpMainPage.js.map +1 -1
- package/dist/specs/MochaHooks.js +1 -1
- package/dist/specs/MochaHooks.js.map +1 -1
- package/dist/specs/SmokeTest.spec.js +7 -3
- package/dist/specs/SmokeTest.spec.js.map +1 -1
- package/dist/specs/api/ContainerOverridesAPI.spec.js.map +1 -1
- package/dist/specs/api/DevfileAcceptanceTestAPI.spec.js +7 -5
- package/dist/specs/api/DevfileAcceptanceTestAPI.spec.js.map +1 -1
- package/dist/specs/api/EmptyWorkspaceAPI.spec.js +1 -1
- package/dist/specs/api/EmptyWorkspaceAPI.spec.js.map +1 -1
- package/dist/specs/api/PodOverridesAPI.spec.js.map +1 -1
- package/dist/specs/dashboard-samples/EmptyWorkspace.spec.js +9 -5
- package/dist/specs/dashboard-samples/EmptyWorkspace.spec.js.map +1 -1
- package/dist/specs/dashboard-samples/Quarkus.spec.js +7 -3
- package/dist/specs/dashboard-samples/Quarkus.spec.js.map +1 -1
- package/dist/specs/dashboard-samples/{RecomendedExtentions.spec.js → RecommendedExtensions.spec.js} +7 -3
- package/dist/specs/dashboard-samples/{RecomendedExtentions.spec.js.map → RecommendedExtensions.spec.js.map} +1 -1
- package/dist/specs/devconsole-intergration/DevConsoleIntegration.spec.js +3 -1
- package/dist/specs/devconsole-intergration/DevConsoleIntegration.spec.js.map +1 -1
- package/dist/specs/factory/Factory.spec.js +3 -1
- package/dist/specs/factory/Factory.spec.js.map +1 -1
- package/dist/specs/factory/NoSetupRepoFactory.spec.js +4 -2
- package/dist/specs/factory/NoSetupRepoFactory.spec.js.map +1 -1
- package/dist/specs/factory/RefusedOAuthFactory.spec.js +4 -2
- package/dist/specs/factory/RefusedOAuthFactory.spec.js.map +1 -1
- package/dist/specs/miscellaneous/PredefinedNamespace.spec.js +6 -2
- package/dist/specs/miscellaneous/PredefinedNamespace.spec.js.map +1 -1
- package/dist/tests-library/LoginTests.js.map +1 -1
- package/dist/tests-library/ProjectAndFileTests.js +3 -3
- package/dist/tests-library/ProjectAndFileTests.js.map +1 -1
- package/dist/tests-library/WorkspaceHandlingTests.js +54 -74
- package/dist/tests-library/WorkspaceHandlingTests.js.map +1 -1
- package/dist/utils/BrowserTabsUtil.js +10 -10
- package/dist/utils/BrowserTabsUtil.js.map +1 -1
- package/dist/utils/CheReporter.js.map +1 -1
- package/dist/utils/DevWorkspaceConfigurationHelper.js +2 -2
- package/dist/utils/DevWorkspaceConfigurationHelper.js.map +1 -1
- package/dist/utils/DevfilesRegistryHelper.js +7 -7
- package/dist/utils/DevfilesRegistryHelper.js.map +1 -1
- package/dist/utils/DriverHelper.js +81 -81
- package/dist/utils/DriverHelper.js.map +1 -1
- package/dist/utils/KubernetesCommandLineToolsExecutor.js +38 -35
- package/dist/utils/KubernetesCommandLineToolsExecutor.js.map +1 -1
- package/dist/utils/Logger.js +19 -10
- package/dist/utils/Logger.js.map +1 -1
- package/dist/utils/ScreenCatcher.js.map +1 -1
- package/dist/utils/ShellExecutor.js.map +1 -1
- package/dist/utils/StringUtil.js +2 -2
- package/dist/utils/StringUtil.js.map +1 -1
- package/dist/utils/request-handlers/CheApiRequestHandler.js +13 -11
- package/dist/utils/request-handlers/CheApiRequestHandler.js.map +1 -1
- package/dist/utils/request-handlers/headers/CheMultiuserAuthorizationHeaderHandler.js +1 -1
- package/dist/utils/request-handlers/headers/CheMultiuserAuthorizationHeaderHandler.js.map +1 -1
- package/dist/utils/workspace/ApiUrlResolver.js +3 -3
- package/dist/utils/workspace/ApiUrlResolver.js.map +1 -1
- package/dist/utils/workspace/TestWorkspaceUtil.js +20 -16
- package/dist/utils/workspace/TestWorkspaceUtil.js.map +1 -1
- package/dist/utils/workspace/WorkspaceStatus.js.map +1 -1
- package/driver/ChromeDriver.ts +44 -44
- package/driver/IDriver.ts +1 -1
- package/package.json +1 -1
- package/pageobjects/dashboard/CreateWorkspace.ts +52 -52
- package/pageobjects/dashboard/Dashboard.ts +72 -72
- package/pageobjects/dashboard/Workspaces.ts +138 -139
- package/pageobjects/dashboard/workspace-details/WorkspaceDetails.ts +92 -93
- package/pageobjects/git-providers/OauthPage.ts +136 -136
- package/pageobjects/ide/CheCodeLocatorLoader.ts +40 -40
- package/pageobjects/login/interfaces/ICheLoginPage.ts +1 -1
- package/pageobjects/login/interfaces/IOcpLoginPage.ts +1 -1
- package/pageobjects/login/kubernetes/DexLoginPage.ts +27 -27
- package/pageobjects/login/kubernetes/KubernetesLoginPage.ts +11 -11
- package/pageobjects/login/openshift/OcpLoginPage.ts +50 -50
- package/pageobjects/login/openshift/OcpRedHatLoginPage.ts +21 -21
- package/pageobjects/login/openshift/OcpUserLoginPage.ts +14 -14
- package/pageobjects/login/openshift/RedHatLoginPage.ts +44 -41
- package/pageobjects/login/openshift/RegularUserOcpCheLoginPage.ts +23 -23
- package/pageobjects/openshift/OcpApplicationPage.ts +16 -16
- package/pageobjects/openshift/OcpImportFromGitPage.ts +54 -54
- package/pageobjects/openshift/OcpMainPage.ts +64 -64
- package/specs/MochaHooks.ts +44 -44
- package/specs/SmokeTest.spec.ts +35 -31
- package/specs/api/ContainerOverridesAPI.spec.ts +23 -23
- package/specs/api/DevfileAcceptanceTestAPI.spec.ts +93 -91
- package/specs/api/EmptyWorkspaceAPI.spec.ts +50 -50
- package/specs/api/PodOverridesAPI.spec.ts +29 -29
- package/specs/dashboard-samples/EmptyWorkspace.spec.ts +29 -25
- package/specs/dashboard-samples/Quarkus.spec.ts +31 -27
- package/specs/dashboard-samples/RecommendedExtensions.spec.ts +205 -0
- package/specs/devconsole-intergration/DevConsoleIntegration.spec.ts +62 -64
- package/specs/factory/Factory.spec.ts +149 -147
- package/specs/factory/NoSetupRepoFactory.spec.ts +188 -186
- package/specs/factory/RefusedOAuthFactory.spec.ts +182 -180
- package/specs/miscellaneous/PredefinedNamespace.spec.ts +52 -48
- package/tests-library/LoginTests.ts +29 -29
- package/tests-library/ProjectAndFileTests.ts +13 -13
- package/tests-library/WorkspaceHandlingTests.ts +84 -103
- package/utils/BrowserTabsUtil.ts +69 -69
- package/utils/CheReporter.ts +4 -6
- package/utils/DevWorkspaceConfigurationHelper.ts +58 -58
- package/utils/DevfilesRegistryHelper.ts +51 -51
- package/utils/DriverHelper.ts +599 -600
- package/utils/KubernetesCommandLineToolsExecutor.ts +166 -158
- package/utils/Logger.ts +98 -67
- package/utils/ScreenCatcher.ts +42 -42
- package/utils/ShellExecutor.ts +10 -10
- package/utils/StringUtil.ts +29 -30
- package/utils/request-handlers/CheApiRequestHandler.ts +84 -82
- package/utils/request-handlers/headers/CheMultiuserAuthorizationHeaderHandler.ts +18 -18
- package/utils/request-handlers/headers/IAuthorizationHeaderHandler.ts +1 -1
- package/utils/workspace/ApiUrlResolver.ts +23 -23
- package/utils/workspace/ITestWorkspaceUtil.ts +29 -29
- package/utils/workspace/TestWorkspaceUtil.ts +120 -116
- package/utils/workspace/WorkspaceStatus.ts +3 -3
- package/specs/dashboard-samples/RecomendedExtentions.spec.ts +0 -201
|
@@ -45,7 +45,7 @@ let TestWorkspaceUtil = class TestWorkspaceUtil {
|
|
|
45
45
|
this.attempts = TimeoutConstants_1.TimeoutConstants.TS_DASHBOARD_WORKSPACE_STOP_TIMEOUT / this.polling;
|
|
46
46
|
}
|
|
47
47
|
async waitWorkspaceStatus(workspaceName, expectedWorkspaceStatus) {
|
|
48
|
-
Logger_1.Logger.debug(
|
|
48
|
+
Logger_1.Logger.debug();
|
|
49
49
|
let workspaceStatus = '';
|
|
50
50
|
let expectedStatus = false;
|
|
51
51
|
for (let i = 0; i < this.attempts; i++) {
|
|
@@ -66,26 +66,30 @@ let TestWorkspaceUtil = class TestWorkspaceUtil {
|
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
68
|
async stopWorkspaceByName(workspaceName) {
|
|
69
|
-
Logger_1.Logger.debug(
|
|
69
|
+
Logger_1.Logger.debug(`${workspaceName}`);
|
|
70
70
|
const stopWorkspaceApiUrl = await this.apiUrlResolver.getWorkspaceApiUrl(workspaceName);
|
|
71
71
|
let stopWorkspaceResponse;
|
|
72
72
|
try {
|
|
73
|
-
stopWorkspaceResponse = await this.processRequestHandler.patch(stopWorkspaceApiUrl, [{
|
|
73
|
+
stopWorkspaceResponse = await this.processRequestHandler.patch(stopWorkspaceApiUrl, [{
|
|
74
|
+
'op': 'replace',
|
|
75
|
+
'path': '/spec/started',
|
|
76
|
+
'value': false
|
|
77
|
+
}]);
|
|
74
78
|
}
|
|
75
79
|
catch (err) {
|
|
76
|
-
Logger_1.Logger.error(`
|
|
80
|
+
Logger_1.Logger.error(`stop workspace call failed. URL used: ${stopWorkspaceApiUrl}`);
|
|
77
81
|
throw err;
|
|
78
82
|
}
|
|
79
83
|
if (stopWorkspaceResponse.status !== 200) {
|
|
80
84
|
throw new Error(`Cannot stop workspace. Code: ${stopWorkspaceResponse.status} Data: ${stopWorkspaceResponse.data}`);
|
|
81
85
|
}
|
|
82
86
|
await this.waitWorkspaceStatus(workspaceName, WorkspaceStatus_1.WorkspaceStatus.STOPPED);
|
|
83
|
-
Logger_1.Logger.debug(
|
|
87
|
+
Logger_1.Logger.debug(`${workspaceName} stopped successfully`);
|
|
84
88
|
}
|
|
85
89
|
// delete a workspace without stopping phase (similar with force deleting)
|
|
86
90
|
async deleteWorkspaceByName(workspaceName) {
|
|
87
91
|
var _a, _b;
|
|
88
|
-
Logger_1.Logger.debug(
|
|
92
|
+
Logger_1.Logger.debug(`${workspaceName}`);
|
|
89
93
|
const deleteWorkspaceApiUrl = await this.apiUrlResolver.getWorkspaceApiUrl(workspaceName);
|
|
90
94
|
let deleteWorkspaceResponse;
|
|
91
95
|
let deleteWorkspaceStatus = false;
|
|
@@ -94,10 +98,10 @@ let TestWorkspaceUtil = class TestWorkspaceUtil {
|
|
|
94
98
|
}
|
|
95
99
|
catch (error) {
|
|
96
100
|
if (axios_1.default.isAxiosError(error) && ((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 404) {
|
|
97
|
-
Logger_1.Logger.error(`
|
|
101
|
+
Logger_1.Logger.error(`the workspace :${workspaceName} not found`);
|
|
98
102
|
throw error;
|
|
99
103
|
}
|
|
100
|
-
Logger_1.Logger.error(`
|
|
104
|
+
Logger_1.Logger.error(`delete workspace call failed. URL used: ${deleteWorkspaceStatus}`);
|
|
101
105
|
throw error;
|
|
102
106
|
}
|
|
103
107
|
if (deleteWorkspaceResponse.status !== 204) {
|
|
@@ -110,7 +114,7 @@ let TestWorkspaceUtil = class TestWorkspaceUtil {
|
|
|
110
114
|
catch (error) {
|
|
111
115
|
if (axios_1.default.isAxiosError(error) && ((_b = error.response) === null || _b === void 0 ? void 0 : _b.status) === 404) {
|
|
112
116
|
deleteWorkspaceStatus = true;
|
|
113
|
-
Logger_1.Logger.debug(
|
|
117
|
+
Logger_1.Logger.debug(`${workspaceName} deleted successfully`);
|
|
114
118
|
break;
|
|
115
119
|
}
|
|
116
120
|
}
|
|
@@ -122,36 +126,36 @@ let TestWorkspaceUtil = class TestWorkspaceUtil {
|
|
|
122
126
|
}
|
|
123
127
|
// stop workspace before deleting with checking stopping phase
|
|
124
128
|
async stopAndDeleteWorkspaceByName(workspaceName) {
|
|
125
|
-
Logger_1.Logger.debug(
|
|
129
|
+
Logger_1.Logger.debug();
|
|
126
130
|
await this.stopWorkspaceByName(workspaceName);
|
|
127
131
|
await this.deleteWorkspaceByName(workspaceName);
|
|
128
132
|
}
|
|
129
133
|
// stop all run workspaces in the namespace
|
|
130
134
|
async stopAllRunningWorkspaces(namespace) {
|
|
131
|
-
Logger_1.Logger.debug(
|
|
135
|
+
Logger_1.Logger.debug();
|
|
132
136
|
let response = await this.processRequestHandler.get(await this.apiUrlResolver.getWorkspacesApiUrl());
|
|
133
137
|
for (let i = 0; i < response.data.items.length; i++) {
|
|
134
|
-
Logger_1.Logger.info('
|
|
138
|
+
Logger_1.Logger.info('the project is being stopped: ' + response.data.items[i].metadata.name);
|
|
135
139
|
await this.stopWorkspaceByName(response.data.items[i].metadata.name);
|
|
136
140
|
}
|
|
137
141
|
}
|
|
138
142
|
// stop all run workspaces, check statuses and remove the workspaces
|
|
139
143
|
async stopAndDeleteAllRunningWorkspaces(namespace) {
|
|
140
|
-
Logger_1.Logger.debug(
|
|
144
|
+
Logger_1.Logger.debug();
|
|
141
145
|
let response = await this.processRequestHandler.get(await this.apiUrlResolver.getWorkspacesApiUrl());
|
|
142
146
|
await this.stopAllRunningWorkspaces(namespace);
|
|
143
147
|
for (let i = 0; i < response.data.items.length; i++) {
|
|
144
|
-
Logger_1.Logger.info('
|
|
148
|
+
Logger_1.Logger.info('the project is being deleted: ' + response.data.items[i].metadata.name);
|
|
145
149
|
await this.deleteWorkspaceByName(response.data.items[i].metadata.name);
|
|
146
150
|
}
|
|
147
151
|
}
|
|
148
152
|
// stop all run workspaces without stopping and waiting for of 'Stopped' phase
|
|
149
153
|
// similar with 'force' deleting
|
|
150
154
|
async deleteAllWorkspaces(namespace) {
|
|
151
|
-
Logger_1.Logger.debug(
|
|
155
|
+
Logger_1.Logger.debug();
|
|
152
156
|
let response = await this.processRequestHandler.get(await this.apiUrlResolver.getWorkspacesApiUrl());
|
|
153
157
|
for (let i = 0; i < response.data.items.length; i++) {
|
|
154
|
-
Logger_1.Logger.info('
|
|
158
|
+
Logger_1.Logger.info('the project is being deleted .......: ' + response.data.items[i].metadata.name);
|
|
155
159
|
await this.deleteWorkspaceByName(response.data.items[i].metadata.name);
|
|
156
160
|
}
|
|
157
161
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestWorkspaceUtil.js","sourceRoot":"","sources":["../../../utils/workspace/TestWorkspaceUtil.ts"],"names":[],"mappings":";AAAA;;;;;;;;wEAQwE;;;;;;;;;;;;;;;;;;AAExE,4BAA0B;AAC1B,yCAA+C;AAC/C,kDAA+C;AAC/C,uDAAoD;AACpD,2DAA2C;AAC3C,mFAAgF;AAChF,mEAAwD;AACxD,sCAAmC;AACnC,kDAA6C;AAE7C,qDAAkD;AAClD,uEAAoE;AAGpE,IAAa,iBAAiB,GAA9B,MAAa,iBAAiB;
|
|
1
|
+
{"version":3,"file":"TestWorkspaceUtil.js","sourceRoot":"","sources":["../../../utils/workspace/TestWorkspaceUtil.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkspaceStatus.js","sourceRoot":"","sources":["../../../utils/workspace/WorkspaceStatus.ts"],"names":[],"mappings":";AAAA;;;;;;;;wEAQwE;;;AAExE,IAAY,eAIX;AAJD,WAAY,eAAe;
|
|
1
|
+
{"version":3,"file":"WorkspaceStatus.js","sourceRoot":"","sources":["../../../utils/workspace/WorkspaceStatus.ts"],"names":[],"mappings":";AAAA;;;;;;;;wEAQwE;;;AAExE,IAAY,eAIX;AAJD,WAAY,eAAe;IACzB,sCAAmB,CAAA;IACnB,sCAAmB,CAAA;IACnB,wCAAqB,CAAA;AACvB,CAAC,EAJW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAI1B"}
|
package/driver/ChromeDriver.ts
CHANGED
|
@@ -10,66 +10,66 @@
|
|
|
10
10
|
import 'chromedriver';
|
|
11
11
|
import 'reflect-metadata';
|
|
12
12
|
import { injectable } from 'inversify';
|
|
13
|
-
import {
|
|
13
|
+
import { Builder, ThenableWebDriver } from 'selenium-webdriver';
|
|
14
14
|
import { IDriver } from './IDriver';
|
|
15
15
|
import { Options } from 'selenium-webdriver/chrome';
|
|
16
16
|
import { ChromeDriverConstants } from '../constants/ChromeDriverConstants';
|
|
17
17
|
|
|
18
18
|
@injectable()
|
|
19
19
|
export class ChromeDriver implements IDriver {
|
|
20
|
-
|
|
20
|
+
private readonly driver: ThenableWebDriver | undefined;
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
22
|
+
constructor() {
|
|
23
|
+
const options: Options = this.getDriverOptions();
|
|
24
|
+
if (ChromeDriverConstants.TS_USE_WEB_DRIVER_FOR_TEST) {
|
|
25
|
+
this.driver = this.getDriverBuilder(options).build();
|
|
27
26
|
}
|
|
27
|
+
}
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
get(): ThenableWebDriver {
|
|
30
|
+
return this.driver as ThenableWebDriver;
|
|
31
|
+
}
|
|
32
32
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
33
|
+
async setWindowSize(): Promise<void> {
|
|
34
|
+
await (this.driver as ThenableWebDriver)
|
|
35
|
+
.manage()
|
|
36
|
+
.window()
|
|
37
|
+
.setSize(ChromeDriverConstants.TS_SELENIUM_RESOLUTION_WIDTH, ChromeDriverConstants.TS_SELENIUM_RESOLUTION_HEIGHT);
|
|
38
|
+
}
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
return options;
|
|
40
|
+
private getDriverOptions(): Options {
|
|
41
|
+
let options: Options = new Options()
|
|
42
|
+
.addArguments('--no-sandbox')
|
|
43
|
+
.addArguments('--disable-web-security')
|
|
44
|
+
.addArguments('--allow-running-insecure-content')
|
|
45
|
+
.addArguments('--ignore-certificate-errors');
|
|
46
|
+
// if 'true' run in 'headless' mode
|
|
47
|
+
if (ChromeDriverConstants.TS_SELENIUM_HEADLESS) {
|
|
48
|
+
options = options.addArguments('headless');
|
|
51
49
|
}
|
|
50
|
+
return options;
|
|
51
|
+
}
|
|
52
52
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
53
|
+
private getDriverBuilder(options: Options): Builder {
|
|
54
|
+
const disableW3copts: object = { 'goog:chromeOptions': { 'w3c': false } };
|
|
55
|
+
let builder: Builder = new Builder()
|
|
56
|
+
.forBrowser('chrome')
|
|
57
|
+
.setChromeOptions(options);
|
|
58
58
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
59
|
+
// if 'false' w3c protocol is disabled
|
|
60
|
+
if (!ChromeDriverConstants.TS_SELENIUM_W3C_CHROME_OPTION) {
|
|
61
|
+
builder.withCapabilities(disableW3copts)
|
|
62
|
+
.forBrowser('chrome')
|
|
63
|
+
.setChromeOptions(options);
|
|
64
|
+
}
|
|
65
65
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
66
|
+
// if 'true' run with remote driver
|
|
67
|
+
if (ChromeDriverConstants.TS_SELENIUM_REMOTE_DRIVER_URL) {
|
|
68
|
+
builder = builder.usingServer(ChromeDriverConstants.TS_SELENIUM_REMOTE_DRIVER_URL);
|
|
69
|
+
}
|
|
70
70
|
|
|
71
|
-
|
|
71
|
+
return builder;
|
|
72
72
|
|
|
73
|
-
|
|
73
|
+
}
|
|
74
74
|
|
|
75
75
|
}
|
package/driver/IDriver.ts
CHANGED
package/package.json
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* SPDX-License-Identifier: EPL-2.0
|
|
9
9
|
**********************************************************************/
|
|
10
10
|
|
|
11
|
-
import {
|
|
11
|
+
import { inject, injectable } from 'inversify';
|
|
12
12
|
import { CLASSES } from '../../configs/inversify.types';
|
|
13
13
|
import { DriverHelper } from '../../utils/DriverHelper';
|
|
14
14
|
import { By, Key } from 'selenium-webdriver';
|
|
@@ -18,80 +18,80 @@ import { BaseTestConstants } from '../../constants/BaseTestConstants';
|
|
|
18
18
|
|
|
19
19
|
@injectable()
|
|
20
20
|
export class CreateWorkspace {
|
|
21
|
-
|
|
21
|
+
static readonly FACTORY_URL_LOCATOR: By = By.xpath(`//input[@id="git-repo-url"]`);
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
constructor(@inject(CLASSES.DriverHelper) private readonly driverHelper: DriverHelper) { }
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
async waitTitleContains(expectedText: string, timeout: number = TimeoutConstants.TS_COMMON_DASHBOARD_WAIT_TIMEOUT): Promise<void> {
|
|
26
|
+
Logger.debug(`text: "${expectedText}"`);
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
const pageTitleLocator: By = By.xpath(`//h1[contains(text(), '${expectedText}')]`);
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
await this.driverHelper.waitVisibility(pageTitleLocator, timeout);
|
|
31
|
+
}
|
|
32
32
|
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
async waitPage(timeout: number = TimeoutConstants.TS_SELENIUM_LOAD_PAGE_TIMEOUT): Promise<void> {
|
|
34
|
+
Logger.debug();
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
await this.waitTitleContains('Create Workspace', timeout);
|
|
37
|
+
}
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
|
|
39
|
+
async clickOnSampleNoEditorSelection(sampleName: string, timeout: number = TimeoutConstants.TS_CLICK_DASHBOARD_ITEM_TIMEOUT): Promise<void> {
|
|
40
|
+
Logger.debug(`sampleName: "${sampleName}"`);
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
const sampleLocator: By = this.getSampleLocator(sampleName);
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
await this.driverHelper.waitAndClick(sampleLocator, timeout);
|
|
45
|
+
}
|
|
46
46
|
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
async clickOnSampleForSpecificEditor(sampleName: string, timeout: number = TimeoutConstants.TS_CLICK_DASHBOARD_ITEM_TIMEOUT): Promise<void> {
|
|
48
|
+
await this.clickOnEditorsDropdownListButton(sampleName, timeout);
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
Logger.debug(`sampleName: "${sampleName}"`);
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
const sampleLocator: By = this.getSampleLocatorWithSpecificEditor(sampleName);
|
|
53
|
+
await this.driverHelper.waitAndClick(sampleLocator, timeout);
|
|
54
|
+
}
|
|
55
55
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
56
|
+
async importFromGitUsingUI(factoryUrl: string, timeout: number = TimeoutConstants.TS_CLICK_DASHBOARD_ITEM_TIMEOUT): Promise<void> {
|
|
57
|
+
Logger.debug(`factoryUrl: "${factoryUrl}"`);
|
|
58
|
+
await this.driverHelper.waitVisibility(CreateWorkspace.FACTORY_URL_LOCATOR, timeout);
|
|
59
|
+
await this.driverHelper.type(CreateWorkspace.FACTORY_URL_LOCATOR, Key.chord(factoryUrl, Key.ENTER), timeout);
|
|
60
|
+
}
|
|
61
61
|
|
|
62
|
-
|
|
63
|
-
|
|
62
|
+
private async clickOnEditorsDropdownListButton(sampleName: string, timeout: number): Promise<void> {
|
|
63
|
+
Logger.debug(`sampleName: "${sampleName}, editor ${BaseTestConstants.TS_SELENIUM_EDITOR}"`);
|
|
64
64
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
65
|
+
const editorDropdownListLocator: By = this.getEditorsDropdownListLocator(sampleName);
|
|
66
|
+
await this.driverHelper.waitAndClick(editorDropdownListLocator, timeout);
|
|
67
|
+
}
|
|
68
68
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
69
|
+
private getEditorsDropdownListLocator(sampleName: string): By {
|
|
70
|
+
return By.xpath(`//div[text()=\'${sampleName}\']//parent::article//button`);
|
|
71
|
+
}
|
|
72
72
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
73
|
+
private getSampleLocatorWithSpecificEditor(sampleName: string): By {
|
|
74
|
+
let editor: string = '';
|
|
75
|
+
switch (process.env.TS_SELENIUM_EDITOR) {
|
|
76
|
+
case 'che-code':
|
|
77
|
+
editor = 'code';
|
|
78
|
+
break;
|
|
79
|
+
default:
|
|
80
|
+
throw new Error(`Unsupported editor ${process.env.TS_SELENIUM_EDITOR}`);
|
|
81
|
+
}
|
|
82
82
|
|
|
83
|
-
|
|
83
|
+
Logger.trace(`sampleName: ${sampleName}, editor "${editor}"`);
|
|
84
84
|
|
|
85
|
-
|
|
85
|
+
return By.xpath(`//div[text()='${sampleName}']//parent::article//span[text()[
|
|
86
86
|
contains(
|
|
87
87
|
translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'),
|
|
88
88
|
'${editor}')]
|
|
89
89
|
]//parent::a`);
|
|
90
|
-
|
|
90
|
+
}
|
|
91
91
|
|
|
92
|
-
|
|
93
|
-
|
|
92
|
+
private getSampleLocator(sampleName: string): By {
|
|
93
|
+
Logger.trace(`sampleName: ${sampleName}, used default editor`);
|
|
94
94
|
|
|
95
|
-
|
|
96
|
-
|
|
95
|
+
return By.xpath(`//article[contains(@class, 'sample-card')]//div[text()='${sampleName}']`);
|
|
96
|
+
}
|
|
97
97
|
}
|
|
@@ -19,100 +19,100 @@ import { BaseTestConstants } from '../../constants/BaseTestConstants';
|
|
|
19
19
|
|
|
20
20
|
@injectable()
|
|
21
21
|
export class Dashboard {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
22
|
+
private static readonly WORKSPACES_BUTTON: By = By.xpath(`//div[@id='page-sidebar']//a[contains(text(), 'Workspaces (')]`);
|
|
23
|
+
private static readonly CREATE_WORKSPACE_BUTTON: By = By.xpath(`//div[@id='page-sidebar']//a[text()='Create Workspace']`);
|
|
24
|
+
private static readonly LOADER_PAGE_STEP_TITLES: By = By.xpath('//*[@data-testid="step-title"]');
|
|
25
|
+
private static readonly STARTING_PAGE_LOADER: By = By.css('.main-page-loader');
|
|
26
|
+
private static readonly LOADER_ALERT: By = By.xpath('//*[@data-testid="loader-alert"]');
|
|
27
|
+
private static readonly LOGOUT_BUTTON: By = By.xpath('//button[text()="Logout"]');
|
|
28
|
+
private static readonly USER_SETTINGS_DROPDOWN: By = By.xpath('//header//button/span[text()!=\'\']//parent::button');
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
constructor(@inject(CLASSES.DriverHelper) private readonly driverHelper: DriverHelper,
|
|
31
|
+
@inject(CLASSES.Workspaces) private readonly workspaces: Workspaces) {
|
|
32
|
+
}
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
async stopWorkspaceByUI(workspaceName: string): Promise<void> {
|
|
35
|
+
Logger.debug(`"${workspaceName}"`);
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
37
|
+
await this.clickWorkspacesButton();
|
|
38
|
+
await this.workspaces.waitPage();
|
|
39
|
+
await this.workspaces.waitWorkspaceListItem(workspaceName);
|
|
40
|
+
await this.workspaces.waitWorkspaceWithRunningStatus(workspaceName);
|
|
41
41
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
42
|
+
await this.workspaces.stopWorkspaceByActionsButton(workspaceName);
|
|
43
|
+
await this.workspaces.waitWorkspaceWithStoppedStatus(workspaceName);
|
|
44
|
+
}
|
|
45
45
|
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
async deleteStoppedWorkspaceByUI(workspaceName: string): Promise<void> {
|
|
47
|
+
Logger.debug(`"${workspaceName}"`);
|
|
48
48
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
49
|
+
await this.clickWorkspacesButton();
|
|
50
|
+
await this.workspaces.waitPage();
|
|
51
|
+
await this.workspaces.waitWorkspaceListItem(workspaceName);
|
|
52
|
+
await this.workspaces.deleteWorkspaceByActionsButton(workspaceName);
|
|
53
|
+
await this.workspaces.waitPage();
|
|
54
|
+
await this.workspaces.waitWorkspaceListItemAbsence(workspaceName);
|
|
55
|
+
}
|
|
56
56
|
|
|
57
|
-
|
|
58
|
-
|
|
57
|
+
async stopAndRemoveWorkspaceByUI(workspaceName: string): Promise<void> {
|
|
58
|
+
Logger.debug(`"${workspaceName}"`);
|
|
59
59
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
60
|
+
await this.stopWorkspaceByUI(workspaceName);
|
|
61
|
+
await this.workspaces.deleteWorkspaceByActionsButton(workspaceName);
|
|
62
|
+
await this.workspaces.waitWorkspaceListItemAbsence(workspaceName);
|
|
63
|
+
}
|
|
64
64
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
65
|
+
async openDashboard(): Promise<void> {
|
|
66
|
+
Logger.debug();
|
|
67
|
+
await this.driverHelper.getDriver().navigate().to(BaseTestConstants.TS_SELENIUM_BASE_URL);
|
|
68
|
+
await this.waitPage();
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
}
|
|
71
71
|
|
|
72
|
-
|
|
73
|
-
|
|
72
|
+
async waitPage(timeout: number = TimeoutConstants.TS_SELENIUM_LOAD_PAGE_TIMEOUT): Promise<void> {
|
|
73
|
+
Logger.debug();
|
|
74
74
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
75
|
+
await this.driverHelper.waitVisibility(Dashboard.WORKSPACES_BUTTON, timeout);
|
|
76
|
+
await this.driverHelper.waitVisibility(Dashboard.CREATE_WORKSPACE_BUTTON, timeout);
|
|
77
|
+
}
|
|
78
78
|
|
|
79
|
-
|
|
80
|
-
|
|
79
|
+
async clickWorkspacesButton(timeout: number = TimeoutConstants.TS_CLICK_DASHBOARD_ITEM_TIMEOUT): Promise<void> {
|
|
80
|
+
Logger.debug();
|
|
81
81
|
|
|
82
|
-
|
|
83
|
-
|
|
82
|
+
await this.driverHelper.waitAndClick(Dashboard.WORKSPACES_BUTTON, timeout);
|
|
83
|
+
}
|
|
84
84
|
|
|
85
|
-
|
|
86
|
-
|
|
85
|
+
async clickCreateWorkspaceButton(timeout: number = TimeoutConstants.TS_CLICK_DASHBOARD_ITEM_TIMEOUT): Promise<void> {
|
|
86
|
+
Logger.debug();
|
|
87
87
|
|
|
88
|
-
|
|
89
|
-
|
|
88
|
+
await this.driverHelper.waitAndClick(Dashboard.CREATE_WORKSPACE_BUTTON, timeout);
|
|
89
|
+
}
|
|
90
90
|
|
|
91
|
-
|
|
92
|
-
|
|
91
|
+
async getLoaderAlert(timeout: number = TimeoutConstants.TS_WAIT_LOADER_PRESENCE_TIMEOUT): Promise<string> {
|
|
92
|
+
Logger.debug();
|
|
93
93
|
|
|
94
|
-
|
|
95
|
-
|
|
94
|
+
return await this.driverHelper.waitAndGetText(Dashboard.LOADER_ALERT, timeout);
|
|
95
|
+
}
|
|
96
96
|
|
|
97
|
-
|
|
98
|
-
|
|
97
|
+
async waitLoader(timeout: number = TimeoutConstants.TS_WAIT_LOADER_PRESENCE_TIMEOUT): Promise<void> {
|
|
98
|
+
Logger.debug();
|
|
99
99
|
|
|
100
|
-
|
|
101
|
-
|
|
100
|
+
await this.driverHelper.waitAllPresence(Dashboard.LOADER_PAGE_STEP_TITLES, timeout);
|
|
101
|
+
}
|
|
102
102
|
|
|
103
|
-
|
|
104
|
-
|
|
103
|
+
async waitStartingPageLoaderDisappearance(timeout: number = TimeoutConstants.TS_COMMON_DASHBOARD_WAIT_TIMEOUT): Promise<void> {
|
|
104
|
+
Logger.debug();
|
|
105
105
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
106
|
+
await this.driverHelper.waitDisappearance(Dashboard.STARTING_PAGE_LOADER, timeout);
|
|
107
|
+
await this.driverHelper.wait(TimeoutConstants.TS_SELENIUM_DEFAULT_POLLING);
|
|
108
|
+
}
|
|
109
109
|
|
|
110
|
-
|
|
111
|
-
|
|
110
|
+
async logout(timeout: number = TimeoutConstants.TS_COMMON_DASHBOARD_WAIT_TIMEOUT): Promise<void> {
|
|
111
|
+
Logger.debug();
|
|
112
112
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
113
|
+
await this.openDashboard();
|
|
114
|
+
await this.driverHelper.waitAndClick(Dashboard.USER_SETTINGS_DROPDOWN, timeout);
|
|
115
|
+
await this.driverHelper.waitAndClick(Dashboard.LOGOUT_BUTTON, timeout);
|
|
116
|
+
await this.driverHelper.waitDisappearance(Dashboard.USER_SETTINGS_DROPDOWN, timeout);
|
|
117
|
+
}
|
|
118
118
|
}
|