@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.
Files changed (178) hide show
  1. package/configs/inversify.config.ts +6 -6
  2. package/configs/inversify.types.ts +27 -27
  3. package/configs/mocharc.ts +21 -21
  4. package/constants/APITestConstants.ts +39 -38
  5. package/constants/BaseTestConstants.ts +44 -43
  6. package/constants/ChromeDriverConstants.ts +29 -29
  7. package/constants/FactoryTestConstants.ts +30 -30
  8. package/constants/MonacoConstants.ts +10 -10
  9. package/constants/OAuthConstants.ts +46 -46
  10. package/constants/PluginsTestConstants.ts +1 -1
  11. package/constants/ReporterConstants.ts +28 -28
  12. package/constants/TimeoutConstants.ts +101 -101
  13. package/dist/configs/inversify.config.js.map +1 -1
  14. package/dist/configs/inversify.types.js.map +1 -1
  15. package/dist/configs/mocharc.js +1 -1
  16. package/dist/configs/mocharc.js.map +1 -1
  17. package/dist/constants/APITestConstants.js +2 -2
  18. package/dist/constants/APITestConstants.js.map +1 -1
  19. package/dist/constants/BaseTestConstants.js +1 -1
  20. package/dist/constants/BaseTestConstants.js.map +1 -1
  21. package/dist/constants/ChromeDriverConstants.js +1 -1
  22. package/dist/constants/ChromeDriverConstants.js.map +1 -1
  23. package/dist/constants/FactoryTestConstants.js +2 -2
  24. package/dist/constants/FactoryTestConstants.js.map +1 -1
  25. package/dist/constants/MonacoConstants.js +1 -1
  26. package/dist/constants/MonacoConstants.js.map +1 -1
  27. package/dist/constants/OAuthConstants.js +1 -1
  28. package/dist/constants/OAuthConstants.js.map +1 -1
  29. package/dist/constants/PluginsTestConstants.js +1 -1
  30. package/dist/constants/ReporterConstants.js +1 -1
  31. package/dist/constants/ReporterConstants.js.map +1 -1
  32. package/dist/constants/TimeoutConstants.js.map +1 -1
  33. package/dist/driver/ChromeDriver.js.map +1 -1
  34. package/dist/pageobjects/dashboard/CreateWorkspace.js +8 -8
  35. package/dist/pageobjects/dashboard/CreateWorkspace.js.map +1 -1
  36. package/dist/pageobjects/dashboard/Dashboard.js +11 -11
  37. package/dist/pageobjects/dashboard/Dashboard.js.map +1 -1
  38. package/dist/pageobjects/dashboard/Workspaces.js +14 -14
  39. package/dist/pageobjects/dashboard/Workspaces.js.map +1 -1
  40. package/dist/pageobjects/dashboard/workspace-details/WorkspaceDetails.js +8 -8
  41. package/dist/pageobjects/dashboard/workspace-details/WorkspaceDetails.js.map +1 -1
  42. package/dist/pageobjects/git-providers/OauthPage.js +21 -21
  43. package/dist/pageobjects/git-providers/OauthPage.js.map +1 -1
  44. package/dist/pageobjects/ide/CheCodeLocatorLoader.js +1 -1
  45. package/dist/pageobjects/ide/CheCodeLocatorLoader.js.map +1 -1
  46. package/dist/pageobjects/login/kubernetes/DexLoginPage.js +5 -5
  47. package/dist/pageobjects/login/kubernetes/DexLoginPage.js.map +1 -1
  48. package/dist/pageobjects/login/kubernetes/KubernetesLoginPage.js +1 -1
  49. package/dist/pageobjects/login/kubernetes/KubernetesLoginPage.js.map +1 -1
  50. package/dist/pageobjects/login/openshift/OcpLoginPage.js +10 -10
  51. package/dist/pageobjects/login/openshift/OcpLoginPage.js.map +1 -1
  52. package/dist/pageobjects/login/openshift/OcpRedHatLoginPage.js +2 -2
  53. package/dist/pageobjects/login/openshift/OcpRedHatLoginPage.js.map +1 -1
  54. package/dist/pageobjects/login/openshift/OcpUserLoginPage.js +1 -1
  55. package/dist/pageobjects/login/openshift/OcpUserLoginPage.js.map +1 -1
  56. package/dist/pageobjects/login/openshift/RedHatLoginPage.js +6 -6
  57. package/dist/pageobjects/login/openshift/RedHatLoginPage.js.map +1 -1
  58. package/dist/pageobjects/login/openshift/RegularUserOcpCheLoginPage.js +2 -2
  59. package/dist/pageobjects/login/openshift/RegularUserOcpCheLoginPage.js.map +1 -1
  60. package/dist/pageobjects/openshift/OcpApplicationPage.js +2 -2
  61. package/dist/pageobjects/openshift/OcpApplicationPage.js.map +1 -1
  62. package/dist/pageobjects/openshift/OcpImportFromGitPage.js +5 -5
  63. package/dist/pageobjects/openshift/OcpImportFromGitPage.js.map +1 -1
  64. package/dist/pageobjects/openshift/OcpMainPage.js +11 -11
  65. package/dist/pageobjects/openshift/OcpMainPage.js.map +1 -1
  66. package/dist/specs/MochaHooks.js +1 -1
  67. package/dist/specs/MochaHooks.js.map +1 -1
  68. package/dist/specs/SmokeTest.spec.js +7 -3
  69. package/dist/specs/SmokeTest.spec.js.map +1 -1
  70. package/dist/specs/api/ContainerOverridesAPI.spec.js.map +1 -1
  71. package/dist/specs/api/DevfileAcceptanceTestAPI.spec.js +7 -5
  72. package/dist/specs/api/DevfileAcceptanceTestAPI.spec.js.map +1 -1
  73. package/dist/specs/api/EmptyWorkspaceAPI.spec.js +1 -1
  74. package/dist/specs/api/EmptyWorkspaceAPI.spec.js.map +1 -1
  75. package/dist/specs/api/PodOverridesAPI.spec.js.map +1 -1
  76. package/dist/specs/dashboard-samples/EmptyWorkspace.spec.js +9 -5
  77. package/dist/specs/dashboard-samples/EmptyWorkspace.spec.js.map +1 -1
  78. package/dist/specs/dashboard-samples/Quarkus.spec.js +7 -3
  79. package/dist/specs/dashboard-samples/Quarkus.spec.js.map +1 -1
  80. package/dist/specs/dashboard-samples/{RecomendedExtentions.spec.js → RecommendedExtensions.spec.js} +7 -3
  81. package/dist/specs/dashboard-samples/{RecomendedExtentions.spec.js.map → RecommendedExtensions.spec.js.map} +1 -1
  82. package/dist/specs/devconsole-intergration/DevConsoleIntegration.spec.js +3 -1
  83. package/dist/specs/devconsole-intergration/DevConsoleIntegration.spec.js.map +1 -1
  84. package/dist/specs/factory/Factory.spec.js +3 -1
  85. package/dist/specs/factory/Factory.spec.js.map +1 -1
  86. package/dist/specs/factory/NoSetupRepoFactory.spec.js +4 -2
  87. package/dist/specs/factory/NoSetupRepoFactory.spec.js.map +1 -1
  88. package/dist/specs/factory/RefusedOAuthFactory.spec.js +4 -2
  89. package/dist/specs/factory/RefusedOAuthFactory.spec.js.map +1 -1
  90. package/dist/specs/miscellaneous/PredefinedNamespace.spec.js +6 -2
  91. package/dist/specs/miscellaneous/PredefinedNamespace.spec.js.map +1 -1
  92. package/dist/tests-library/LoginTests.js.map +1 -1
  93. package/dist/tests-library/ProjectAndFileTests.js +3 -3
  94. package/dist/tests-library/ProjectAndFileTests.js.map +1 -1
  95. package/dist/tests-library/WorkspaceHandlingTests.js +54 -74
  96. package/dist/tests-library/WorkspaceHandlingTests.js.map +1 -1
  97. package/dist/utils/BrowserTabsUtil.js +10 -10
  98. package/dist/utils/BrowserTabsUtil.js.map +1 -1
  99. package/dist/utils/CheReporter.js.map +1 -1
  100. package/dist/utils/DevWorkspaceConfigurationHelper.js +2 -2
  101. package/dist/utils/DevWorkspaceConfigurationHelper.js.map +1 -1
  102. package/dist/utils/DevfilesRegistryHelper.js +7 -7
  103. package/dist/utils/DevfilesRegistryHelper.js.map +1 -1
  104. package/dist/utils/DriverHelper.js +81 -81
  105. package/dist/utils/DriverHelper.js.map +1 -1
  106. package/dist/utils/KubernetesCommandLineToolsExecutor.js +38 -35
  107. package/dist/utils/KubernetesCommandLineToolsExecutor.js.map +1 -1
  108. package/dist/utils/Logger.js +19 -10
  109. package/dist/utils/Logger.js.map +1 -1
  110. package/dist/utils/ScreenCatcher.js.map +1 -1
  111. package/dist/utils/ShellExecutor.js.map +1 -1
  112. package/dist/utils/StringUtil.js +2 -2
  113. package/dist/utils/StringUtil.js.map +1 -1
  114. package/dist/utils/request-handlers/CheApiRequestHandler.js +13 -11
  115. package/dist/utils/request-handlers/CheApiRequestHandler.js.map +1 -1
  116. package/dist/utils/request-handlers/headers/CheMultiuserAuthorizationHeaderHandler.js +1 -1
  117. package/dist/utils/request-handlers/headers/CheMultiuserAuthorizationHeaderHandler.js.map +1 -1
  118. package/dist/utils/workspace/ApiUrlResolver.js +3 -3
  119. package/dist/utils/workspace/ApiUrlResolver.js.map +1 -1
  120. package/dist/utils/workspace/TestWorkspaceUtil.js +20 -16
  121. package/dist/utils/workspace/TestWorkspaceUtil.js.map +1 -1
  122. package/dist/utils/workspace/WorkspaceStatus.js.map +1 -1
  123. package/driver/ChromeDriver.ts +44 -44
  124. package/driver/IDriver.ts +1 -1
  125. package/package.json +1 -1
  126. package/pageobjects/dashboard/CreateWorkspace.ts +52 -52
  127. package/pageobjects/dashboard/Dashboard.ts +72 -72
  128. package/pageobjects/dashboard/Workspaces.ts +138 -139
  129. package/pageobjects/dashboard/workspace-details/WorkspaceDetails.ts +92 -93
  130. package/pageobjects/git-providers/OauthPage.ts +136 -136
  131. package/pageobjects/ide/CheCodeLocatorLoader.ts +40 -40
  132. package/pageobjects/login/interfaces/ICheLoginPage.ts +1 -1
  133. package/pageobjects/login/interfaces/IOcpLoginPage.ts +1 -1
  134. package/pageobjects/login/kubernetes/DexLoginPage.ts +27 -27
  135. package/pageobjects/login/kubernetes/KubernetesLoginPage.ts +11 -11
  136. package/pageobjects/login/openshift/OcpLoginPage.ts +50 -50
  137. package/pageobjects/login/openshift/OcpRedHatLoginPage.ts +21 -21
  138. package/pageobjects/login/openshift/OcpUserLoginPage.ts +14 -14
  139. package/pageobjects/login/openshift/RedHatLoginPage.ts +44 -41
  140. package/pageobjects/login/openshift/RegularUserOcpCheLoginPage.ts +23 -23
  141. package/pageobjects/openshift/OcpApplicationPage.ts +16 -16
  142. package/pageobjects/openshift/OcpImportFromGitPage.ts +54 -54
  143. package/pageobjects/openshift/OcpMainPage.ts +64 -64
  144. package/specs/MochaHooks.ts +44 -44
  145. package/specs/SmokeTest.spec.ts +35 -31
  146. package/specs/api/ContainerOverridesAPI.spec.ts +23 -23
  147. package/specs/api/DevfileAcceptanceTestAPI.spec.ts +93 -91
  148. package/specs/api/EmptyWorkspaceAPI.spec.ts +50 -50
  149. package/specs/api/PodOverridesAPI.spec.ts +29 -29
  150. package/specs/dashboard-samples/EmptyWorkspace.spec.ts +29 -25
  151. package/specs/dashboard-samples/Quarkus.spec.ts +31 -27
  152. package/specs/dashboard-samples/RecommendedExtensions.spec.ts +205 -0
  153. package/specs/devconsole-intergration/DevConsoleIntegration.spec.ts +62 -64
  154. package/specs/factory/Factory.spec.ts +149 -147
  155. package/specs/factory/NoSetupRepoFactory.spec.ts +188 -186
  156. package/specs/factory/RefusedOAuthFactory.spec.ts +182 -180
  157. package/specs/miscellaneous/PredefinedNamespace.spec.ts +52 -48
  158. package/tests-library/LoginTests.ts +29 -29
  159. package/tests-library/ProjectAndFileTests.ts +13 -13
  160. package/tests-library/WorkspaceHandlingTests.ts +84 -103
  161. package/utils/BrowserTabsUtil.ts +69 -69
  162. package/utils/CheReporter.ts +4 -6
  163. package/utils/DevWorkspaceConfigurationHelper.ts +58 -58
  164. package/utils/DevfilesRegistryHelper.ts +51 -51
  165. package/utils/DriverHelper.ts +599 -600
  166. package/utils/KubernetesCommandLineToolsExecutor.ts +166 -158
  167. package/utils/Logger.ts +98 -67
  168. package/utils/ScreenCatcher.ts +42 -42
  169. package/utils/ShellExecutor.ts +10 -10
  170. package/utils/StringUtil.ts +29 -30
  171. package/utils/request-handlers/CheApiRequestHandler.ts +84 -82
  172. package/utils/request-handlers/headers/CheMultiuserAuthorizationHeaderHandler.ts +18 -18
  173. package/utils/request-handlers/headers/IAuthorizationHeaderHandler.ts +1 -1
  174. package/utils/workspace/ApiUrlResolver.ts +23 -23
  175. package/utils/workspace/ITestWorkspaceUtil.ts +29 -29
  176. package/utils/workspace/TestWorkspaceUtil.ts +120 -116
  177. package/utils/workspace/WorkspaceStatus.ts +3 -3
  178. package/specs/dashboard-samples/RecomendedExtentions.spec.ts +0 -201
@@ -13,7 +13,6 @@ import { inject, injectable } from 'inversify';
13
13
  import { CLASSES } from '../configs/inversify.types';
14
14
  import { Dashboard } from '../pageobjects/dashboard/Dashboard';
15
15
  import { CreateWorkspace } from '../pageobjects/dashboard/CreateWorkspace';
16
- import { Workspaces } from '../pageobjects/dashboard/Workspaces';
17
16
  import { BrowserTabsUtil } from '../utils/BrowserTabsUtil';
18
17
  import { Logger } from '../utils/Logger';
19
18
  import { ApiUrlResolver } from '../utils/workspace/ApiUrlResolver';
@@ -24,118 +23,100 @@ import { By, error } from 'selenium-webdriver';
24
23
  @injectable()
25
24
  export class WorkspaceHandlingTests {
26
25
 
27
- static getWorkspaceName(): string {
28
- return WorkspaceHandlingTests.workspaceName;
29
- }
26
+ static getWorkspaceName(): string {
27
+ return WorkspaceHandlingTests.workspaceName;
28
+ }
30
29
 
31
- private static WORKSPACE_NAME_LOCATOR: By = By.xpath(`//h1[contains(.,'Starting workspace ')]`);
32
- private static workspaceName: string = 'undefined';
33
- private static parentGUID: string;
30
+ private static WORKSPACE_NAME_LOCATOR: By = By.xpath(`//h1[contains(.,'Starting workspace ')]`);
31
+ private static workspaceName: string = 'undefined';
32
+ private static parentGUID: string;
34
33
 
35
- constructor(
36
- @inject(CLASSES.Dashboard) private readonly dashboard: Dashboard,
37
- @inject(CLASSES.CreateWorkspace) private readonly createWorkspace: CreateWorkspace,
38
- @inject(CLASSES.Workspaces) private readonly workspaces: Workspaces,
39
- @inject(CLASSES.BrowserTabsUtil) private readonly browserTabsUtil: BrowserTabsUtil,
40
- @inject(CLASSES.ApiUrlResolver) private readonly apiUrlResolver: ApiUrlResolver,
41
- @inject(CLASSES.DriverHelper) private readonly driverHelper: DriverHelper) {}
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) {}
42
40
 
43
- setWindowHandle(guid: string): void {
44
- WorkspaceHandlingTests.parentGUID = guid;
45
- }
41
+ setWindowHandle(guid: string): void {
42
+ WorkspaceHandlingTests.parentGUID = guid;
43
+ }
46
44
 
47
- getWindowHandle(): string {
48
- return WorkspaceHandlingTests.parentGUID;
49
- }
45
+ getWindowHandle(): string {
46
+ return WorkspaceHandlingTests.parentGUID;
47
+ }
50
48
 
51
- createAndOpenWorkspace(stack: string): void {
52
- test(`Create and open new workspace, stack:${stack}`, async () => {
53
- await this.dashboard.clickWorkspacesButton();
54
- await this.dashboard.waitPage();
55
- Logger.debug(`Fetching user kubernetes namespace, storing auth token by getting workspaces API URL.`);
56
- await this.apiUrlResolver.getWorkspacesApiUrl();
57
- await this.dashboard.clickCreateWorkspaceButton();
58
- await this.createWorkspace.waitPage();
59
- WorkspaceHandlingTests.parentGUID = await this.browserTabsUtil.getCurrentWindowHandle();
60
- await this.createWorkspace.clickOnSampleNoEditorSelection(stack);
61
- await this.browserTabsUtil.waitAndSwitchToAnotherWindow(WorkspaceHandlingTests.parentGUID, TimeoutConstants.TS_IDE_LOAD_TIMEOUT);
62
- });
63
- }
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
+ }
64
60
 
65
- createAndOpenWorkspaceFromGitRepository(factoryUrl: string): void {
66
- test(`Create and open new workspace from factory:${factoryUrl}`, async () => {
67
- await this.dashboard.waitPage();
68
- Logger.debug(`Fetching user kubernetes namespace, storing auth token by getting workspaces API URL.`);
69
- await this.apiUrlResolver.getWorkspacesApiUrl();
70
- await this.dashboard.clickCreateWorkspaceButton();
71
- await this.createWorkspace.waitPage();
72
- WorkspaceHandlingTests.parentGUID = await this.browserTabsUtil.getCurrentWindowHandle();
73
- await this.createWorkspace.importFromGitUsingUI(factoryUrl);
74
- await this.browserTabsUtil.waitAndSwitchToAnotherWindow(WorkspaceHandlingTests.parentGUID, TimeoutConstants.TS_IDE_LOAD_TIMEOUT);
75
- });
76
- }
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
+ }
77
71
 
78
- openExistingWorkspace(workspaceName: string): void {
79
- test('Open and start existing workspace', async () => {
80
- await this.dashboard.waitPage();
81
- Logger.debug(`Fetching user kubernetes namespace, storing auth token by getting workspaces API URL.`);
82
- await this.apiUrlResolver.getWorkspacesApiUrl();
83
- await this.dashboard.clickWorkspacesButton();
84
- await this.workspaces.waitPage();
85
- await this.workspaces.clickOpenButton(workspaceName);
86
- });
87
- }
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);
88
76
 
89
- obtainWorkspaceNameFromStartingPage(): void {
90
- test('Obtain workspace name from workspace loader page', async() => {
91
- const timeout: number = TimeoutConstants.TS_IDE_LOAD_TIMEOUT;
92
- const polling: number = TimeoutConstants.TS_SELENIUM_DEFAULT_POLLING;
93
- const attempts: number = Math.ceil(timeout / polling);
94
-
95
- for (let i: number = 0; i < attempts; i++) {
96
- try {
97
- let startingWorkspaceLineContent: string = await this.driverHelper.getDriver().findElement(WorkspaceHandlingTests.WORKSPACE_NAME_LOCATOR).getText();
98
- Logger.trace(`WorkspaceHandlingTests.obtainWorkspaceNameFromStartingPage obtained starting workspace getText():${startingWorkspaceLineContent}`);
99
- // cutting away leading text
100
- WorkspaceHandlingTests.workspaceName = startingWorkspaceLineContent.substring('Starting workspace '.length).trim();
101
- Logger.trace(`WorkspaceHandlingTests.obtainWorkspaceNameFromStartingPage trimmed workspace name from getText():${WorkspaceHandlingTests.workspaceName}`);
102
- break;
103
- } catch (err) {
104
- if (err instanceof error.StaleElementReferenceError) {
105
- Logger.trace(`WorkspaceHandlingTests.obtainWorkspaceNameFromStartingPage Failed to obtain name from workspace start page, element possibly detached from DOM. Retrying.`);
106
- await this.driverHelper.wait(polling);
107
- continue;
108
- }
109
- if (err instanceof error.NoSuchElementError) {
110
- Logger.trace(`WorkspaceHandlingTests.obtainWorkspaceNameFromStartingPage Failed to obtain name from workspace start page, element not visible yet. Retrying.`);
111
- await this.driverHelper.wait(polling);
112
- continue;
113
- }
114
- Logger.error(`WorkspaceHandlingTests.obtainWorkspaceNameFromStartingPage Obtaining workspace name failed with an unexpected error:${err}`);
115
- throw err;
116
- }
117
- }
118
- if (WorkspaceHandlingTests.workspaceName !== '' && WorkspaceHandlingTests.workspaceName !== 'undefined') {
119
- Logger.info(`Obtained workspace name from workspace loader page: ${WorkspaceHandlingTests.workspaceName}`);
120
- return;
121
- }
122
- Logger.error(`WorkspaceHandlingTests.obtainWorkspaceNameFromStartingPage failed to obtain workspace name:${WorkspaceHandlingTests.workspaceName}`);
123
- throw new error.InvalidArgumentError(`WorkspaceHandlingTests.obtainWorkspaceNameFromStartingPage failed to obtain workspace name:${WorkspaceHandlingTests.workspaceName}`);
124
- });
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
+ }
125
99
  }
126
-
127
- async stopWorkspace(workspaceName: string): Promise<void> {
128
- await this.dashboard.openDashboard();
129
- await this.dashboard.stopWorkspaceByUI(workspaceName);
100
+ if (WorkspaceHandlingTests.workspaceName !== '' && WorkspaceHandlingTests.workspaceName !== 'undefined') {
101
+ Logger.info(`obtained workspace name from workspace loader page: ${WorkspaceHandlingTests.workspaceName}`);
102
+ return;
130
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
+ }
131
107
 
132
- async removeWorkspace(workspaceName: string): Promise<void> {
133
- await this.dashboard.openDashboard();
134
- await this.dashboard.deleteStoppedWorkspaceByUI(workspaceName);
135
- }
108
+ async stopWorkspace(workspaceName: string): Promise<void> {
109
+ await this.dashboard.openDashboard();
110
+ await this.dashboard.stopWorkspaceByUI(workspaceName);
111
+ }
136
112
 
137
- async stopAndRemoveWorkspace(workspaceName: string): Promise<void> {
138
- await this.dashboard.openDashboard();
139
- await this.dashboard.stopAndRemoveWorkspaceByUI(workspaceName);
140
- }
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
+ }
141
122
  }
@@ -8,7 +8,7 @@
8
8
  * SPDX-License-Identifier: EPL-2.0
9
9
  **********************************************************************/
10
10
 
11
- import { injectable, inject } from 'inversify';
11
+ 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';
@@ -17,97 +17,97 @@ import { ChromeDriverConstants } from '../constants/ChromeDriverConstants';
17
17
 
18
18
  @injectable()
19
19
  export class BrowserTabsUtil {
20
- constructor(@inject(CLASSES.DriverHelper) private readonly driverHelper: DriverHelper) { }
20
+ constructor(@inject(CLASSES.DriverHelper) private readonly driverHelper: DriverHelper) { }
21
21
 
22
- async switchToWindow(windowHandle: string): Promise<void> {
23
- Logger.debug('BrowserTabsUtil.switchToWindow');
24
- await this.driverHelper.getDriver().switchTo().window(windowHandle);
25
- }
22
+ async switchToWindow(windowHandle: string): Promise<void> {
23
+ Logger.debug();
24
+ await this.driverHelper.getDriver().switchTo().window(windowHandle);
25
+ }
26
26
 
27
- async getAllWindowHandles(): Promise<string[]> {
28
- Logger.debug('BrowserTabsUtil.getAllWindowHandles');
27
+ async getAllWindowHandles(): Promise<string[]> {
28
+ Logger.debug();
29
29
 
30
- return (await this.driverHelper.getDriver()).getAllWindowHandles();
31
- }
30
+ return (await this.driverHelper.getDriver()).getAllWindowHandles();
31
+ }
32
32
 
33
- async getCurrentWindowHandle(): Promise<string> {
34
- Logger.debug('BrowserTabsUtil.getCurrentWindowHandle');
33
+ async getCurrentWindowHandle(): Promise<string> {
34
+ Logger.debug();
35
35
 
36
- return await this.driverHelper.getDriver().getWindowHandle();
37
- }
36
+ return await this.driverHelper.getDriver().getWindowHandle();
37
+ }
38
38
 
39
- async navigateTo(url: string): Promise<void> {
40
- Logger.debug(`BrowserTabsUtil.navigateTo ${url}`);
39
+ async navigateTo(url: string): Promise<void> {
40
+ Logger.debug(`${url}`);
41
41
 
42
- await this.driverHelper.getDriver().navigate().to(url);
43
- }
42
+ await this.driverHelper.getDriver().navigate().to(url);
43
+ }
44
44
 
45
- async navigateAndWaitToUrl(url: string, timeout: number = TimeoutConstants.TS_SELENIUM_WAIT_FOR_URL): Promise<void> {
46
- Logger.trace(`BrowserTabsUtil.navigateAndWaitToUrl ${url}`);
45
+ async navigateAndWaitToUrl(url: string, timeout: number = TimeoutConstants.TS_SELENIUM_WAIT_FOR_URL): Promise<void> {
46
+ Logger.trace(`${url}`);
47
47
 
48
- await this.navigateTo(url);
49
- await this.waitURL(url, timeout);
50
- }
48
+ await this.navigateTo(url);
49
+ await this.waitURL(url, timeout);
50
+ }
51
51
 
52
- async waitAndSwitchToAnotherWindow(currentWindowHandle: string, timeout: number): Promise<void> {
53
- Logger.debug('BrowserTabsUtil.waitAndSwitchToAnotherWindow');
52
+ async waitAndSwitchToAnotherWindow(currentWindowHandle: string, timeout: number): Promise<void> {
53
+ Logger.debug();
54
54
 
55
- await this.driverHelper.waitUntilTrue(async () => {
56
- const windowHandles: string[] = await this.getAllWindowHandles();
55
+ await this.driverHelper.waitUntilTrue(async () => {
56
+ const windowHandles: string[] = await this.getAllWindowHandles();
57
57
 
58
- return windowHandles.length > 1;
59
- }, timeout);
58
+ return windowHandles.length > 1;
59
+ }, timeout);
60
60
 
61
- const windowHandles: string[] = await this.getAllWindowHandles();
61
+ const windowHandles: string[] = await this.getAllWindowHandles();
62
62
 
63
- for (const windowHandle of windowHandles) {
64
- if (windowHandle !== currentWindowHandle) {
65
- await this.switchToWindow(windowHandle);
66
- }
67
- }
63
+ for (const windowHandle of windowHandles) {
64
+ if (windowHandle !== currentWindowHandle) {
65
+ await this.switchToWindow(windowHandle);
66
+ }
68
67
  }
68
+ }
69
69
 
70
- async refreshPage(): Promise<void> {
71
- Logger.debug('BrowserTabsUtil.refreshPage');
70
+ async refreshPage(): Promise<void> {
71
+ Logger.debug();
72
72
 
73
- await (await this.driverHelper.getDriver()).navigate().refresh();
74
- }
73
+ await (await this.driverHelper.getDriver()).navigate().refresh();
74
+ }
75
75
 
76
- async getCurrentUrl(): Promise<string> {
77
- return await this.driverHelper.getDriver().getCurrentUrl();
78
- }
76
+ async getCurrentUrl(): Promise<string> {
77
+ return await this.driverHelper.getDriver().getCurrentUrl();
78
+ }
79
79
 
80
- async waitURL(expectedUrl: string, timeout: number): Promise<void> {
81
- Logger.trace(`BrowserTabsUtil.waitURL ${expectedUrl}`);
80
+ async waitURL(expectedUrl: string, timeout: number): Promise<void> {
81
+ Logger.trace(`${expectedUrl}`);
82
82
 
83
- await this.driverHelper.getDriver().wait(async () => {
84
- const currentUrl: string = await this.driverHelper.getDriver().getCurrentUrl();
85
- const urlEquals: boolean = currentUrl === expectedUrl;
83
+ await this.driverHelper.getDriver().wait(async () => {
84
+ const currentUrl: string = await this.driverHelper.getDriver().getCurrentUrl();
85
+ const urlEquals: boolean = currentUrl === expectedUrl;
86
86
 
87
- if (urlEquals) {
88
- return true;
89
- }
90
- }, timeout);
91
- }
87
+ if (urlEquals) {
88
+ return true;
89
+ }
90
+ }, timeout);
91
+ }
92
92
 
93
- async maximize(): Promise<void> {
94
- Logger.trace(`BrowserTabsUtil.maximize`);
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
- }
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();
99
98
  }
99
+ }
100
+
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);
100
106
 
101
- async closeAllTabsExceptCurrent(): Promise<void> {
102
- Logger.trace(`${this.constructor.name}.${this.closeAllTabsExceptCurrent.name}`);
103
- const allTabsHandles: string[] = await this.getAllWindowHandles();
104
- const currentTabHandle: string = await this.getCurrentWindowHandle();
105
- allTabsHandles.splice(allTabsHandles.indexOf(currentTabHandle), 1);
106
-
107
- for (const tabHandle of allTabsHandles) {
108
- await this.switchToWindow(tabHandle);
109
- await this.driverHelper.getDriver().close();
110
- }
111
- await this.switchToWindow(currentTabHandle);
107
+ for (const tabHandle of allTabsHandles) {
108
+ await this.switchToWindow(tabHandle);
109
+ await this.driverHelper.getDriver().close();
112
110
  }
111
+ await this.switchToWindow(currentTabHandle);
112
+ }
113
113
  }
@@ -10,6 +10,7 @@
10
10
  import * as mocha from 'mocha';
11
11
  import { CLASSES } from '../configs/inversify.types';
12
12
  import * as fs from 'fs';
13
+ import { WriteStream } from 'fs';
13
14
  import * as rm from 'rimraf';
14
15
  import { logging } from 'selenium-webdriver';
15
16
  import { DriverHelper } from './DriverHelper';
@@ -17,7 +18,6 @@ import { ScreenCatcher } from './ScreenCatcher';
17
18
  import { TimeoutConstants } from '../constants/TimeoutConstants';
18
19
  import { Logger } from './Logger';
19
20
  import { e2eContainer } from '../configs/inversify.config';
20
- import { WriteStream } from 'fs';
21
21
  import { StringUtil } from './StringUtil';
22
22
  import { BaseTestConstants } from '../constants/BaseTestConstants';
23
23
  import { ChromeDriverConstants } from '../constants/ChromeDriverConstants';
@@ -79,7 +79,7 @@ class CheReporter extends mocha.reporters.Spec {
79
79
  rm.sync(ReporterConstants.TS_SELENIUM_REPORT_FOLDER);
80
80
  });
81
81
 
82
- runner.on('test', async function (test: mocha.Test): Promise<void> {
82
+ runner.on('test', async function(test: mocha.Test): Promise<void> {
83
83
  if (!ReporterConstants.TS_SELENIUM_EXECUTION_SCREENCAST) {
84
84
  return;
85
85
  }
@@ -108,8 +108,7 @@ class CheReporter extends mocha.reporters.Spec {
108
108
  }
109
109
  });
110
110
 
111
-
112
- runner.on('end', async function (): Promise<void> {
111
+ runner.on('end', async function(): Promise<void> {
113
112
  // ensure that fired events done
114
113
  await driverHelper.wait(5000);
115
114
 
@@ -122,7 +121,7 @@ class CheReporter extends mocha.reporters.Spec {
122
121
  }
123
122
  });
124
123
 
125
- runner.on('fail', async function (test: mocha.Test): Promise<void> {
124
+ runner.on('fail', async function(test: mocha.Test): Promise<void> {
126
125
  Logger.error(`CheReporter runner.on.fail: ${test.fullTitle()} failed after ${test.duration}ms`);
127
126
  // raise flag for keeping the screencast
128
127
  deleteScreencast = false;
@@ -139,7 +138,6 @@ class CheReporter extends mocha.reporters.Spec {
139
138
  const pageSourceFileName: string = `${testReportDirPath}/pagesource-${testTitle}.html`;
140
139
  const browserLogsFileName: string = `${testReportDirPath}/browserlogs-${testTitle}.txt`;
141
140
 
142
-
143
141
  // create reporter dir if not exist
144
142
  const reportDirExists: boolean = fs.existsSync(ReporterConstants.TS_SELENIUM_REPORT_FOLDER);
145
143
 
@@ -13,71 +13,71 @@ import { APITestConstants } from '../constants/APITestConstants';
13
13
  */
14
14
 
15
15
  interface IContextParams {
16
- devfilePath?: string | undefined;
17
- devfileUrl?: string | undefined;
18
- devfileContent?: string | undefined;
19
- outputFile?: string | undefined;
20
- editorPath?: string | undefined;
21
- editorContent?: string | undefined;
22
- editorEntry?: string | undefined;
23
- pluginRegistryUrl?: string | undefined;
24
- projects?: {
25
- name: string;
26
- location: string;
27
- }[];
28
- injectDefaultComponent?: string | undefined;
29
- defaultComponentImage?: string | undefined;
16
+ devfilePath?: string | undefined;
17
+ devfileUrl?: string | undefined;
18
+ devfileContent?: string | undefined;
19
+ outputFile?: string | undefined;
20
+ editorPath?: string | undefined;
21
+ editorContent?: string | undefined;
22
+ editorEntry?: string | undefined;
23
+ pluginRegistryUrl?: string | undefined;
24
+ projects?: {
25
+ name: string;
26
+ location: string;
27
+ }[];
28
+ injectDefaultComponent?: string | undefined;
29
+ defaultComponentImage?: string | undefined;
30
30
  }
31
31
 
32
32
  export class DevWorkspaceConfigurationHelper {
33
- private generator: Generator = new Generator();
34
- private readonly params: IContextParams;
33
+ private generator: Generator = new Generator();
34
+ private readonly params: IContextParams;
35
35
 
36
- constructor(params: IContextParams) {
37
- // check if all undefined
38
- if (!(params.editorPath || params.editorEntry || params.editorContent)) {
39
- params.editorEntry = 'che-incubator/che-code/latest';
40
- }
41
- // check if one or both has value
42
- if (APITestConstants.TS_API_TEST_UDI_IMAGE || params.defaultComponentImage) {
43
- params.injectDefaultComponent = 'true';
44
- // check if not explicitly passed than assign value from the constants
45
- if (!params.defaultComponentImage) {
46
- params.defaultComponentImage = APITestConstants.TS_API_TEST_UDI_IMAGE;
47
- }
48
- }
49
- // assign value from the constants if not explicitly passed
50
- if (APITestConstants.TS_API_TEST_PLUGIN_REGISTRY_URL && !params.pluginRegistryUrl) {
51
- params.pluginRegistryUrl = APITestConstants.TS_API_TEST_PLUGIN_REGISTRY_URL;
52
- }
53
- if (APITestConstants.TS_API_TEST_CHE_CODE_EDITOR_DEVFILE_URI && !params.editorContent) {
54
- params.editorContent = ShellExecutor.curl(APITestConstants.TS_API_TEST_CHE_CODE_EDITOR_DEVFILE_URI).stdout;
55
- }
56
- this.params = params;
36
+ constructor(params: IContextParams) {
37
+ // check if all undefined
38
+ if (!(params.editorPath || params.editorEntry || params.editorContent)) {
39
+ params.editorEntry = 'che-incubator/che-code/latest';
57
40
  }
41
+ // check if one or both has value
42
+ if (APITestConstants.TS_API_TEST_UDI_IMAGE || params.defaultComponentImage) {
43
+ params.injectDefaultComponent = 'true';
44
+ // check if not explicitly passed than assign value from the constants
45
+ if (!params.defaultComponentImage) {
46
+ params.defaultComponentImage = APITestConstants.TS_API_TEST_UDI_IMAGE;
47
+ }
48
+ }
49
+ // assign value from the constants if not explicitly passed
50
+ if (APITestConstants.TS_API_TEST_PLUGIN_REGISTRY_URL && !params.pluginRegistryUrl) {
51
+ params.pluginRegistryUrl = APITestConstants.TS_API_TEST_PLUGIN_REGISTRY_URL;
52
+ }
53
+ if (APITestConstants.TS_API_TEST_CHE_CODE_EDITOR_DEVFILE_URI && !params.editorContent) {
54
+ params.editorContent = ShellExecutor.curl(APITestConstants.TS_API_TEST_CHE_CODE_EDITOR_DEVFILE_URI).stdout;
55
+ }
56
+ this.params = params;
57
+ }
58
58
 
59
- async generateDevfileContext(): Promise<DevfileContext> {
60
- Logger.debug(`${this.constructor.name}.${this.generateDevfileContext.name}`);
61
- if (!this.params.projects) {
62
- this.params.projects = [];
63
- }
64
- return await this.generator.generateDevfileContext(
65
- {
66
- ...this.params,
67
- projects: this.params.projects
68
- },
69
- axios.default as any
70
- );
59
+ async generateDevfileContext(): Promise<DevfileContext> {
60
+ Logger.debug();
61
+ if (!this.params.projects) {
62
+ this.params.projects = [];
71
63
  }
64
+ return await this.generator.generateDevfileContext(
65
+ {
66
+ ...this.params,
67
+ projects: this.params.projects
68
+ },
69
+ axios.default as any
70
+ );
71
+ }
72
72
 
73
- // write templates and then DevWorkspace in a single file
74
- async getDevWorkspaceConfigurationYamlAsString(context: DevfileContext): Promise<string> {
75
- Logger.debug(`${this.constructor.name}.${this.getDevWorkspaceConfigurationYamlAsString.name}`);
76
- const allContentArray: any[] = context.devWorkspaceTemplates.map(
77
- (template: V1alpha2DevWorkspaceTemplate) => YAML.stringify(template)
78
- );
79
- allContentArray.push(YAML.stringify(context.devWorkspace));
73
+ // write templates and then DevWorkspace in a single file
74
+ async getDevWorkspaceConfigurationYamlAsString(context: DevfileContext): Promise<string> {
75
+ Logger.debug();
76
+ const allContentArray: any[] = context.devWorkspaceTemplates.map(
77
+ (template: V1alpha2DevWorkspaceTemplate) => YAML.stringify(template)
78
+ );
79
+ allContentArray.push(YAML.stringify(context.devWorkspace));
80
80
 
81
- return allContentArray.join('---\n');
82
- }
81
+ return allContentArray.join('---\n');
82
+ }
83
83
  }