@eclipse-che/che-e2e 7.74.0-dev-1d09cb7 → 7.74.0-dev-aace77a

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.
Files changed (229) hide show
  1. package/.eslintignore +10 -0
  2. package/.eslintrc.js +197 -0
  3. package/.prettierignore +10 -0
  4. package/.prettierrc.json +10 -0
  5. package/CODE_STYLE.md +144 -0
  6. package/README.md +47 -47
  7. package/configs/inversify.config.ts +39 -14
  8. package/configs/inversify.types.ts +44 -30
  9. package/configs/mocharc.ts +21 -24
  10. package/constants/API_TEST_CONSTANTS.ts +67 -0
  11. package/constants/BASE_TEST_CONSTANTS.ts +80 -0
  12. package/constants/CHROME_DRIVER_CONSTANTS.ts +42 -0
  13. package/constants/FACTORY_TEST_CONSTANTS.ts +61 -0
  14. package/constants/MONACO_CONSTANTS.ts +25 -0
  15. package/constants/OAUTH_CONSTANTS.ts +67 -0
  16. package/constants/PLUGIN_TEST_CONSTANTS.ts +15 -0
  17. package/constants/REPORTER_CONSTANTS.ts +53 -0
  18. package/constants/TIMEOUT_CONSTANTS.ts +131 -0
  19. package/dist/configs/inversify.config.js +36 -9
  20. package/dist/configs/inversify.config.js.map +1 -1
  21. package/dist/configs/inversify.types.js +19 -5
  22. package/dist/configs/inversify.types.js.map +1 -1
  23. package/dist/configs/mocharc.js +13 -16
  24. package/dist/configs/mocharc.js.map +1 -1
  25. package/dist/constants/{APITestConstants.js → API_TEST_CONSTANTS.js} +12 -12
  26. package/dist/constants/API_TEST_CONSTANTS.js.map +1 -0
  27. package/dist/constants/{BaseTestConstants.js → BASE_TEST_CONSTANTS.js} +16 -16
  28. package/dist/constants/BASE_TEST_CONSTANTS.js.map +1 -0
  29. package/dist/constants/CHROME_DRIVER_CONSTANTS.js +36 -0
  30. package/dist/constants/CHROME_DRIVER_CONSTANTS.js.map +1 -0
  31. package/dist/constants/{FactoryTestConstants.js → FACTORY_TEST_CONSTANTS.js} +14 -13
  32. package/dist/constants/FACTORY_TEST_CONSTANTS.js.map +1 -0
  33. package/dist/constants/{MonacoConstants.js → MONACO_CONSTANTS.js} +7 -7
  34. package/dist/constants/MONACO_CONSTANTS.js.map +1 -0
  35. package/dist/constants/{OAuthConstants.js → OAUTH_CONSTANTS.js} +14 -14
  36. package/dist/constants/OAUTH_CONSTANTS.js.map +1 -0
  37. package/dist/constants/{PluginsTestConstants.js → PLUGIN_TEST_CONSTANTS.js} +7 -7
  38. package/dist/constants/PLUGIN_TEST_CONSTANTS.js.map +1 -0
  39. package/dist/constants/{ReporterConstants.js → REPORTER_CONSTANTS.js} +12 -12
  40. package/dist/constants/REPORTER_CONSTANTS.js.map +1 -0
  41. package/dist/constants/{TimeoutConstants.js → TIMEOUT_CONSTANTS.js} +24 -24
  42. package/dist/constants/TIMEOUT_CONSTANTS.js.map +1 -0
  43. package/dist/driver/ChromeDriver.js +12 -22
  44. package/dist/driver/ChromeDriver.js.map +1 -1
  45. package/dist/index.js +18 -12
  46. package/dist/index.js.map +1 -1
  47. package/dist/pageobjects/dashboard/CreateWorkspace.js +15 -15
  48. package/dist/pageobjects/dashboard/CreateWorkspace.js.map +1 -1
  49. package/dist/pageobjects/dashboard/Dashboard.js +20 -21
  50. package/dist/pageobjects/dashboard/Dashboard.js.map +1 -1
  51. package/dist/pageobjects/dashboard/Workspaces.js +55 -60
  52. package/dist/pageobjects/dashboard/Workspaces.js.map +1 -1
  53. package/dist/pageobjects/dashboard/workspace-details/WorkspaceDetails.js +58 -48
  54. package/dist/pageobjects/dashboard/workspace-details/WorkspaceDetails.js.map +1 -1
  55. package/dist/pageobjects/git-providers/OauthPage.js +22 -20
  56. package/dist/pageobjects/git-providers/OauthPage.js.map +1 -1
  57. package/dist/pageobjects/ide/CheCodeLocatorLoader.js +26 -12
  58. package/dist/pageobjects/ide/CheCodeLocatorLoader.js.map +1 -1
  59. package/dist/pageobjects/login/interfaces/ICheLoginPage.js +2 -2
  60. package/dist/pageobjects/login/interfaces/IOcpLoginPage.js +2 -2
  61. package/dist/pageobjects/login/kubernetes/DexLoginPage.js +14 -14
  62. package/dist/pageobjects/login/kubernetes/DexLoginPage.js.map +1 -1
  63. package/dist/pageobjects/login/kubernetes/KubernetesLoginPage.js +7 -7
  64. package/dist/pageobjects/login/kubernetes/KubernetesLoginPage.js.map +1 -1
  65. package/dist/pageobjects/login/openshift/OcpLoginPage.js +24 -28
  66. package/dist/pageobjects/login/openshift/OcpLoginPage.js.map +1 -1
  67. package/dist/pageobjects/login/openshift/OcpRedHatLoginPage.js +13 -16
  68. package/dist/pageobjects/login/openshift/OcpRedHatLoginPage.js.map +1 -1
  69. package/dist/pageobjects/login/openshift/OcpUserLoginPage.js +9 -9
  70. package/dist/pageobjects/login/openshift/OcpUserLoginPage.js.map +1 -1
  71. package/dist/pageobjects/login/openshift/RedHatLoginPage.js +19 -23
  72. package/dist/pageobjects/login/openshift/RedHatLoginPage.js.map +1 -1
  73. package/dist/pageobjects/login/openshift/RegularUserOcpCheLoginPage.js +20 -19
  74. package/dist/pageobjects/login/openshift/RegularUserOcpCheLoginPage.js.map +1 -1
  75. package/dist/pageobjects/openshift/OcpApplicationPage.js +11 -11
  76. package/dist/pageobjects/openshift/OcpApplicationPage.js.map +1 -1
  77. package/dist/pageobjects/openshift/OcpImportFromGitPage.js +24 -24
  78. package/dist/pageobjects/openshift/OcpImportFromGitPage.js.map +1 -1
  79. package/dist/pageobjects/openshift/OcpMainPage.js +30 -30
  80. package/dist/pageobjects/openshift/OcpMainPage.js.map +1 -1
  81. package/dist/specs/MochaHooks.js +33 -27
  82. package/dist/specs/MochaHooks.js.map +1 -1
  83. package/dist/specs/SmokeTest.spec.js +17 -17
  84. package/dist/specs/SmokeTest.spec.js.map +1 -1
  85. package/dist/specs/api/ContainerOverridesAPI.spec.js +8 -6
  86. package/dist/specs/api/ContainerOverridesAPI.spec.js.map +1 -1
  87. package/dist/specs/api/DevfileAcceptanceTestAPI.spec.js +27 -24
  88. package/dist/specs/api/DevfileAcceptanceTestAPI.spec.js.map +1 -1
  89. package/dist/specs/api/EmptyWorkspaceAPI.spec.js +17 -17
  90. package/dist/specs/api/EmptyWorkspaceAPI.spec.js.map +1 -1
  91. package/dist/specs/api/PodOverridesAPI.spec.js +10 -8
  92. package/dist/specs/api/PodOverridesAPI.spec.js.map +1 -1
  93. package/dist/specs/dashboard-samples/EmptyWorkspace.spec.js +10 -10
  94. package/dist/specs/dashboard-samples/EmptyWorkspace.spec.js.map +1 -1
  95. package/dist/specs/dashboard-samples/Quarkus.spec.js +13 -13
  96. package/dist/specs/dashboard-samples/Quarkus.spec.js.map +1 -1
  97. package/dist/specs/dashboard-samples/RecommendedExtensions.spec.js +52 -52
  98. package/dist/specs/dashboard-samples/RecommendedExtensions.spec.js.map +1 -1
  99. package/dist/specs/devconsole-intergration/DevConsoleIntegration.spec.js +23 -19
  100. package/dist/specs/devconsole-intergration/DevConsoleIntegration.spec.js.map +1 -1
  101. package/dist/specs/factory/Factory.spec.js +38 -41
  102. package/dist/specs/factory/Factory.spec.js.map +1 -1
  103. package/dist/specs/factory/NoSetupRepoFactory.spec.js +52 -50
  104. package/dist/specs/factory/NoSetupRepoFactory.spec.js.map +1 -1
  105. package/dist/specs/factory/RefusedOAuthFactory.spec.js +49 -51
  106. package/dist/specs/factory/RefusedOAuthFactory.spec.js.map +1 -1
  107. package/dist/specs/miscellaneous/PredefinedNamespace.spec.js +45 -42
  108. package/dist/specs/miscellaneous/PredefinedNamespace.spec.js.map +1 -1
  109. package/dist/tests-library/LoginTests.js +13 -13
  110. package/dist/tests-library/LoginTests.js.map +1 -1
  111. package/dist/tests-library/ProjectAndFileTests.js +9 -7
  112. package/dist/tests-library/ProjectAndFileTests.js.map +1 -1
  113. package/dist/tests-library/WorkspaceHandlingTests.js +22 -19
  114. package/dist/tests-library/WorkspaceHandlingTests.js.map +1 -1
  115. package/dist/utils/BrowserTabsUtil.js +21 -21
  116. package/dist/utils/BrowserTabsUtil.js.map +1 -1
  117. package/dist/utils/CheReporter.js +91 -65
  118. package/dist/utils/CheReporter.js.map +1 -1
  119. package/dist/utils/DevWorkspaceConfigurationHelper.js +34 -15
  120. package/dist/utils/DevWorkspaceConfigurationHelper.js.map +1 -1
  121. package/dist/utils/DevfilesRegistryHelper.js +34 -18
  122. package/dist/utils/DevfilesRegistryHelper.js.map +1 -1
  123. package/dist/utils/DriverHelper.js +73 -68
  124. package/dist/utils/DriverHelper.js.map +1 -1
  125. package/dist/utils/IContextParams.js +12 -0
  126. package/dist/utils/IContextParams.js.map +1 -0
  127. package/dist/utils/IKubernetesCommandLineToolsExecutor.js +3 -0
  128. package/dist/utils/IKubernetesCommandLineToolsExecutor.js.map +1 -0
  129. package/dist/utils/KubernetesCommandLineToolsExecutor.js +146 -107
  130. package/dist/utils/KubernetesCommandLineToolsExecutor.js.map +1 -1
  131. package/dist/utils/Logger.js +18 -19
  132. package/dist/utils/Logger.js.map +1 -1
  133. package/dist/utils/ScreenCatcher.js +26 -16
  134. package/dist/utils/ScreenCatcher.js.map +1 -1
  135. package/dist/utils/ShellExecutor.js +29 -9
  136. package/dist/utils/ShellExecutor.js.map +1 -1
  137. package/dist/utils/StringUtil.js +19 -9
  138. package/dist/utils/StringUtil.js.map +1 -1
  139. package/dist/utils/request-handlers/CheApiRequestHandler.js +29 -29
  140. package/dist/utils/request-handlers/CheApiRequestHandler.js.map +1 -1
  141. package/dist/utils/request-handlers/headers/CheMultiuserAuthorizationHeaderHandler.js +12 -8
  142. package/dist/utils/request-handlers/headers/CheMultiuserAuthorizationHeaderHandler.js.map +1 -1
  143. package/dist/utils/request-handlers/headers/IAuthorizationHeaderHandler.js +2 -2
  144. package/dist/utils/workspace/ApiUrlResolver.js +5 -5
  145. package/dist/utils/workspace/ApiUrlResolver.js.map +1 -1
  146. package/dist/utils/workspace/ITestWorkspaceUtil.js +2 -2
  147. package/dist/utils/workspace/TestWorkspaceUtil.js +25 -23
  148. package/dist/utils/workspace/TestWorkspaceUtil.js.map +1 -1
  149. package/dist/utils/workspace/WorkspaceStatus.js +2 -2
  150. package/dist/utils/workspace/WorkspaceStatus.js.map +1 -1
  151. package/driver/ChromeDriver.ts +45 -58
  152. package/driver/IDriver.ts +3 -3
  153. package/index.ts +11 -9
  154. package/package.json +59 -49
  155. package/pageobjects/dashboard/CreateWorkspace.ts +65 -55
  156. package/pageobjects/dashboard/Dashboard.ts +100 -100
  157. package/pageobjects/dashboard/Workspaces.ts +210 -186
  158. package/pageobjects/dashboard/workspace-details/WorkspaceDetails.ts +153 -131
  159. package/pageobjects/git-providers/OauthPage.ts +177 -166
  160. package/pageobjects/ide/CheCodeLocatorLoader.ts +51 -46
  161. package/pageobjects/login/interfaces/ICheLoginPage.ts +3 -3
  162. package/pageobjects/login/interfaces/IOcpLoginPage.ts +3 -3
  163. package/pageobjects/login/kubernetes/DexLoginPage.ts +31 -30
  164. package/pageobjects/login/kubernetes/KubernetesLoginPage.ts +15 -14
  165. package/pageobjects/login/openshift/OcpLoginPage.ts +51 -56
  166. package/pageobjects/login/openshift/OcpRedHatLoginPage.ts +27 -27
  167. package/pageobjects/login/openshift/OcpUserLoginPage.ts +15 -18
  168. package/pageobjects/login/openshift/RedHatLoginPage.ts +49 -46
  169. package/pageobjects/login/openshift/RegularUserOcpCheLoginPage.ts +43 -34
  170. package/pageobjects/openshift/OcpApplicationPage.ts +21 -19
  171. package/pageobjects/openshift/OcpImportFromGitPage.ts +68 -68
  172. package/pageobjects/openshift/OcpMainPage.ts +69 -69
  173. package/specs/MochaHooks.ts +59 -52
  174. package/specs/SmokeTest.spec.ts +47 -45
  175. package/specs/api/ContainerOverridesAPI.spec.ts +39 -26
  176. package/specs/api/DevfileAcceptanceTestAPI.spec.ts +110 -97
  177. package/specs/api/EmptyWorkspaceAPI.spec.ts +67 -58
  178. package/specs/api/PodOverridesAPI.spec.ts +48 -34
  179. package/specs/dashboard-samples/EmptyWorkspace.spec.ts +36 -36
  180. package/specs/dashboard-samples/Quarkus.spec.ts +41 -40
  181. package/specs/dashboard-samples/RecommendedExtensions.spec.ts +202 -183
  182. package/specs/devconsole-intergration/DevConsoleIntegration.spec.ts +85 -75
  183. package/specs/factory/Factory.spec.ts +184 -178
  184. package/specs/factory/NoSetupRepoFactory.spec.ts +233 -219
  185. package/specs/factory/RefusedOAuthFactory.spec.ts +223 -211
  186. package/specs/miscellaneous/PredefinedNamespace.spec.ts +70 -64
  187. package/tests-library/LoginTests.ts +34 -32
  188. package/tests-library/ProjectAndFileTests.ts +21 -18
  189. package/tests-library/WorkspaceHandlingTests.ts +98 -89
  190. package/tsconfig.json +15 -15
  191. package/utils/BrowserTabsUtil.ts +78 -74
  192. package/utils/CheReporter.ts +159 -157
  193. package/utils/DevWorkspaceConfigurationHelper.ts +63 -69
  194. package/utils/DevfilesRegistryHelper.ts +71 -57
  195. package/utils/DriverHelper.ts +728 -700
  196. package/utils/IContextParams.ts +26 -0
  197. package/utils/IKubernetesCommandLineToolsExecutor.ts +42 -0
  198. package/utils/KubernetesCommandLineToolsExecutor.ts +231 -183
  199. package/utils/Logger.ts +102 -125
  200. package/utils/ScreenCatcher.ts +57 -46
  201. package/utils/ShellExecutor.ts +23 -12
  202. package/utils/StringUtil.ts +49 -36
  203. package/utils/request-handlers/CheApiRequestHandler.ts +91 -88
  204. package/utils/request-handlers/headers/CheMultiuserAuthorizationHeaderHandler.ts +32 -21
  205. package/utils/request-handlers/headers/IAuthorizationHeaderHandler.ts +3 -3
  206. package/utils/workspace/ApiUrlResolver.ts +31 -26
  207. package/utils/workspace/ITestWorkspaceUtil.ts +31 -31
  208. package/utils/workspace/TestWorkspaceUtil.ts +152 -145
  209. package/utils/workspace/WorkspaceStatus.ts +5 -5
  210. package/constants/APITestConstants.ts +0 -57
  211. package/constants/BaseTestConstants.ts +0 -68
  212. package/constants/ChromeDriverConstants.ts +0 -46
  213. package/constants/FactoryTestConstants.ts +0 -51
  214. package/constants/MonacoConstants.ts +0 -22
  215. package/constants/OAuthConstants.ts +0 -57
  216. package/constants/PluginsTestConstants.ts +0 -15
  217. package/constants/ReporterConstants.ts +0 -45
  218. package/constants/TimeoutConstants.ts +0 -113
  219. package/dist/constants/APITestConstants.js.map +0 -1
  220. package/dist/constants/BaseTestConstants.js.map +0 -1
  221. package/dist/constants/ChromeDriverConstants.js +0 -44
  222. package/dist/constants/ChromeDriverConstants.js.map +0 -1
  223. package/dist/constants/FactoryTestConstants.js.map +0 -1
  224. package/dist/constants/MonacoConstants.js.map +0 -1
  225. package/dist/constants/OAuthConstants.js.map +0 -1
  226. package/dist/constants/PluginsTestConstants.js.map +0 -1
  227. package/dist/constants/ReporterConstants.js.map +0 -1
  228. package/dist/constants/TimeoutConstants.js.map +0 -1
  229. package/tslint.json +0 -126
@@ -1,5 +1,5 @@
1
- /*********************************************************************
2
- * Copyright (c) 2019-2023 Red Hat, Inc.
1
+ /** *******************************************************************
2
+ * copyright (c) 2019-2023 Red Hat, Inc.
3
3
  *
4
4
  * This program and the accompanying materials are made
5
5
  * available under the terms of the Eclipse Public License 2.0
@@ -14,40 +14,42 @@ import { BrowserTabsUtil } from '../utils/BrowserTabsUtil';
14
14
  import { inject, injectable } from 'inversify';
15
15
  import { Dashboard } from '../pageobjects/dashboard/Dashboard';
16
16
  import { IOcpLoginPage } from '../pageobjects/login/interfaces/IOcpLoginPage';
17
- import { BaseTestConstants } from '../constants/BaseTestConstants';
17
+ import { BASE_TEST_CONSTANTS } from '../constants/BASE_TEST_CONSTANTS';
18
18
 
19
19
  @injectable()
20
20
  export class LoginTests {
21
- constructor(
22
- @inject(CLASSES.BrowserTabsUtil) private readonly browserTabsUtil: BrowserTabsUtil,
23
- @inject(TYPES.CheLogin) private readonly productLoginPage: ICheLoginPage,
24
- @inject(TYPES.OcpLogin) private readonly ocpLoginPage: IOcpLoginPage,
25
- @inject(CLASSES.Dashboard) private readonly dashboard: Dashboard) {
26
- }
21
+ constructor(
22
+ @inject(CLASSES.BrowserTabsUtil)
23
+ private readonly browserTabsUtil: BrowserTabsUtil,
24
+ @inject(TYPES.CheLogin)
25
+ private readonly productLoginPage: ICheLoginPage,
26
+ @inject(TYPES.OcpLogin) private readonly ocpLoginPage: IOcpLoginPage,
27
+ @inject(CLASSES.Dashboard) private readonly dashboard: Dashboard
28
+ ) {}
27
29
 
28
- loginIntoChe(): void {
29
- test('Login', async () => {
30
- if (!(await this.browserTabsUtil.getCurrentUrl()).includes(BaseTestConstants.TS_SELENIUM_BASE_URL)) {
31
- await this.browserTabsUtil.navigateTo(BaseTestConstants.TS_SELENIUM_BASE_URL);
32
- }
33
- await this.productLoginPage.login();
34
- await this.browserTabsUtil.maximize();
35
- await this.dashboard.waitStartingPageLoaderDisappearance();
36
- });
37
- }
30
+ loginIntoChe(userName?: string, password?: string): void {
31
+ test('Login', async (): Promise<void> => {
32
+ if (!(await this.browserTabsUtil.getCurrentUrl()).includes(BASE_TEST_CONSTANTS.TS_SELENIUM_BASE_URL)) {
33
+ await this.browserTabsUtil.navigateTo(BASE_TEST_CONSTANTS.TS_SELENIUM_BASE_URL);
34
+ }
35
+ await this.productLoginPage.login(userName, password);
36
+ await this.browserTabsUtil.maximize();
37
+ await this.dashboard.waitStartingPageLoaderDisappearance();
38
+ });
39
+ }
38
40
 
39
- loginIntoOcpConsole(): void {
40
- test('Login into ocp console', async () => {
41
- const openshiftConsoleUrl: string = BaseTestConstants.TS_SELENIUM_BASE_URL.replace('devspaces', 'console-openshift-console');
42
- await this.browserTabsUtil.navigateTo(openshiftConsoleUrl);
43
- await this.ocpLoginPage.login();
44
- await this.browserTabsUtil.maximize();
45
- });
46
- }
41
+ loginIntoOcpConsole(): void {
42
+ test('Login into ocp console', async (): Promise<void> => {
43
+ const openshiftConsoleUrl: string = BASE_TEST_CONSTANTS.TS_SELENIUM_BASE_URL.replace('devspaces', 'console-openshift-console');
44
+ await this.browserTabsUtil.navigateTo(openshiftConsoleUrl);
45
+ await this.ocpLoginPage.login();
46
+ await this.browserTabsUtil.maximize();
47
+ });
48
+ }
47
49
 
48
- logoutFromChe(): void {
49
- test('Logout', async () => {
50
- await this.dashboard.logout();
51
- });
52
- }
50
+ logoutFromChe(): void {
51
+ test('Logout', async (): Promise<void> => {
52
+ await this.dashboard.logout();
53
+ });
54
+ }
53
55
  }
@@ -1,5 +1,5 @@
1
- /*********************************************************************
2
- * Copyright (c) 2019-2023 Red Hat, Inc.
1
+ /** *******************************************************************
2
+ * copyright (c) 2019-2023 Red Hat, Inc.
3
3
  *
4
4
  * This program and the accompanying materials are made
5
5
  * available under the terms of the Eclipse Public License 2.0
@@ -14,24 +14,27 @@ import { By, until } from 'selenium-webdriver';
14
14
  import { DriverHelper } from '../utils/DriverHelper';
15
15
  import { CLASSES } from '../configs/inversify.types';
16
16
  import { Logger } from '../utils/Logger';
17
- import { TimeoutConstants } from '../constants/TimeoutConstants';
17
+ import { TIMEOUT_CONSTANTS } from '../constants/TIMEOUT_CONSTANTS';
18
18
 
19
19
  @injectable()
20
20
  export class ProjectAndFileTests {
21
+ constructor(
22
+ @inject(CLASSES.DriverHelper)
23
+ private readonly driverHelper: DriverHelper
24
+ ) {}
21
25
 
22
- constructor(
23
- @inject(CLASSES.DriverHelper) private readonly driverHelper: DriverHelper) {}
24
-
25
- async waitWorkspaceReadinessForCheCodeEditor(): Promise<void> {
26
- Logger.debug(`waiting for editor.`);
27
- try {
28
- const start: number = new Date().getTime();
29
- await this.driverHelper.getDriver().wait(until.elementLocated(By.className('monaco-workbench')), TimeoutConstants.TS_SELENIUM_START_WORKSPACE_TIMEOUT);
30
- const end: number = new Date().getTime();
31
- Logger.debug(`editor was opened in ${end - start} seconds.`);
32
- } catch (err) {
33
- Logger.error(`waiting for workspace readiness failed: ${err}`);
34
- throw err;
35
- }
36
- }
26
+ async waitWorkspaceReadinessForCheCodeEditor(): Promise<void> {
27
+ Logger.debug('waiting for editor.');
28
+ try {
29
+ const start: number = new Date().getTime();
30
+ await this.driverHelper
31
+ .getDriver()
32
+ .wait(until.elementLocated(By.className('monaco-workbench')), TIMEOUT_CONSTANTS.TS_SELENIUM_START_WORKSPACE_TIMEOUT);
33
+ const end: number = new Date().getTime();
34
+ Logger.debug(`editor was opened in ${end - start} seconds.`);
35
+ } catch (err) {
36
+ Logger.error(`waiting for workspace readiness failed: ${err}`);
37
+ throw err;
38
+ }
39
+ }
37
40
  }
@@ -1,5 +1,5 @@
1
- /*********************************************************************
2
- * Copyright (c) 2019-2023 Red Hat, Inc.
1
+ /** *******************************************************************
2
+ * copyright (c) 2019-2023 Red Hat, Inc.
3
3
  *
4
4
  * This program and the accompanying materials are made
5
5
  * available under the terms of the Eclipse Public License 2.0
@@ -16,107 +16,116 @@ import { CreateWorkspace } from '../pageobjects/dashboard/CreateWorkspace';
16
16
  import { BrowserTabsUtil } from '../utils/BrowserTabsUtil';
17
17
  import { Logger } from '../utils/Logger';
18
18
  import { ApiUrlResolver } from '../utils/workspace/ApiUrlResolver';
19
- import { TimeoutConstants } from '../constants/TimeoutConstants';
19
+ import { TIMEOUT_CONSTANTS } from '../constants/TIMEOUT_CONSTANTS';
20
20
  import { DriverHelper } from '../utils/DriverHelper';
21
21
  import { By, error } from 'selenium-webdriver';
22
22
 
23
23
  @injectable()
24
24
  export class WorkspaceHandlingTests {
25
+ private static WORKSPACE_NAME: By = By.xpath('//h1[contains(.,"Starting workspace ")]');
26
+ private static workspaceName: string = 'undefined';
27
+ private static parentGUID: string;
25
28
 
26
- static getWorkspaceName(): string {
27
- return WorkspaceHandlingTests.workspaceName;
28
- }
29
+ constructor(
30
+ @inject(CLASSES.Dashboard) private readonly dashboard: Dashboard,
31
+ @inject(CLASSES.CreateWorkspace)
32
+ private readonly createWorkspace: CreateWorkspace,
33
+ @inject(CLASSES.BrowserTabsUtil)
34
+ private readonly browserTabsUtil: BrowserTabsUtil,
35
+ @inject(CLASSES.ApiUrlResolver)
36
+ private readonly apiUrlResolver: ApiUrlResolver,
37
+ @inject(CLASSES.DriverHelper)
38
+ private readonly driverHelper: DriverHelper
39
+ ) {}
29
40
 
30
- private static WORKSPACE_NAME_LOCATOR: By = By.xpath(`//h1[contains(.,'Starting workspace ')]`);
31
- private static workspaceName: string = 'undefined';
32
- private static parentGUID: string;
41
+ static getWorkspaceName(): string {
42
+ return WorkspaceHandlingTests.workspaceName;
43
+ }
33
44
 
34
- constructor(
35
- @inject(CLASSES.Dashboard) private readonly dashboard: Dashboard,
36
- @inject(CLASSES.CreateWorkspace) private readonly createWorkspace: CreateWorkspace,
37
- @inject(CLASSES.BrowserTabsUtil) private readonly browserTabsUtil: BrowserTabsUtil,
38
- @inject(CLASSES.ApiUrlResolver) private readonly apiUrlResolver: ApiUrlResolver,
39
- @inject(CLASSES.DriverHelper) private readonly driverHelper: DriverHelper) {}
45
+ setWindowHandle(guid: string): void {
46
+ WorkspaceHandlingTests.parentGUID = guid;
47
+ }
40
48
 
41
- setWindowHandle(guid: string): void {
42
- WorkspaceHandlingTests.parentGUID = guid;
43
- }
49
+ getWindowHandle(): string {
50
+ return WorkspaceHandlingTests.parentGUID;
51
+ }
44
52
 
45
- getWindowHandle(): string {
46
- return WorkspaceHandlingTests.parentGUID;
47
- }
53
+ async createAndOpenWorkspace(stack: string): Promise<void> {
54
+ await this.dashboard.clickWorkspacesButton();
55
+ await this.dashboard.waitPage();
56
+ Logger.debug('fetching user kubernetes namespace, storing auth token by getting workspaces API URL.');
57
+ await this.apiUrlResolver.getWorkspacesApiUrl();
58
+ await this.dashboard.clickCreateWorkspaceButton();
59
+ await this.createWorkspace.waitPage();
60
+ WorkspaceHandlingTests.parentGUID = await this.browserTabsUtil.getCurrentWindowHandle();
61
+ await this.createWorkspace.clickOnSampleNoEditorSelection(stack);
62
+ await this.browserTabsUtil.waitAndSwitchToAnotherWindow(WorkspaceHandlingTests.parentGUID, TIMEOUT_CONSTANTS.TS_IDE_LOAD_TIMEOUT);
63
+ }
48
64
 
49
- async createAndOpenWorkspace(stack: string): Promise<void> {
50
- await this.dashboard.clickWorkspacesButton();
51
- await this.dashboard.waitPage();
52
- Logger.debug(`fetching user kubernetes namespace, storing auth token by getting workspaces API URL.`);
53
- await this.apiUrlResolver.getWorkspacesApiUrl();
54
- await this.dashboard.clickCreateWorkspaceButton();
55
- await this.createWorkspace.waitPage();
56
- WorkspaceHandlingTests.parentGUID = await this.browserTabsUtil.getCurrentWindowHandle();
57
- await this.createWorkspace.clickOnSampleNoEditorSelection(stack);
58
- await this.browserTabsUtil.waitAndSwitchToAnotherWindow(WorkspaceHandlingTests.parentGUID, TimeoutConstants.TS_IDE_LOAD_TIMEOUT);
59
- }
65
+ async createAndOpenWorkspaceFromGitRepository(factoryUrl: string): Promise<void> {
66
+ await this.dashboard.waitPage();
67
+ Logger.debug('fetching user kubernetes namespace, storing auth token by getting workspaces API URL.');
68
+ await this.apiUrlResolver.getWorkspacesApiUrl();
69
+ await this.dashboard.clickCreateWorkspaceButton();
70
+ await this.createWorkspace.waitPage();
71
+ WorkspaceHandlingTests.parentGUID = await this.browserTabsUtil.getCurrentWindowHandle();
72
+ await this.createWorkspace.importFromGitUsingUI(factoryUrl);
73
+ await this.browserTabsUtil.waitAndSwitchToAnotherWindow(WorkspaceHandlingTests.parentGUID, TIMEOUT_CONSTANTS.TS_IDE_LOAD_TIMEOUT);
74
+ }
60
75
 
61
- async createAndOpenWorkspaceFromGitRepository(factoryUrl: string): Promise<void> {
62
- await this.dashboard.waitPage();
63
- Logger.debug(`fetching user kubernetes namespace, storing auth token by getting workspaces API URL.`);
64
- await this.apiUrlResolver.getWorkspacesApiUrl();
65
- await this.dashboard.clickCreateWorkspaceButton();
66
- await this.createWorkspace.waitPage();
67
- WorkspaceHandlingTests.parentGUID = await this.browserTabsUtil.getCurrentWindowHandle();
68
- await this.createWorkspace.importFromGitUsingUI(factoryUrl);
69
- await this.browserTabsUtil.waitAndSwitchToAnotherWindow(WorkspaceHandlingTests.parentGUID, TimeoutConstants.TS_IDE_LOAD_TIMEOUT);
70
- }
76
+ async obtainWorkspaceNameFromStartingPage(): Promise<void> {
77
+ const timeout: number = TIMEOUT_CONSTANTS.TS_IDE_LOAD_TIMEOUT;
78
+ const polling: number = TIMEOUT_CONSTANTS.TS_SELENIUM_DEFAULT_POLLING;
79
+ const attempts: number = Math.ceil(timeout / polling);
71
80
 
72
- async obtainWorkspaceNameFromStartingPage(): Promise<void> {
73
- const timeout: number = TimeoutConstants.TS_IDE_LOAD_TIMEOUT;
74
- const polling: number = TimeoutConstants.TS_SELENIUM_DEFAULT_POLLING;
75
- const attempts: number = Math.ceil(timeout / polling);
81
+ for (let i: number = 0; i < attempts; i++) {
82
+ try {
83
+ const startingWorkspaceLineContent: string = await this.driverHelper
84
+ .getDriver()
85
+ .findElement(WorkspaceHandlingTests.WORKSPACE_NAME)
86
+ .getText();
87
+ Logger.trace(`obtained starting workspace getText():${startingWorkspaceLineContent}`);
88
+ // cutting away leading text
89
+ WorkspaceHandlingTests.workspaceName = startingWorkspaceLineContent.substring('Starting workspace '.length).trim();
90
+ Logger.trace(`trimmed workspace name from getText():${WorkspaceHandlingTests.workspaceName}`);
91
+ break;
92
+ } catch (err) {
93
+ if (err instanceof error.StaleElementReferenceError) {
94
+ Logger.trace('failed to obtain name from workspace start page, element possibly detached from DOM. Retrying.');
95
+ await this.driverHelper.wait(polling);
96
+ continue;
97
+ }
98
+ if (err instanceof error.NoSuchElementError) {
99
+ Logger.trace('failed to obtain name from workspace start page, element not visible yet. Retrying.');
100
+ await this.driverHelper.wait(polling);
101
+ continue;
102
+ }
103
+ Logger.error(`obtaining workspace name failed with an unexpected error:${err}`);
104
+ throw err;
105
+ }
106
+ }
107
+ if (WorkspaceHandlingTests.workspaceName !== '' && WorkspaceHandlingTests.workspaceName !== 'undefined') {
108
+ Logger.info(`obtained workspace name from workspace loader page: ${WorkspaceHandlingTests.workspaceName}`);
109
+ return;
110
+ }
111
+ Logger.error(`failed to obtain workspace name:${WorkspaceHandlingTests.workspaceName}`);
112
+ throw new error.InvalidArgumentError(
113
+ `WorkspaceHandlingTests.obtainWorkspaceNameFromStartingPage failed to obtain workspace name:${WorkspaceHandlingTests.workspaceName}`
114
+ );
115
+ }
76
116
 
77
- for (let i: number = 0; i < attempts; i++) {
78
- try {
79
- let startingWorkspaceLineContent: string = await this.driverHelper.getDriver().findElement(WorkspaceHandlingTests.WORKSPACE_NAME_LOCATOR).getText();
80
- Logger.trace(`obtained starting workspace getText():${startingWorkspaceLineContent}`);
81
- // cutting away leading text
82
- WorkspaceHandlingTests.workspaceName = startingWorkspaceLineContent.substring('Starting workspace '.length).trim();
83
- Logger.trace(`trimmed workspace name from getText():${WorkspaceHandlingTests.workspaceName}`);
84
- break;
85
- } catch (err) {
86
- if (err instanceof error.StaleElementReferenceError) {
87
- Logger.trace(`failed to obtain name from workspace start page, element possibly detached from DOM. Retrying.`);
88
- await this.driverHelper.wait(polling);
89
- continue;
90
- }
91
- if (err instanceof error.NoSuchElementError) {
92
- Logger.trace(`failed to obtain name from workspace start page, element not visible yet. Retrying.`);
93
- await this.driverHelper.wait(polling);
94
- continue;
95
- }
96
- Logger.error(`obtaining workspace name failed with an unexpected error:${err}`);
97
- throw err;
98
- }
99
- }
100
- if (WorkspaceHandlingTests.workspaceName !== '' && WorkspaceHandlingTests.workspaceName !== 'undefined') {
101
- Logger.info(`obtained workspace name from workspace loader page: ${WorkspaceHandlingTests.workspaceName}`);
102
- return;
103
- }
104
- Logger.error(`failed to obtain workspace name:${WorkspaceHandlingTests.workspaceName}`);
105
- throw new error.InvalidArgumentError(`WorkspaceHandlingTests.obtainWorkspaceNameFromStartingPage failed to obtain workspace name:${WorkspaceHandlingTests.workspaceName}`);
106
- }
117
+ async stopWorkspace(workspaceName: string): Promise<void> {
118
+ await this.dashboard.openDashboard();
119
+ await this.dashboard.stopWorkspaceByUI(workspaceName);
120
+ }
107
121
 
108
- async stopWorkspace(workspaceName: string): Promise<void> {
109
- await this.dashboard.openDashboard();
110
- await this.dashboard.stopWorkspaceByUI(workspaceName);
111
- }
122
+ async removeWorkspace(workspaceName: string): Promise<void> {
123
+ await this.dashboard.openDashboard();
124
+ await this.dashboard.deleteStoppedWorkspaceByUI(workspaceName);
125
+ }
112
126
 
113
- async removeWorkspace(workspaceName: string): Promise<void> {
114
- await this.dashboard.openDashboard();
115
- await this.dashboard.deleteStoppedWorkspaceByUI(workspaceName);
116
- }
117
-
118
- async stopAndRemoveWorkspace(workspaceName: string): Promise<void> {
119
- await this.dashboard.openDashboard();
120
- await this.dashboard.stopAndRemoveWorkspaceByUI(workspaceName);
121
- }
127
+ async stopAndRemoveWorkspace(workspaceName: string): Promise<void> {
128
+ await this.dashboard.openDashboard();
129
+ await this.dashboard.stopAndRemoveWorkspaceByUI(workspaceName);
130
+ }
122
131
  }
package/tsconfig.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
- "compilerOptions": {
3
- "skipLibCheck": true,
4
- "target": "es2017",
5
- "module": "commonjs",
6
- "strict": true,
7
- "esModuleInterop": true,
8
-
9
- "outDir": "dist",
10
- "lib": ["es2017", "dom"],
11
- "types": ["reflect-metadata", "@types/mocha", "@types/node"],
12
- "experimentalDecorators": true,
13
- "emitDecoratorMetadata": true,
14
- "noImplicitReturns": false,
15
- "sourceMap": true
16
- }
2
+ "compilerOptions": {
3
+ "skipLibCheck": true,
4
+ "target": "es2017",
5
+ "module": "commonjs",
6
+ "strict": true,
7
+ "esModuleInterop": true,
8
+ "outDir": "dist",
9
+ "lib": ["es2017", "dom"],
10
+ "types": ["reflect-metadata", "@types/mocha", "@types/node"],
11
+ "experimentalDecorators": true,
12
+ "emitDecoratorMetadata": true,
13
+ "noImplicitReturns": false,
14
+ "sourceMap": true
15
+ },
16
+ "include": [".eslintrc.js", "**/*.ts", "**/**/*.ts"]
17
17
  }
@@ -1,5 +1,5 @@
1
- /*********************************************************************
2
- * Copyright (c) 2019-2023 Red Hat, Inc.
1
+ /** *******************************************************************
2
+ * copyright (c) 2019-2023 Red Hat, Inc.
3
3
  *
4
4
  * This program and the accompanying materials are made
5
5
  * available under the terms of the Eclipse Public License 2.0
@@ -12,102 +12,106 @@ import { inject, injectable } from 'inversify';
12
12
  import { CLASSES } from '../configs/inversify.types';
13
13
  import { DriverHelper } from './DriverHelper';
14
14
  import { Logger } from './Logger';
15
- import { TimeoutConstants } from '../constants/TimeoutConstants';
16
- import { ChromeDriverConstants } from '../constants/ChromeDriverConstants';
15
+ import { CHROME_DRIVER_CONSTANTS } from '../constants/CHROME_DRIVER_CONSTANTS';
17
16
 
18
17
  @injectable()
19
18
  export class BrowserTabsUtil {
20
- constructor(@inject(CLASSES.DriverHelper) private readonly driverHelper: DriverHelper) { }
19
+ constructor(
20
+ @inject(CLASSES.DriverHelper)
21
+ private readonly driverHelper: DriverHelper
22
+ ) {}
21
23
 
22
- async switchToWindow(windowHandle: string): Promise<void> {
23
- Logger.debug();
24
- await this.driverHelper.getDriver().switchTo().window(windowHandle);
25
- }
24
+ async switchToWindow(windowHandle: string): Promise<void> {
25
+ Logger.debug();
26
26
 
27
- async getAllWindowHandles(): Promise<string[]> {
28
- Logger.debug();
27
+ await this.driverHelper.getDriver().switchTo().window(windowHandle);
28
+ }
29
29
 
30
- return (await this.driverHelper.getDriver()).getAllWindowHandles();
31
- }
30
+ async getAllWindowHandles(): Promise<string[]> {
31
+ Logger.debug();
32
32
 
33
- async getCurrentWindowHandle(): Promise<string> {
34
- Logger.debug();
33
+ return (await this.driverHelper.getDriver()).getAllWindowHandles();
34
+ }
35
35
 
36
- return await this.driverHelper.getDriver().getWindowHandle();
37
- }
36
+ async getCurrentWindowHandle(): Promise<string> {
37
+ Logger.debug();
38
38
 
39
- async navigateTo(url: string): Promise<void> {
40
- Logger.debug(`${url}`);
39
+ return await this.driverHelper.getDriver().getWindowHandle();
40
+ }
41
41
 
42
- await this.driverHelper.getDriver().navigate().to(url);
43
- }
42
+ async navigateTo(url: string): Promise<void> {
43
+ Logger.debug(`${url}`);
44
44
 
45
- async navigateAndWaitToUrl(url: string, timeout: number = TimeoutConstants.TS_SELENIUM_WAIT_FOR_URL): Promise<void> {
46
- Logger.trace(`${url}`);
45
+ await this.driverHelper.navigateToUrl(url);
46
+ }
47
47
 
48
- await this.navigateTo(url);
49
- await this.waitURL(url, timeout);
50
- }
48
+ async waitAndSwitchToAnotherWindow(currentWindowHandle: string, timeout: number): Promise<void> {
49
+ Logger.debug();
51
50
 
52
- async waitAndSwitchToAnotherWindow(currentWindowHandle: string, timeout: number): Promise<void> {
53
- Logger.debug();
51
+ await this.driverHelper.waitUntilTrue(async (): Promise<boolean> => {
52
+ const windowHandles: string[] = await this.getAllWindowHandles();
54
53
 
55
- await this.driverHelper.waitUntilTrue(async () => {
56
- const windowHandles: string[] = await this.getAllWindowHandles();
54
+ return windowHandles.length > 1;
55
+ }, timeout);
57
56
 
58
- return windowHandles.length > 1;
59
- }, timeout);
57
+ const windowHandles: string[] = await this.getAllWindowHandles();
60
58
 
61
- const windowHandles: string[] = await this.getAllWindowHandles();
59
+ for (const windowHandle of windowHandles) {
60
+ if (windowHandle !== currentWindowHandle) {
61
+ await this.switchToWindow(windowHandle);
62
+ }
63
+ }
64
+ }
62
65
 
63
- for (const windowHandle of windowHandles) {
64
- if (windowHandle !== currentWindowHandle) {
65
- await this.switchToWindow(windowHandle);
66
- }
67
- }
68
- }
66
+ async refreshPage(): Promise<void> {
67
+ Logger.debug();
69
68
 
70
- async refreshPage(): Promise<void> {
71
- Logger.debug();
69
+ await (await this.driverHelper.getDriver()).navigate().refresh();
70
+ }
72
71
 
73
- await (await this.driverHelper.getDriver()).navigate().refresh();
74
- }
72
+ async getCurrentUrl(): Promise<string> {
73
+ Logger.trace();
75
74
 
76
- async getCurrentUrl(): Promise<string> {
77
- return await this.driverHelper.getDriver().getCurrentUrl();
78
- }
75
+ return await this.driverHelper.getDriver().getCurrentUrl();
76
+ }
79
77
 
80
- async waitURL(expectedUrl: string, timeout: number): Promise<void> {
81
- Logger.trace(`${expectedUrl}`);
78
+ async waitURL(expectedUrl: string, timeout: number): Promise<void> {
79
+ Logger.trace(`${expectedUrl}`);
82
80
 
83
- await this.driverHelper.getDriver().wait(async () => {
84
- const currentUrl: string = await this.driverHelper.getDriver().getCurrentUrl();
85
- const urlEquals: boolean = currentUrl === expectedUrl;
81
+ try {
82
+ await this.driverHelper.getDriver().wait(async (): Promise<boolean | undefined> => {
83
+ const currentUrl: string = await this.driverHelper.getDriver().getCurrentUrl();
84
+ const urlEquals: boolean = currentUrl === expectedUrl;
86
85
 
87
- if (urlEquals) {
88
- return true;
89
- }
90
- }, timeout);
91
- }
86
+ if (urlEquals) {
87
+ return true;
88
+ }
89
+ }, timeout);
90
+ } catch (e) {
91
+ throw e;
92
+ }
93
+ }
92
94
 
93
- async maximize(): Promise<void> {
94
- Logger.trace();
95
- if (ChromeDriverConstants.TS_SELENIUM_LAUNCH_FULLSCREEN) {
96
- Logger.debug(`TS_SELENIUM_LAUNCH_FULLSCREEN is set to true, maximizing window.`);
97
- await this.driverHelper.getDriver().manage().window().maximize();
98
- }
99
- }
95
+ async maximize(): Promise<void> {
96
+ Logger.trace();
100
97
 
101
- async closeAllTabsExceptCurrent(): Promise<void> {
102
- Logger.trace();
103
- const allTabsHandles: string[] = await this.getAllWindowHandles();
104
- const currentTabHandle: string = await this.getCurrentWindowHandle();
105
- allTabsHandles.splice(allTabsHandles.indexOf(currentTabHandle), 1);
98
+ if (CHROME_DRIVER_CONSTANTS.TS_SELENIUM_LAUNCH_FULLSCREEN) {
99
+ Logger.debug('TS_SELENIUM_LAUNCH_FULLSCREEN is set to true, maximizing window.');
100
+ await this.driverHelper.getDriver().manage().window().maximize();
101
+ }
102
+ }
106
103
 
107
- for (const tabHandle of allTabsHandles) {
108
- await this.switchToWindow(tabHandle);
109
- await this.driverHelper.getDriver().close();
110
- }
111
- await this.switchToWindow(currentTabHandle);
112
- }
104
+ async closeAllTabsExceptCurrent(): Promise<void> {
105
+ Logger.trace();
106
+
107
+ const allTabsHandles: string[] = await this.getAllWindowHandles();
108
+ const currentTabHandle: string = await this.getCurrentWindowHandle();
109
+ allTabsHandles.splice(allTabsHandles.indexOf(currentTabHandle), 1);
110
+
111
+ for (const tabHandle of allTabsHandles) {
112
+ await this.switchToWindow(tabHandle);
113
+ await this.driverHelper.getDriver().close();
114
+ }
115
+ await this.switchToWindow(currentTabHandle);
116
+ }
113
117
  }