@eclipse-che/che-e2e 7.45.0-dev-0129fe6 → 7.45.0-dev-14d9e32

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 (43) hide show
  1. package/dist/driver/CheReporter.js +4 -4
  2. package/dist/driver/CheReporter.js.map +1 -1
  3. package/dist/index.js +1 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/pageobjects/dashboard/Dashboard.js +15 -2
  6. package/dist/pageobjects/dashboard/Dashboard.js.map +1 -1
  7. package/dist/pageobjects/ide/Ide.js +14 -4
  8. package/dist/pageobjects/ide/Ide.js.map +1 -1
  9. package/dist/pageobjects/ide/ProjectTree.js +9 -5
  10. package/dist/pageobjects/ide/ProjectTree.js.map +1 -1
  11. package/dist/tests/devfiles/DotNetCore.spec.js +1 -1
  12. package/dist/tests/devfiles/DotNetCore.spec.js.map +1 -1
  13. package/dist/tests/devfiles/Go.spec.js +15 -15
  14. package/dist/tests/devfiles/Go.spec.js.map +1 -1
  15. package/dist/tests/e2e_happy_path/DevWorkspaceHappyPath.spec.js +10 -7
  16. package/dist/tests/e2e_happy_path/DevWorkspaceHappyPath.spec.js.map +1 -1
  17. package/dist/tests/plugins/GitHubPullRequestPlugin.spec.js +3 -2
  18. package/dist/tests/plugins/GitHubPullRequestPlugin.spec.js.map +1 -1
  19. package/dist/testsLibrary/LanguageServerTests.js +1 -0
  20. package/dist/testsLibrary/LanguageServerTests.js.map +1 -1
  21. package/dist/testsLibrary/WorkspaceHandlingTests.js +13 -4
  22. package/dist/testsLibrary/WorkspaceHandlingTests.js.map +1 -1
  23. package/dist/utils/requestHandlers/headers/CheMultiuserAuthorizationHeaderHandler.js +3 -15
  24. package/dist/utils/requestHandlers/headers/CheMultiuserAuthorizationHeaderHandler.js.map +1 -1
  25. package/dist/utils/requestHandlers/tokens/CheMultiuserTokenHandler.js +3 -3
  26. package/dist/utils/requestHandlers/tokens/CheMultiuserTokenHandler.js.map +1 -1
  27. package/driver/CheReporter.ts +4 -4
  28. package/index.ts +1 -1
  29. package/package.json +2 -2
  30. package/pageobjects/dashboard/Dashboard.ts +14 -2
  31. package/pageobjects/ide/Ide.ts +13 -4
  32. package/pageobjects/ide/ProjectTree.ts +6 -5
  33. package/tests/devfiles/DotNetCore.spec.ts +1 -1
  34. package/tests/devfiles/Go.spec.ts +15 -17
  35. package/tests/e2e_happy_path/DevWorkspaceHappyPath.spec.ts +126 -123
  36. package/tests/plugins/GitHubPullRequestPlugin.spec.ts +3 -2
  37. package/testsLibrary/LanguageServerTests.ts +1 -0
  38. package/testsLibrary/WorkspaceHandlingTests.ts +10 -3
  39. package/utils/requestHandlers/headers/CheMultiuserAuthorizationHeaderHandler.ts +3 -9
  40. package/utils/requestHandlers/tokens/CheMultiuserTokenHandler.ts +20 -18
  41. package/dist/utils/KeycloackUrlHandler.js +0 -30
  42. package/dist/utils/KeycloackUrlHandler.js.map +0 -1
  43. package/utils/KeycloackUrlHandler.ts +0 -32
@@ -43,7 +43,7 @@ const terminal: Terminal = e2eContainer.get(CLASSES.Terminal);
43
43
  const warningDialog: DialogWindow = e2eContainer.get(CLASSES.DialogWindow);
44
44
  const debugView: DebugView = e2eContainer.get(CLASSES.DebugView);
45
45
  const welcomeControllerJavaFileName: string = 'WelcomeController.java';
46
-
46
+ const factoryUrl : string = `${TestConstants.TS_SELENIUM_BASE_URL}/f?url=https://raw.githubusercontent.com/eclipse/che-devfile-registry/master/devfiles/java-maven/devfile.yaml`;
47
47
 
48
48
  const SpringAppLocators = {
49
49
  springTitleLocator: By.xpath('//div[@class=\'container-fluid\']//h2[text()=\'Welcome\']'),
@@ -55,7 +55,8 @@ const SpringAppLocators = {
55
55
 
56
56
  // this test checks only workspace created from "web-nodejs-sample" https://github.com/devfile/devworkspace-operator/blob/main/samples/flattened_theia-next.yaml.
57
57
  suite('Workspace creation via factory url', async () => {
58
- let factoryUrl : string = `${TestConstants.TS_SELENIUM_DEVWORKSPACE_URL}`;
58
+ // let factoryUrl : string = `${TestConstants.TS_SELENIUM_DEVWORKSPACE_URL}`;
59
+
59
60
  const workspaceRootFolderName: string = 'src';
60
61
 
61
62
  suite('Open factory URL', async () => {
@@ -76,139 +77,139 @@ suite('Workspace creation via factory url', async () => {
76
77
  await projectTree.waitProjectImported(projectName, workspaceRootFolderName);
77
78
  });
78
79
  });
79
- });
80
+ });
80
81
 
81
- suite('Language server validation', async () => {
82
- test('Java LS initialization', async () => {
83
- await projectTree.expandPathAndOpenFile(pathToJavaFolder, javaFileName);
84
- await editor.selectTab(javaFileName);
85
- try {
86
- await ide.checkLsInitializationStart('Activating Language Support for Java');
87
- await ide.waitStatusBarTextAbsence('Activating Language Support for Java', 900_000);
88
- } catch (err) {
89
- if (!(err instanceof error.TimeoutError)) {
90
- throw err;
91
- }
92
-
93
- console.log('Known flakiness has occurred https://github.com/eclipse/che/issues/17864');
94
- await ide.waitStatusBarContains('Activating Java Test Runner');
95
- await ide.waitStatusBarTextAbsence('Activating Java Test Runner', 900_000);
82
+ suite('Language server validation', async () => {
83
+ test('Java LS initialization', async () => {
84
+ await projectTree.expandPathAndOpenFile(pathToJavaFolder, javaFileName);
85
+ await editor.selectTab(javaFileName);
86
+ try {
87
+ await ide.checkLsInitializationStart('Activating Language Support for Java');
88
+ await ide.waitStatusBarTextAbsence('Activating Language Support for Java', 900_000);
89
+ } catch (err) {
90
+ if (!(err instanceof error.TimeoutError)) {
91
+ throw err;
96
92
  }
97
93
 
98
- await checkJavaPathCompletion();
99
- });
94
+ console.log('Known flakiness has occurred https://github.com/eclipse/che/issues/17864');
95
+ await ide.waitStatusBarContains('Activating Java Test Runner');
96
+ await ide.waitStatusBarTextAbsence('Activating Java Test Runner', 900_000);
97
+ }
100
98
 
101
- test('Autocomplete', async () => {
102
- await editor.moveCursorToLineAndChar(javaFileName, 32, 17);
103
- await editor.pressControlSpaceCombination(javaFileName);
104
- await editor.waitSuggestionContainer();
105
- await editor.waitSuggestion(javaFileName, 'SpringApplication - org.springframework.boot');
106
- });
99
+ await checkJavaPathCompletion();
100
+ });
107
101
 
108
- test('Error highlighting', async () => {
109
- await driverHelper.getDriver().sleep(TimeoutConstants.TS_SUGGESTION_TIMEOUT); // workaround https://github.com/eclipse/che/issues/19004
102
+ test('Autocomplete', async () => {
103
+ await editor.moveCursorToLineAndChar(javaFileName, 32, 17);
104
+ await editor.pressControlSpaceCombination(javaFileName);
105
+ await editor.waitSuggestionContainer();
106
+ await editor.waitSuggestion(javaFileName, 'SpringApplication - org.springframework.boot');
107
+ });
110
108
 
111
- const textForErrorDisplaying: string = '$';
112
- await editor.type(javaFileName, textForErrorDisplaying, 30);
109
+ test('Error highlighting', async () => {
110
+ await driverHelper.getDriver().sleep(TimeoutConstants.TS_SUGGESTION_TIMEOUT); // workaround https://github.com/eclipse/che/issues/19004
113
111
 
114
- try {
115
- await editor.waitErrorInLine(30, javaFileName, TimeoutConstants.TS_ERROR_HIGHLIGHTING_TIMEOUT);
116
- } catch (err) {
117
- Logger.debug('Workaround for the https://github.com/eclipse/che/issues/18974.');
118
- await browserTabsUtil.refreshPage();
119
- await ide.waitAndSwitchToIdeFrame();
120
- await ide.waitIde();
121
- await editor.waitErrorInLine(30, javaFileName, TimeoutConstants.TS_ERROR_HIGHLIGHTING_TIMEOUT * 2);
122
- }
123
- await editor.performKeyCombination(javaFileName, Key.chord(Key.BACK_SPACE));
124
- await editor.waitErrorInLineDisappearance(30, javaFileName);
125
- });
112
+ const textForErrorDisplaying: string = '$';
113
+ await editor.type(javaFileName, textForErrorDisplaying, 30);
126
114
 
127
- test('Suggestion', async () => {
128
- await editor.moveCursorToLineAndChar(javaFileName, 32, 21);
129
- await editor.pressControlSpaceCombination(javaFileName);
130
- await editor.waitSuggestionWithScrolling(javaFileName, 'run(Class<?> primarySource, String... args) : ConfigurableApplicationContext', 120_000);
131
- });
115
+ try {
116
+ await editor.waitErrorInLine(30, javaFileName, TimeoutConstants.TS_ERROR_HIGHLIGHTING_TIMEOUT);
117
+ } catch (err) {
118
+ Logger.debug('Workaround for the https://github.com/eclipse/che/issues/18974.');
119
+ await browserTabsUtil.refreshPage();
120
+ await ide.waitAndSwitchToIdeFrame();
121
+ await ide.waitIde();
122
+ await editor.waitErrorInLine(30, javaFileName, TimeoutConstants.TS_ERROR_HIGHLIGHTING_TIMEOUT * 2);
123
+ }
124
+ await editor.performKeyCombination(javaFileName, Key.chord(Key.BACK_SPACE));
125
+ await editor.waitErrorInLineDisappearance(30, javaFileName);
126
+ });
132
127
 
133
- test('Codenavigation', async () => {
134
- await editor.moveCursorToLineAndChar(javaFileName, 32, 17);
135
- await editor.performKeyCombination(javaFileName, Key.chord(Key.CONTROL, Key.F12));
136
- await editor.waitEditorAvailable(codeNavigationClassName, TimeoutConstants.TS_EDITOR_TAB_INTERACTION_TIMEOUT * 4);
137
- });
138
- });
139
- suite('Validation of workspace build and run', async () => {
140
- const mavenBuildTaskName: string = 'maven-build';
141
- const runAppTaskName: string = 'run-with-hsqldb';
142
- test('Build application', async () => {
143
- await topMenu.runTask(`${mavenBuildTaskName}, ${globalTaskScope}`);
144
- await terminal.waitIconSuccess(mavenBuildTaskName, 500_000);
145
- });
128
+ test('Suggestion', async () => {
129
+ await editor.moveCursorToLineAndChar(javaFileName, 32, 21);
130
+ await editor.pressControlSpaceCombination(javaFileName);
131
+ await editor.waitSuggestionWithScrolling(javaFileName, 'run(Class<?> primarySource, String... args) : ConfigurableApplicationContext', 120_000);
132
+ });
146
133
 
147
- test('Run application', async () => {
148
- await topMenu.runTask(`${runAppTaskName}, ${globalTaskScope}`);
149
- await ide.waitNotification('Process 8080-tcp is now listening on port 8080. Open it ?', 120_000);
150
- // devWs specific. After running test application we can open it just in the new window.
151
- // the preview widget is not available yet.
152
- await ide.clickOnNotificationButton('Process 8080-tcp is now listening on port 8080. Open it ?', 'Open In New Tab');
153
- });
154
- // this is DevWorkspace test specific since Theia does not provide yet preview as a widget
155
- test('Check the running application', async () => {
156
- await switchAppWindowAndCheck(SpringAppLocators.springTitleLocator);
157
- });
158
-
159
- test('Close the terminal running tasks', async () => {
160
- await terminal.rejectTerminalProcess(runAppTaskName);
161
- await terminal.closeTerminalTab(runAppTaskName);
162
- await warningDialog.waitAndCloseIfAppear();
163
- await terminal.closeTerminalTab(mavenBuildTaskName);
164
- });
134
+ test('Codenavigation', async () => {
135
+ await editor.moveCursorToLineAndChar(javaFileName, 32, 17);
136
+ await editor.performKeyCombination(javaFileName, Key.chord(Key.CONTROL, Key.F12));
137
+ await editor.waitEditorAvailable(codeNavigationClassName, TimeoutConstants.TS_EDITOR_TAB_INTERACTION_TIMEOUT * 4);
138
+ });
165
139
  });
166
140
 
167
- suite('Validation of debug functionality', async () => {
168
- let urlToPetClinicApp = '';
169
- test('Launch debug', async () => {
170
- const taskName: string = 'run-debug';
171
- await topMenu.runTask(`${taskName}, ${globalTaskScope}`);
172
- await ide.waitNotification('Process 8080-tcp is now listening on port 8080. Open it ?', 180_000);
173
- await ide.clickOnNotificationButton('Process 8080-tcp is now listening on port 8080. Open it ?', 'Open In New Tab');
174
- });
141
+ suite('Validation of workspace build and run', async () => {
142
+ const mavenBuildTaskName: string = 'maven-build';
143
+ const runAppTaskName: string = 'run-with-hsqldb';
144
+ test('Build application', async () => {
145
+ await topMenu.runTask(`${mavenBuildTaskName}, ${globalTaskScope}`);
146
+ await terminal.waitIconSuccess(mavenBuildTaskName, 500_000);
147
+ });
175
148
 
176
- test('Check content of the launched application', async () => {
177
- const mainWindowHandle: string = await browserTabsUtil.getCurrentWindowHandle();
178
- await browserTabsUtil.waitAndSwitchToAnotherWindow(mainWindowHandle, TimeoutConstants.TS_EDITOR_TAB_INTERACTION_TIMEOUT);
179
- urlToPetClinicApp = await browserTabsUtil.getCurrentUrl();
180
- await browserTabsUtil.switchToWindow(mainWindowHandle);
181
- });
149
+ test('Run application', async () => {
150
+ await topMenu.runTask(`${runAppTaskName}, ${globalTaskScope}`);
151
+ await ide.waitNotification('Process 8080-tcp is now listening on port 8080. Open it ?', 120_000);
152
+ // devWs specific. After running test application we can open it just in the new window.
153
+ // the preview widget is not available yet.
154
+ await ide.clickOnNotificationButton('Process 8080-tcp is now listening on port 8080. Open it ?', 'Open In New Tab');
155
+ });
156
+ // this is DevWorkspace test specific since Theia does not provide yet preview as a widget
157
+ test('Check the running application', async () => {
158
+ await switchAppWindowAndCheck(SpringAppLocators.springTitleLocator);
159
+ });
182
160
 
183
- test('Open debug view', async () => {
184
- await projectTree.expandPathAndOpenFile(pathToJavaFolder + '/system', welcomeControllerJavaFileName);
185
- await editor.selectTab(welcomeControllerJavaFileName);
186
- await topMenu.selectOption('View', 'Debug');
187
- await ide.waitLeftToolbarButton(LeftToolbarButton.Debug);
188
- });
161
+ test('Close the terminal running tasks', async () => {
162
+ await terminal.rejectTerminalProcess(runAppTaskName);
163
+ await terminal.closeTerminalTab(runAppTaskName);
164
+ await warningDialog.waitAndCloseIfAppear();
165
+ await terminal.closeTerminalTab(mavenBuildTaskName);
166
+ });
167
+ });
189
168
 
190
- test('Choose debug configuration', async () => {
191
- await debugView.clickOnDebugConfigurationDropDown();
192
- await debugView.clickOnDebugConfigurationItem('Debug (Attach) - Remote (java-spring-petclinic)');
193
- });
169
+ suite('Validation of debug functionality', async () => {
170
+ let urlToPetClinicApp = '';
171
+ test('Launch debug', async () => {
172
+ const taskName: string = 'run-debug';
173
+ await topMenu.runTask(`${taskName}, ${globalTaskScope}`);
174
+ await ide.waitNotification('Process 8080-tcp is now listening on port 8080. Open it ?', 180_000);
175
+ await ide.clickOnNotificationButton('Process 8080-tcp is now listening on port 8080. Open it ?', 'Open In New Tab');
176
+ });
194
177
 
195
- test('Run debug', async () => {
196
- await debugView.clickOnRunDebugButton();
197
- await waitDebugToConnect();
198
- });
178
+ test('Check content of the launched application', async () => {
179
+ const mainWindowHandle: string = await browserTabsUtil.getCurrentWindowHandle();
180
+ await browserTabsUtil.waitAndSwitchToAnotherWindow(mainWindowHandle, TimeoutConstants.TS_EDITOR_TAB_INTERACTION_TIMEOUT);
181
+ urlToPetClinicApp = await browserTabsUtil.getCurrentUrl();
182
+ await browserTabsUtil.switchToWindow(mainWindowHandle);
183
+ });
199
184
 
200
- test('Activate breakpoint', async () => {
201
- await editor.selectTab(welcomeControllerJavaFileName);
202
- await editor.activateBreakpoint(welcomeControllerJavaFileName, 27);
203
- });
185
+ test('Open debug view', async () => {
186
+ await projectTree.expandPathAndOpenFile(pathToJavaFolder + '/system', welcomeControllerJavaFileName);
187
+ await editor.selectTab(welcomeControllerJavaFileName);
188
+ await topMenu.selectOption('View', 'Debug');
189
+ await ide.waitLeftToolbarButton(LeftToolbarButton.Debug);
190
+ });
204
191
 
205
- test('Check debugger stop at the breakpoint', async () => {
206
- await sendRequestToDebugApp(urlToPetClinicApp);
207
- await waitStoppedBreakpoint(27);
208
- });
192
+ test('Choose debug configuration', async () => {
193
+ await debugView.clickOnDebugConfigurationDropDown();
194
+ await debugView.clickOnDebugConfigurationItem('Debug (Attach) - Remote (java-spring-petclinic)');
195
+ });
196
+
197
+ test('Run debug', async () => {
198
+ await debugView.clickOnRunDebugButton();
199
+ await waitDebugToConnect();
200
+ });
209
201
 
202
+ test('Activate breakpoint', async () => {
203
+ await editor.selectTab(welcomeControllerJavaFileName);
204
+ await editor.activateBreakpoint(welcomeControllerJavaFileName, 27);
210
205
  });
211
206
 
207
+ test('Check debugger stop at the breakpoint', async () => {
208
+ await sendRequestToDebugApp(urlToPetClinicApp);
209
+ await waitStoppedBreakpoint(27);
210
+ });
211
+ });
212
+
212
213
  async function checkJavaPathCompletion() {
213
214
  if (await ide.isNotificationPresent('Classpath is incomplete. Only syntax errors will be reported')) {
214
215
  const classpathText: string = fs.readFileSync('./files/happy-path/petclinic-classpath.txt', 'utf8');
@@ -268,17 +269,20 @@ async function waitStoppedBreakpoint(lineNumber: number) {
268
269
  // for avoiding this problem we send http request with axios and set the request timeout. We expect that request will fail with
269
270
  // timeout error, we check it in the catch block and wait breakpoint activating in the WebDriver after this.
270
271
  async function sendRequestToDebugApp(urlToApp: string) {
271
- const httpClient = axios.create();
272
- httpClient.defaults.timeout = 1000;
272
+ const httpClient = axios.create();
273
+ httpClient.defaults.timeout = 1000;
273
274
  try {
274
275
  await httpClient.get(urlToApp);
275
276
  } catch (error) {
276
- if (error.message === 'timeout of 1000ms exceeded') {
277
- console.log('>>>>The debugger is set >>>>>>>>>>>>>>>>>>> ' + error.message);
278
- } else { const {data} = await httpClient.get(urlToApp);
279
- console.log('>>>>>>>seems the app. is not set under debug properly: >>>>>>>>>>>>>>' + data);
280
- }
281
- }
277
+ if (error instanceof Error) {
278
+ if (error.message === 'timeout of 1000ms exceeded') {
279
+ console.log('>>>>The debugger is set >>>>>>>>>>>>>>>>>>> ' + error.message);
280
+ } else {
281
+ const {data} = await httpClient.get(urlToApp);
282
+ console.log('>>>>>>>seems the app. is not set under debug properly: >>>>>>>>>>>>>>' + data);
283
+ }
284
+ }
285
+ }
282
286
  }
283
287
 
284
288
  async function waitDebugToConnect() {
@@ -290,4 +294,3 @@ async function waitDebugToConnect() {
290
294
  await debugView.waitForDebuggerToConnect();
291
295
  }
292
296
  }
293
-
@@ -20,7 +20,6 @@ import { GitHubPullRequestPlugin } from '../../pageobjects/ide/plugins/GitHubPul
20
20
  import { GitLoginPage } from '../../pageobjects/third-parties/GitLoginPage';
21
21
  import { GitOauthAppsSettings } from '../../pageobjects/third-parties/GitOauthAppsSettings';
22
22
  import { WorkspaceNameHandler } from '../../utils/WorkspaceNameHandler';
23
- import { KeycloackUrlHandler } from '../../utils/KeycloackUrlHandler';
24
23
  import { GitPlugin } from '../../pageobjects/ide/plugins/GitPlugin';
25
24
  import { TopMenu } from '../../pageobjects/ide/TopMenu';
26
25
  import { QuickOpenContainer } from '../../pageobjects/ide/QuickOpenContainer';
@@ -48,6 +47,8 @@ const branchName: string = workspaceNameHandler.generateWorkspaceName('ghPrPlug
48
47
  const projectName: string = 'Spoon-Knife';
49
48
  const oAuthAppName: string = 'eclipse-che';
50
49
  const changedFile: string = 'README.md';
50
+ // added call back url, but needs to be re-verified
51
+ const identityCallbackUrl: string = `${TestConstants.TS_SELENIUM_BASE_URL}/api/oauth/callback`;
51
52
  const currentDate: string = Date.now().toString();
52
53
  let workspaceName: string;
53
54
 
@@ -66,7 +67,7 @@ suite(`The 'GitHubPullRequestPlugin' test`, async () => {
66
67
  await gitOauthAppsSettings.scrollToUpdateApplicationButton();
67
68
 
68
69
  await gitOauthAppsSettings.typeHomePageUrl(TestConstants.TS_SELENIUM_BASE_URL);
69
- await gitOauthAppsSettings.typeCallbackUrl(KeycloackUrlHandler.getIdentityCallbackUrl());
70
+ await gitOauthAppsSettings.typeCallbackUrl(identityCallbackUrl);
70
71
  await gitOauthAppsSettings.clickUpdateApplicationButton();
71
72
  });
72
73
  });
@@ -68,6 +68,7 @@ export class LanguageServerTests {
68
68
  await this.editor.pressControlSpaceCombination(openedTab);
69
69
  await this.editor.waitSuggestionContainer();
70
70
  await this.editor.waitSuggestionWithScrolling(openedTab, expectedText);
71
+ await this.editor.waitTabWithSavedStatus(openedTab);
71
72
  });
72
73
  }
73
74
 
@@ -15,6 +15,8 @@ import { Dashboard } from '../pageobjects/dashboard/Dashboard';
15
15
  import { CreateWorkspace } from '../pageobjects/dashboard/CreateWorkspace';
16
16
  import { Workspaces } from '../pageobjects/dashboard/Workspaces';
17
17
  import { WorkspaceNameHandler } from '../utils/WorkspaceNameHandler';
18
+ import { BrowserTabsUtil } from '../utils/BrowserTabsUtil';
19
+ import { Logger } from '..';
18
20
 
19
21
  @injectable()
20
22
  export class WorkspaceHandlingTests {
@@ -29,16 +31,21 @@ export class WorkspaceHandlingTests {
29
31
  @inject(CLASSES.Dashboard) private readonly dashboard: Dashboard,
30
32
  @inject(CLASSES.CreateWorkspace) private readonly createWorkspace: CreateWorkspace,
31
33
  @inject(CLASSES.Workspaces) private readonly workspaces: Workspaces,
32
- @inject(CLASSES.WorkspaceNameHandler) private readonly workspaceNameHandler: WorkspaceNameHandler) {}
34
+ @inject(CLASSES.WorkspaceNameHandler) private readonly workspaceNameHandler: WorkspaceNameHandler,
35
+ @inject(CLASSES.BrowserTabsUtil) private readonly browserTabsUtil: BrowserTabsUtil) {}
33
36
 
34
37
  public createAndOpenWorkspace(stack: string) {
35
38
  test(`Open 'New Workspace' page`, async () => {
36
39
  await this.dashboard.waitPage();
37
40
  await this.dashboard.clickCreateWorkspaceButton();
38
41
  await this.createWorkspace.waitPage();
42
+ const parentGUID = await this.browserTabsUtil.getCurrentWindowHandle();
39
43
  await this.createWorkspace.clickOnSample(stack);
40
- await this.dashboard.waitWorkspaceStartingPage();
41
- WorkspaceHandlingTests.workspaceName = await this.workspaceNameHandler.getNameFromUrl();
44
+ // WorkspaceHandlingTests.workspaceName = await this.workspaceNameHandler.getNameFromUrl();
45
+ await this.browserTabsUtil.switchToWindow(parentGUID);
46
+ WorkspaceHandlingTests.workspaceName = await this.dashboard.getRecentWorkspaceName(10000);
47
+ Logger.debug(`Workspace Name is: ${WorkspaceHandlingTests.workspaceName}`);
48
+ await this.browserTabsUtil.waitAndSwitchToAnotherWindow(parentGUID, 10000);
42
49
  });
43
50
  }
44
51
 
@@ -8,20 +8,14 @@
8
8
  * SPDX-License-Identifier: EPL-2.0
9
9
  **********************************************************************/
10
10
  import { AxiosRequestConfig } from 'axios';
11
-
12
- import { TYPES } from '../../../inversify.types';
13
11
  import { IAuthorizationHeaderHandler } from './IAuthorizationHeaderHandler';
14
- import { injectable, inject } from 'inversify';
15
- import { ITokenHandler } from '../tokens/ITokenHandler';
12
+ import { injectable } from 'inversify';
16
13
 
17
14
  @injectable()
18
15
  export class CheMultiuserAuthorizationHeaderHandler implements IAuthorizationHeaderHandler {
19
16
 
20
- constructor(@inject(TYPES.ITokenHandler) private readonly tokenHandler: ITokenHandler) {
21
- }
22
-
23
17
  async get(): Promise<AxiosRequestConfig> {
24
- const token = await this.tokenHandler.get();
25
- return { headers: { 'Authorization': `Bearer ${token}` } };
18
+ // to-do : Fetch the cookies from user api and pass it here
19
+ return { headers: { 'cookie': `` } };
26
20
  }
27
21
  }
@@ -12,28 +12,30 @@ import querystring from 'querystring';
12
12
  import { injectable } from 'inversify';
13
13
  import { TestConstants } from '../../../TestConstants';
14
14
  import { ITokenHandler } from './ITokenHandler';
15
- import { KeycloackUrlHandler } from '../../KeycloackUrlHandler';
15
+
16
16
 
17
17
  @injectable()
18
18
  export class CheMultiuserTokenHandler implements ITokenHandler {
19
- async get(): Promise<string> {
20
- const keycloakUrl = KeycloackUrlHandler.getTokenEndpointUrl();
21
-
22
- const params = {
23
- client_id: 'che-public',
24
- username: TestConstants.TS_SELENIUM_USERNAME,
25
- password: TestConstants.TS_SELENIUM_PASSWORD,
26
- grant_type: 'password'
27
- };
19
+ async get(): Promise<string> {
20
+ // to-do: Login to the che-dashboard and fetch the authorization related info
21
+ const keycloakUrl = '';
28
22
 
29
- try {
30
- const responseToObtainBearerToken = await axios.post(keycloakUrl, querystring.stringify(params));
31
- return responseToObtainBearerToken.data.access_token;
32
- } catch (err) {
33
- console.log(`Can not get bearer token. URL used: ${keycloakUrl}`);
34
- throw err;
35
- }
23
+ const params = {
24
+ client_id: 'che-public',
25
+ username: TestConstants.TS_SELENIUM_USERNAME,
26
+ password: TestConstants.TS_SELENIUM_PASSWORD,
27
+ grant_type: 'password',
28
+ };
36
29
 
30
+ try {
31
+ const responseToObtainBearerToken = await axios.post(
32
+ keycloakUrl,
33
+ querystring.stringify(params)
34
+ );
35
+ return responseToObtainBearerToken.data.access_token;
36
+ } catch (err) {
37
+ console.log(`Can not get bearer token. URL used: ${keycloakUrl}`);
38
+ throw err;
37
39
  }
38
-
40
+ }
39
41
  }
@@ -1,30 +0,0 @@
1
- "use strict";
2
- /*********************************************************************
3
- * Copyright (c) 2019 Red Hat, Inc.
4
- *
5
- * This program and the accompanying materials are made
6
- * available under the terms of the Eclipse Public License 2.0
7
- * which is available at https://www.eclipse.org/legal/epl-2.0/
8
- *
9
- * SPDX-License-Identifier: EPL-2.0
10
- **********************************************************************/
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.KeycloackUrlHandler = void 0;
13
- const TestConstants_1 = require("../TestConstants");
14
- class KeycloackUrlHandler {
15
- static getBaseKeycloakUrl() {
16
- let baseKeycloakUrl = TestConstants_1.TestConstants.TS_SELENIUM_BASE_URL;
17
- if (!TestConstants_1.TestConstants.TS_SELENIUM_SINGLE_HOST) {
18
- baseKeycloakUrl = baseKeycloakUrl.replace('che', 'keycloak');
19
- }
20
- return baseKeycloakUrl;
21
- }
22
- static getTokenEndpointUrl() {
23
- return `${this.getBaseKeycloakUrl()}/auth/realms/che/protocol/openid-connect/token`;
24
- }
25
- static getIdentityCallbackUrl() {
26
- return `${this.getBaseKeycloakUrl()}/auth/realms/che/broker/github/endpoint`;
27
- }
28
- }
29
- exports.KeycloackUrlHandler = KeycloackUrlHandler;
30
- //# sourceMappingURL=KeycloackUrlHandler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"KeycloackUrlHandler.js","sourceRoot":"","sources":["../../utils/KeycloackUrlHandler.ts"],"names":[],"mappings":";AAAA;;;;;;;;wEAQwE;;;AAExE,oDAAiD;AAEjD,MAAa,mBAAmB;IACrB,MAAM,CAAC,kBAAkB;QAC5B,IAAI,eAAe,GAAW,6BAAa,CAAC,oBAAoB,CAAC;QAEjE,IAAI,CAAC,6BAAa,CAAC,uBAAuB,EAAE;YACxC,eAAe,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;SAChE;QAED,OAAO,eAAe,CAAC;IAC3B,CAAC;IAEM,MAAM,CAAC,mBAAmB;QAC7B,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,gDAAgD,CAAC;IACxF,CAAC;IAEM,MAAM,CAAC,sBAAsB;QAChC,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,yCAAyC,CAAC;IACjF,CAAC;CAEJ;AAnBD,kDAmBC"}
@@ -1,32 +0,0 @@
1
- /*********************************************************************
2
- * Copyright (c) 2019 Red Hat, Inc.
3
- *
4
- * This program and the accompanying materials are made
5
- * available under the terms of the Eclipse Public License 2.0
6
- * which is available at https://www.eclipse.org/legal/epl-2.0/
7
- *
8
- * SPDX-License-Identifier: EPL-2.0
9
- **********************************************************************/
10
-
11
- import { TestConstants } from '../TestConstants';
12
-
13
- export class KeycloackUrlHandler {
14
- public static getBaseKeycloakUrl(): string {
15
- let baseKeycloakUrl: string = TestConstants.TS_SELENIUM_BASE_URL;
16
-
17
- if (!TestConstants.TS_SELENIUM_SINGLE_HOST) {
18
- baseKeycloakUrl = baseKeycloakUrl.replace('che', 'keycloak');
19
- }
20
-
21
- return baseKeycloakUrl;
22
- }
23
-
24
- public static getTokenEndpointUrl(): string {
25
- return `${this.getBaseKeycloakUrl()}/auth/realms/che/protocol/openid-connect/token`;
26
- }
27
-
28
- public static getIdentityCallbackUrl(): string {
29
- return `${this.getBaseKeycloakUrl()}/auth/realms/che/broker/github/endpoint`;
30
- }
31
-
32
- }