@eclipse-che/che-e2e 7.74.0-dev-1d09cb7 → 7.74.0-dev-41d1364
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintignore +10 -0
- package/.eslintrc.js +183 -0
- package/.prettierignore +10 -0
- package/.prettierrc.json +10 -0
- package/README.md +47 -47
- package/configs/inversify.config.ts +13 -9
- package/configs/inversify.types.ts +29 -29
- package/configs/mocharc.ts +21 -24
- package/constants/API_TEST_CONSTANTS.ts +67 -0
- package/constants/BASE_TEST_CONSTANTS.ts +80 -0
- package/constants/CHROME_DRIVER_CONSTANTS.ts +54 -0
- package/constants/FACTORY_TEST_CONSTANTS.ts +61 -0
- package/constants/MONACO_CONSTANTS.ts +25 -0
- package/constants/OAUTH_CONSTANTS.ts +67 -0
- package/constants/PLUGIN_TEST_CONSTANTS.ts +15 -0
- package/constants/REPORTER_CONSTANTS.ts +53 -0
- package/constants/TIMEOUT_CONSTANTS.ts +131 -0
- package/dist/configs/inversify.config.js +14 -8
- package/dist/configs/inversify.config.js.map +1 -1
- package/dist/configs/inversify.types.js +2 -2
- package/dist/configs/inversify.types.js.map +1 -1
- package/dist/configs/mocharc.js +13 -16
- package/dist/configs/mocharc.js.map +1 -1
- package/dist/constants/{APITestConstants.js → API_TEST_CONSTANTS.js} +12 -12
- package/dist/constants/API_TEST_CONSTANTS.js.map +1 -0
- package/dist/constants/{BaseTestConstants.js → BASE_TEST_CONSTANTS.js} +16 -16
- package/dist/constants/BASE_TEST_CONSTANTS.js.map +1 -0
- package/dist/constants/{ChromeDriverConstants.js → CHROME_DRIVER_CONSTANTS.js} +13 -13
- package/dist/constants/CHROME_DRIVER_CONSTANTS.js.map +1 -0
- package/dist/constants/{FactoryTestConstants.js → FACTORY_TEST_CONSTANTS.js} +14 -13
- package/dist/constants/FACTORY_TEST_CONSTANTS.js.map +1 -0
- package/dist/constants/{MonacoConstants.js → MONACO_CONSTANTS.js} +7 -7
- package/dist/constants/MONACO_CONSTANTS.js.map +1 -0
- package/dist/constants/{OAuthConstants.js → OAUTH_CONSTANTS.js} +14 -14
- package/dist/constants/OAUTH_CONSTANTS.js.map +1 -0
- package/dist/constants/{PluginsTestConstants.js → PLUGIN_TEST_CONSTANTS.js} +7 -7
- package/dist/constants/PLUGIN_TEST_CONSTANTS.js.map +1 -0
- package/dist/constants/{ReporterConstants.js → REPORTER_CONSTANTS.js} +12 -12
- package/dist/constants/REPORTER_CONSTANTS.js.map +1 -0
- package/dist/constants/{TimeoutConstants.js → TIMEOUT_CONSTANTS.js} +24 -24
- package/dist/constants/TIMEOUT_CONSTANTS.js.map +1 -0
- package/dist/driver/ChromeDriver.js +12 -16
- package/dist/driver/ChromeDriver.js.map +1 -1
- package/dist/index.js +9 -9
- package/dist/index.js.map +1 -1
- package/dist/pageobjects/dashboard/CreateWorkspace.js +11 -11
- package/dist/pageobjects/dashboard/CreateWorkspace.js.map +1 -1
- package/dist/pageobjects/dashboard/Dashboard.js +16 -16
- package/dist/pageobjects/dashboard/Dashboard.js.map +1 -1
- package/dist/pageobjects/dashboard/Workspaces.js +28 -28
- package/dist/pageobjects/dashboard/Workspaces.js.map +1 -1
- package/dist/pageobjects/dashboard/workspace-details/WorkspaceDetails.js +36 -25
- package/dist/pageobjects/dashboard/workspace-details/WorkspaceDetails.js.map +1 -1
- package/dist/pageobjects/git-providers/OauthPage.js +20 -18
- package/dist/pageobjects/git-providers/OauthPage.js.map +1 -1
- package/dist/pageobjects/ide/CheCodeLocatorLoader.js +9 -9
- package/dist/pageobjects/ide/CheCodeLocatorLoader.js.map +1 -1
- package/dist/pageobjects/login/interfaces/ICheLoginPage.js +2 -2
- package/dist/pageobjects/login/interfaces/IOcpLoginPage.js +2 -2
- package/dist/pageobjects/login/kubernetes/DexLoginPage.js +5 -5
- package/dist/pageobjects/login/kubernetes/DexLoginPage.js.map +1 -1
- package/dist/pageobjects/login/kubernetes/KubernetesLoginPage.js +5 -5
- package/dist/pageobjects/login/kubernetes/KubernetesLoginPage.js.map +1 -1
- package/dist/pageobjects/login/openshift/OcpLoginPage.js +13 -13
- package/dist/pageobjects/login/openshift/OcpLoginPage.js.map +1 -1
- package/dist/pageobjects/login/openshift/OcpRedHatLoginPage.js +5 -5
- package/dist/pageobjects/login/openshift/OcpRedHatLoginPage.js.map +1 -1
- package/dist/pageobjects/login/openshift/OcpUserLoginPage.js +6 -6
- package/dist/pageobjects/login/openshift/OcpUserLoginPage.js.map +1 -1
- package/dist/pageobjects/login/openshift/RedHatLoginPage.js +5 -5
- package/dist/pageobjects/login/openshift/RedHatLoginPage.js.map +1 -1
- package/dist/pageobjects/login/openshift/RegularUserOcpCheLoginPage.js +8 -8
- package/dist/pageobjects/login/openshift/RegularUserOcpCheLoginPage.js.map +1 -1
- package/dist/pageobjects/openshift/OcpApplicationPage.js +5 -5
- package/dist/pageobjects/openshift/OcpApplicationPage.js.map +1 -1
- package/dist/pageobjects/openshift/OcpImportFromGitPage.js +4 -4
- package/dist/pageobjects/openshift/OcpImportFromGitPage.js.map +1 -1
- package/dist/pageobjects/openshift/OcpMainPage.js +6 -6
- package/dist/pageobjects/openshift/OcpMainPage.js.map +1 -1
- package/dist/specs/MochaHooks.js +26 -23
- package/dist/specs/MochaHooks.js.map +1 -1
- package/dist/specs/SmokeTest.spec.js +11 -11
- package/dist/specs/SmokeTest.spec.js.map +1 -1
- package/dist/specs/api/ContainerOverridesAPI.spec.js +10 -1
- package/dist/specs/api/ContainerOverridesAPI.spec.js.map +1 -1
- package/dist/specs/api/DevfileAcceptanceTestAPI.spec.js +26 -15
- package/dist/specs/api/DevfileAcceptanceTestAPI.spec.js.map +1 -1
- package/dist/specs/api/EmptyWorkspaceAPI.spec.js +17 -11
- package/dist/specs/api/EmptyWorkspaceAPI.spec.js.map +1 -1
- package/dist/specs/api/PodOverridesAPI.spec.js +12 -3
- package/dist/specs/api/PodOverridesAPI.spec.js.map +1 -1
- package/dist/specs/dashboard-samples/EmptyWorkspace.spec.js +5 -5
- package/dist/specs/dashboard-samples/EmptyWorkspace.spec.js.map +1 -1
- package/dist/specs/dashboard-samples/Quarkus.spec.js +7 -7
- package/dist/specs/dashboard-samples/Quarkus.spec.js.map +1 -1
- package/dist/specs/dashboard-samples/RecommendedExtensions.spec.js +41 -41
- package/dist/specs/dashboard-samples/RecommendedExtensions.spec.js.map +1 -1
- package/dist/specs/devconsole-intergration/DevConsoleIntegration.spec.js +14 -9
- package/dist/specs/devconsole-intergration/DevConsoleIntegration.spec.js.map +1 -1
- package/dist/specs/factory/Factory.spec.js +25 -25
- package/dist/specs/factory/Factory.spec.js.map +1 -1
- package/dist/specs/factory/NoSetupRepoFactory.spec.js +37 -34
- package/dist/specs/factory/NoSetupRepoFactory.spec.js.map +1 -1
- package/dist/specs/factory/RefusedOAuthFactory.spec.js +33 -33
- package/dist/specs/factory/RefusedOAuthFactory.spec.js.map +1 -1
- package/dist/specs/miscellaneous/PredefinedNamespace.spec.js +12 -3
- package/dist/specs/miscellaneous/PredefinedNamespace.spec.js.map +1 -1
- package/dist/tests-library/LoginTests.js +7 -7
- package/dist/tests-library/LoginTests.js.map +1 -1
- package/dist/tests-library/ProjectAndFileTests.js +7 -5
- package/dist/tests-library/ProjectAndFileTests.js.map +1 -1
- package/dist/tests-library/WorkspaceHandlingTests.js +16 -13
- package/dist/tests-library/WorkspaceHandlingTests.js.map +1 -1
- package/dist/utils/BrowserTabsUtil.js +19 -14
- package/dist/utils/BrowserTabsUtil.js.map +1 -1
- package/dist/utils/CheReporter.js +44 -44
- package/dist/utils/CheReporter.js.map +1 -1
- package/dist/utils/DevWorkspaceConfigurationHelper.js +17 -8
- package/dist/utils/DevWorkspaceConfigurationHelper.js.map +1 -1
- package/dist/utils/DevfilesRegistryHelper.js +19 -13
- package/dist/utils/DevfilesRegistryHelper.js.map +1 -1
- package/dist/utils/DriverHelper.js +64 -66
- package/dist/utils/DriverHelper.js.map +1 -1
- package/dist/utils/KubernetesCommandLineToolsExecutor.js +28 -24
- package/dist/utils/KubernetesCommandLineToolsExecutor.js.map +1 -1
- package/dist/utils/Logger.js +18 -19
- package/dist/utils/Logger.js.map +1 -1
- package/dist/utils/ScreenCatcher.js +18 -12
- package/dist/utils/ScreenCatcher.js.map +1 -1
- package/dist/utils/ShellExecutor.js +9 -0
- package/dist/utils/ShellExecutor.js.map +1 -1
- package/dist/utils/StringUtil.js +15 -7
- package/dist/utils/StringUtil.js.map +1 -1
- package/dist/utils/request-handlers/CheApiRequestHandler.js +27 -27
- package/dist/utils/request-handlers/CheApiRequestHandler.js.map +1 -1
- package/dist/utils/request-handlers/headers/CheMultiuserAuthorizationHeaderHandler.js +10 -6
- package/dist/utils/request-handlers/headers/CheMultiuserAuthorizationHeaderHandler.js.map +1 -1
- package/dist/utils/request-handlers/headers/IAuthorizationHeaderHandler.js +2 -2
- package/dist/utils/workspace/ApiUrlResolver.js +3 -3
- package/dist/utils/workspace/ApiUrlResolver.js.map +1 -1
- package/dist/utils/workspace/ITestWorkspaceUtil.js +2 -2
- package/dist/utils/workspace/TestWorkspaceUtil.js +21 -19
- package/dist/utils/workspace/TestWorkspaceUtil.js.map +1 -1
- package/dist/utils/workspace/WorkspaceStatus.js +2 -2
- package/dist/utils/workspace/WorkspaceStatus.js.map +1 -1
- package/driver/ChromeDriver.ts +44 -50
- package/driver/IDriver.ts +3 -3
- package/index.ts +9 -9
- package/package.json +59 -49
- package/pageobjects/dashboard/CreateWorkspace.ts +64 -55
- package/pageobjects/dashboard/Dashboard.ts +101 -100
- package/pageobjects/dashboard/Workspaces.ts +196 -164
- package/pageobjects/dashboard/workspace-details/WorkspaceDetails.ts +150 -125
- package/pageobjects/git-providers/OauthPage.ts +177 -166
- package/pageobjects/ide/CheCodeLocatorLoader.ts +49 -46
- package/pageobjects/login/interfaces/ICheLoginPage.ts +3 -3
- package/pageobjects/login/interfaces/IOcpLoginPage.ts +3 -3
- package/pageobjects/login/kubernetes/DexLoginPage.ts +31 -30
- package/pageobjects/login/kubernetes/KubernetesLoginPage.ts +15 -14
- package/pageobjects/login/openshift/OcpLoginPage.ts +61 -54
- package/pageobjects/login/openshift/OcpRedHatLoginPage.ts +29 -24
- package/pageobjects/login/openshift/OcpUserLoginPage.ts +15 -18
- package/pageobjects/login/openshift/RedHatLoginPage.ts +48 -46
- package/pageobjects/login/openshift/RegularUserOcpCheLoginPage.ts +38 -34
- package/pageobjects/openshift/OcpApplicationPage.ts +21 -20
- package/pageobjects/openshift/OcpImportFromGitPage.ts +70 -68
- package/pageobjects/openshift/OcpMainPage.ts +69 -68
- package/specs/MochaHooks.ts +59 -50
- package/specs/SmokeTest.spec.ts +43 -40
- package/specs/api/ContainerOverridesAPI.spec.ts +33 -26
- package/specs/api/DevfileAcceptanceTestAPI.spec.ts +106 -95
- package/specs/api/EmptyWorkspaceAPI.spec.ts +62 -57
- package/specs/api/PodOverridesAPI.spec.ts +42 -33
- package/specs/dashboard-samples/EmptyWorkspace.spec.ts +31 -31
- package/specs/dashboard-samples/Quarkus.spec.ts +34 -34
- package/specs/dashboard-samples/RecommendedExtensions.spec.ts +192 -174
- package/specs/devconsole-intergration/DevConsoleIntegration.spec.ts +61 -52
- package/specs/factory/Factory.spec.ts +178 -168
- package/specs/factory/NoSetupRepoFactory.spec.ts +226 -211
- package/specs/factory/RefusedOAuthFactory.spec.ts +218 -204
- package/specs/miscellaneous/PredefinedNamespace.spec.ts +64 -54
- package/tests-library/LoginTests.ts +34 -32
- package/tests-library/ProjectAndFileTests.ts +21 -18
- package/tests-library/WorkspaceHandlingTests.ts +98 -89
- package/tsconfig.json +15 -15
- package/utils/BrowserTabsUtil.ts +103 -97
- package/utils/CheReporter.ts +141 -145
- package/utils/DevWorkspaceConfigurationHelper.ts +70 -61
- package/utils/DevfilesRegistryHelper.ts +67 -58
- package/utils/DriverHelper.ts +726 -700
- package/utils/KubernetesCommandLineToolsExecutor.ts +196 -180
- package/utils/Logger.ts +102 -125
- package/utils/ScreenCatcher.ts +57 -46
- package/utils/ShellExecutor.ts +19 -11
- package/utils/StringUtil.ts +40 -32
- package/utils/request-handlers/CheApiRequestHandler.ts +91 -88
- package/utils/request-handlers/headers/CheMultiuserAuthorizationHeaderHandler.ts +32 -21
- package/utils/request-handlers/headers/IAuthorizationHeaderHandler.ts +3 -3
- package/utils/workspace/ApiUrlResolver.ts +31 -26
- package/utils/workspace/ITestWorkspaceUtil.ts +31 -31
- package/utils/workspace/TestWorkspaceUtil.ts +152 -145
- package/utils/workspace/WorkspaceStatus.ts +5 -5
- package/constants/APITestConstants.ts +0 -57
- package/constants/BaseTestConstants.ts +0 -68
- package/constants/ChromeDriverConstants.ts +0 -46
- package/constants/FactoryTestConstants.ts +0 -51
- package/constants/MonacoConstants.ts +0 -22
- package/constants/OAuthConstants.ts +0 -57
- package/constants/PluginsTestConstants.ts +0 -15
- package/constants/ReporterConstants.ts +0 -45
- package/constants/TimeoutConstants.ts +0 -113
- package/dist/constants/APITestConstants.js.map +0 -1
- package/dist/constants/BaseTestConstants.js.map +0 -1
- package/dist/constants/ChromeDriverConstants.js.map +0 -1
- package/dist/constants/FactoryTestConstants.js.map +0 -1
- package/dist/constants/MonacoConstants.js.map +0 -1
- package/dist/constants/OAuthConstants.js.map +0 -1
- package/dist/constants/PluginsTestConstants.js.map +0 -1
- package/dist/constants/ReporterConstants.js.map +0 -1
- package/dist/constants/TimeoutConstants.js.map +0 -1
- package/tslint.json +0 -126
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
*
|
|
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,138 +14,163 @@ import 'reflect-metadata';
|
|
|
14
14
|
import { By } from 'selenium-webdriver';
|
|
15
15
|
import { WorkspaceStatus } from '../../../utils/workspace/WorkspaceStatus';
|
|
16
16
|
import { Logger } from '../../../utils/Logger';
|
|
17
|
-
import {
|
|
17
|
+
import { TIMEOUT_CONSTANTS } from '../../../constants/TIMEOUT_CONSTANTS';
|
|
18
18
|
import { ITestWorkspaceUtil } from '../../../utils/workspace/ITestWorkspaceUtil';
|
|
19
19
|
import { ProjectAndFileTests } from '../../../tests-library/ProjectAndFileTests';
|
|
20
20
|
|
|
21
21
|
@injectable()
|
|
22
22
|
export class WorkspaceDetails {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
private static readonly RUN_BUTTON_CSS: string = '#run-workspace-button[che-button-title="Run"]';
|
|
24
|
+
private static readonly OPEN_BUTTON_CSS: string = '#open-in-ide-button[che-button-title="Open"]';
|
|
25
|
+
private static readonly SAVE_BUTTON_CSS: string = 'button[name="save-button"]';
|
|
26
|
+
private static readonly ENABLED_SAVE_BUTTON_CSS: string = 'button[name="save-button"][aria-disabled="false"]';
|
|
27
|
+
private static readonly WORKSPACE_DETAILS_LOADER_CSS: string = 'workspace-details-overview md-progress-linear';
|
|
28
|
+
|
|
29
|
+
constructor(
|
|
30
|
+
@inject(CLASSES.DriverHelper)
|
|
31
|
+
private readonly driverHelper: DriverHelper,
|
|
32
|
+
@inject(TYPES.WorkspaceUtil)
|
|
33
|
+
private readonly testWorkspaceUtil: ITestWorkspaceUtil,
|
|
34
|
+
@inject(CLASSES.ProjectAndFileTests)
|
|
35
|
+
private readonly testProjectAndFileCheCode: ProjectAndFileTests
|
|
36
|
+
) {}
|
|
37
|
+
|
|
38
|
+
async waitLoaderDisappearance(
|
|
39
|
+
attempts: number = TIMEOUT_CONSTANTS.TS_SELENIUM_DEFAULT_ATTEMPTS,
|
|
40
|
+
polling: number = TIMEOUT_CONSTANTS.TS_SELENIUM_DEFAULT_POLLING
|
|
41
|
+
): Promise<void> {
|
|
42
|
+
Logger.debug();
|
|
43
|
+
|
|
44
|
+
await this.driverHelper.waitDisappearance(By.css(WorkspaceDetails.WORKSPACE_DETAILS_LOADER_CSS), attempts, polling);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
async saveChanges(): Promise<void> {
|
|
48
|
+
Logger.debug();
|
|
49
|
+
|
|
50
|
+
await this.waitSaveButton();
|
|
51
|
+
await this.clickOnSaveButton();
|
|
52
|
+
await this.waitSaveButtonDisappearance();
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
async waitPage(workspaceName: string, timeout: number = TIMEOUT_CONSTANTS.TS_SELENIUM_LOAD_PAGE_TIMEOUT): Promise<void> {
|
|
56
|
+
Logger.debug(`workspace: "${workspaceName}"`);
|
|
57
|
+
|
|
58
|
+
await this.waitWorkspaceTitle(workspaceName, timeout);
|
|
59
|
+
await this.waitOpenButton(timeout);
|
|
60
|
+
await this.waitRunButton(timeout);
|
|
61
|
+
await this.waitTabsPresence(timeout);
|
|
62
|
+
await this.waitLoaderDisappearance(timeout);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
async waitWorkspaceTitle(workspaceName: string, timeout: number = TIMEOUT_CONSTANTS.TS_COMMON_DASHBOARD_WAIT_TIMEOUT): Promise<void> {
|
|
66
|
+
Logger.debug(`title: "${workspaceName}"`);
|
|
67
|
+
|
|
68
|
+
const workspaceTitleLocator: By = By.css(this.getWorkspaceTitleCssLocator(workspaceName));
|
|
69
|
+
|
|
70
|
+
await this.driverHelper.waitVisibility(workspaceTitleLocator, timeout);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
async waitRunButton(timeout: number = TIMEOUT_CONSTANTS.TS_COMMON_DASHBOARD_WAIT_TIMEOUT): Promise<void> {
|
|
74
|
+
Logger.debug();
|
|
75
|
+
|
|
76
|
+
await this.driverHelper.waitVisibility(By.css(WorkspaceDetails.RUN_BUTTON_CSS), timeout);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
async clickOnRunButton(timeout: number = TIMEOUT_CONSTANTS.TS_CLICK_DASHBOARD_ITEM_TIMEOUT): Promise<void> {
|
|
80
|
+
Logger.debug();
|
|
81
|
+
|
|
82
|
+
await this.driverHelper.waitAndClick(By.css(WorkspaceDetails.RUN_BUTTON_CSS), timeout);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
async waitOpenButton(timeout: number = TIMEOUT_CONSTANTS.TS_COMMON_DASHBOARD_WAIT_TIMEOUT): Promise<void> {
|
|
86
|
+
Logger.debug();
|
|
87
|
+
|
|
88
|
+
await this.driverHelper.waitVisibility(By.css(WorkspaceDetails.OPEN_BUTTON_CSS), timeout);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
async openWorkspace(
|
|
92
|
+
namespace: string,
|
|
93
|
+
workspaceName: string,
|
|
94
|
+
timeout: number = TIMEOUT_CONSTANTS.TS_SELENIUM_LOAD_PAGE_TIMEOUT
|
|
95
|
+
): Promise<void> {
|
|
96
|
+
Logger.debug(`"${namespace}/${workspaceName}"`);
|
|
97
|
+
|
|
98
|
+
await this.clickOnOpenButton(timeout);
|
|
99
|
+
await this.testProjectAndFileCheCode.waitWorkspaceReadinessForCheCodeEditor();
|
|
100
|
+
// await
|
|
101
|
+
this.testWorkspaceUtil.waitWorkspaceStatus(namespace, workspaceName, WorkspaceStatus.STARTING);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
async waitTabsPresence(timeout: number = TIMEOUT_CONSTANTS.TS_COMMON_DASHBOARD_WAIT_TIMEOUT): Promise<void> {
|
|
105
|
+
Logger.debug('WorkspaceDetails.waitTabsPresence');
|
|
106
|
+
|
|
107
|
+
const workspaceDetailsTabs: Array<string> = [
|
|
108
|
+
'Overview',
|
|
109
|
+
'Projects',
|
|
110
|
+
'Containers',
|
|
111
|
+
'Servers',
|
|
112
|
+
'Env Variables',
|
|
113
|
+
'Volumes',
|
|
114
|
+
'Config',
|
|
115
|
+
'SSH',
|
|
116
|
+
'Plugins',
|
|
117
|
+
'Editors'
|
|
118
|
+
];
|
|
119
|
+
|
|
120
|
+
for (const tabTitle of workspaceDetailsTabs) {
|
|
121
|
+
const workspaceDetailsTabLocator: By = By.xpath(this.getTabXpathLocator(tabTitle));
|
|
122
|
+
|
|
123
|
+
await this.driverHelper.waitVisibility(workspaceDetailsTabLocator, timeout);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
async selectTab(tabTitle: string, timeout: number = TIMEOUT_CONSTANTS.TS_COMMON_DASHBOARD_WAIT_TIMEOUT): Promise<void> {
|
|
128
|
+
Logger.debug(`WorkspaceDetails.selectTab ${tabTitle}`);
|
|
129
|
+
|
|
130
|
+
await this.clickOnTab(tabTitle, timeout);
|
|
131
|
+
await this.waitTabSelected(tabTitle, timeout);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
private getWorkspaceTitleCssLocator(workspaceName: string): string {
|
|
135
|
+
return `che-row-toolbar[che-title='${workspaceName}']`;
|
|
136
|
+
}
|
|
28
137
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
138
|
+
private getTabXpathLocator(tabTitle: string): string {
|
|
139
|
+
return `//md-tabs-canvas//md-tab-item//span[text()='${tabTitle}']`;
|
|
140
|
+
}
|
|
32
141
|
|
|
33
|
-
|
|
34
|
-
|
|
142
|
+
private getSelectedTabXpathLocator(tabTitle: string): string {
|
|
143
|
+
return `//md-tabs-canvas[@role='tablist']//md-tab-item[@aria-selected='true']//span[text()='${tabTitle}']`;
|
|
144
|
+
}
|
|
35
145
|
|
|
36
|
-
|
|
37
|
-
|
|
146
|
+
private async waitSaveButton(timeout: number = TIMEOUT_CONSTANTS.TS_COMMON_DASHBOARD_WAIT_TIMEOUT): Promise<void> {
|
|
147
|
+
await this.driverHelper.waitVisibility(By.css(WorkspaceDetails.ENABLED_SAVE_BUTTON_CSS), timeout);
|
|
148
|
+
}
|
|
38
149
|
|
|
39
|
-
|
|
40
|
-
|
|
150
|
+
private async waitSaveButtonDisappearance(
|
|
151
|
+
attempts: number = TIMEOUT_CONSTANTS.TS_SELENIUM_DEFAULT_ATTEMPTS,
|
|
152
|
+
polling: number = TIMEOUT_CONSTANTS.TS_SELENIUM_DEFAULT_POLLING
|
|
153
|
+
): Promise<void> {
|
|
154
|
+
await this.driverHelper.waitDisappearance(By.css(WorkspaceDetails.SAVE_BUTTON_CSS), attempts, polling);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
private async clickOnSaveButton(timeout: number = TIMEOUT_CONSTANTS.TS_CLICK_DASHBOARD_ITEM_TIMEOUT): Promise<void> {
|
|
158
|
+
await this.driverHelper.waitAndClick(By.css(WorkspaceDetails.ENABLED_SAVE_BUTTON_CSS), timeout);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
private async clickOnOpenButton(timeout: number = TIMEOUT_CONSTANTS.TS_CLICK_DASHBOARD_ITEM_TIMEOUT): Promise<void> {
|
|
162
|
+
await this.driverHelper.waitAndClick(By.css(WorkspaceDetails.OPEN_BUTTON_CSS), timeout);
|
|
163
|
+
}
|
|
41
164
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
await this.waitSaveButtonDisappearance();
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
async waitPage(workspaceName: string, timeout: number = TimeoutConstants.TS_SELENIUM_LOAD_PAGE_TIMEOUT): Promise<void> {
|
|
48
|
-
Logger.debug(`workspace: "${workspaceName}"`);
|
|
49
|
-
|
|
50
|
-
await this.waitWorkspaceTitle(workspaceName, timeout);
|
|
51
|
-
await this.waitOpenButton(timeout);
|
|
52
|
-
await this.waitRunButton(timeout);
|
|
53
|
-
await this.waitTabsPresence(timeout);
|
|
54
|
-
await this.waitLoaderDisappearance(timeout);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
async waitWorkspaceTitle(workspaceName: string, timeout: number = TimeoutConstants.TS_COMMON_DASHBOARD_WAIT_TIMEOUT): Promise<void> {
|
|
58
|
-
Logger.debug(`title: "${workspaceName}"`);
|
|
59
|
-
|
|
60
|
-
const workspaceTitleLocator: By = By.css(this.getWorkspaceTitleCssLocator(workspaceName));
|
|
61
|
-
|
|
62
|
-
await this.driverHelper.waitVisibility(workspaceTitleLocator, timeout);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
async waitRunButton(timeout: number = TimeoutConstants.TS_COMMON_DASHBOARD_WAIT_TIMEOUT): Promise<void> {
|
|
66
|
-
Logger.debug();
|
|
67
|
-
|
|
68
|
-
await this.driverHelper.waitVisibility(By.css(WorkspaceDetails.RUN_BUTTON_CSS), timeout);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
async clickOnRunButton(timeout: number = TimeoutConstants.TS_CLICK_DASHBOARD_ITEM_TIMEOUT): Promise<void> {
|
|
72
|
-
Logger.debug();
|
|
73
|
-
|
|
74
|
-
await this.driverHelper.waitAndClick(By.css(WorkspaceDetails.RUN_BUTTON_CSS), timeout);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
async waitOpenButton(timeout: number = TimeoutConstants.TS_COMMON_DASHBOARD_WAIT_TIMEOUT): Promise<void> {
|
|
78
|
-
Logger.debug();
|
|
79
|
-
|
|
80
|
-
await this.driverHelper.waitVisibility(By.css(WorkspaceDetails.OPEN_BUTTON_CSS), timeout);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
async openWorkspace(namespace: string, workspaceName: string, timeout: number = TimeoutConstants.TS_SELENIUM_LOAD_PAGE_TIMEOUT): Promise<void> {
|
|
84
|
-
Logger.debug(`"${namespace}/${workspaceName}"`);
|
|
85
|
-
|
|
86
|
-
await this.clickOnOpenButton(timeout);
|
|
87
|
-
await this.testProjectAndFileCheCode.waitWorkspaceReadinessForCheCodeEditor();
|
|
88
|
-
await this.testWorkspaceUtil.waitWorkspaceStatus(namespace, workspaceName, WorkspaceStatus.STARTING);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
async waitTabsPresence(timeout: number = TimeoutConstants.TS_COMMON_DASHBOARD_WAIT_TIMEOUT): Promise<void> {
|
|
92
|
-
Logger.debug('WorkspaceDetails.waitTabsPresence');
|
|
93
|
-
|
|
94
|
-
const workspaceDetailsTabs: Array<string> = ['Overview', 'Projects', 'Containers', 'Servers',
|
|
95
|
-
'Env Variables', 'Volumes', 'Config', 'SSH', 'Plugins', 'Editors'];
|
|
96
|
-
|
|
97
|
-
for (const tabTitle of workspaceDetailsTabs) {
|
|
98
|
-
const workspaceDetailsTabLocator: By = By.xpath(this.getTabXpathLocator(tabTitle));
|
|
99
|
-
|
|
100
|
-
await this.driverHelper.waitVisibility(workspaceDetailsTabLocator, timeout);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
async selectTab(tabTitle: string, timeout: number = TimeoutConstants.TS_COMMON_DASHBOARD_WAIT_TIMEOUT): Promise<void> {
|
|
105
|
-
Logger.debug(`WorkspaceDetails.selectTab ${tabTitle}`);
|
|
106
|
-
|
|
107
|
-
await this.clickOnTab(tabTitle, timeout);
|
|
108
|
-
await this.waitTabSelected(tabTitle, timeout);
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
private getWorkspaceTitleCssLocator(workspaceName: string): string {
|
|
112
|
-
return `che-row-toolbar[che-title='${workspaceName}']`;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
private getTabXpathLocator(tabTitle: string): string {
|
|
116
|
-
return `//md-tabs-canvas//md-tab-item//span[text()='${tabTitle}']`;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
private getSelectedTabXpathLocator(tabTitle: string): string {
|
|
120
|
-
return `//md-tabs-canvas[@role='tablist']//md-tab-item[@aria-selected='true']//span[text()='${tabTitle}']`;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
private async waitSaveButton(timeout: number = TimeoutConstants.TS_COMMON_DASHBOARD_WAIT_TIMEOUT): Promise<void> {
|
|
124
|
-
await this.driverHelper.waitVisibility(By.css(WorkspaceDetails.ENABLED_SAVE_BUTTON_CSS), timeout);
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
private async waitSaveButtonDisappearance(attempts: number = TimeoutConstants.TS_SELENIUM_DEFAULT_ATTEMPTS, polling: number = TimeoutConstants.TS_SELENIUM_DEFAULT_POLLING): Promise<void> {
|
|
128
|
-
await this.driverHelper.waitDisappearance(By.css(WorkspaceDetails.SAVE_BUTTON_CSS), attempts, polling);
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
private async clickOnSaveButton(timeout: number = TimeoutConstants.TS_CLICK_DASHBOARD_ITEM_TIMEOUT): Promise<void> {
|
|
132
|
-
await this.driverHelper.waitAndClick(By.css(WorkspaceDetails.ENABLED_SAVE_BUTTON_CSS), timeout);
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
private async clickOnOpenButton(timeout: number = TimeoutConstants.TS_CLICK_DASHBOARD_ITEM_TIMEOUT): Promise<void> {
|
|
136
|
-
await this.driverHelper.waitAndClick(By.css(WorkspaceDetails.OPEN_BUTTON_CSS), timeout);
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
private async clickOnTab(tabTitle: string, timeout: number = TimeoutConstants.TS_CLICK_DASHBOARD_ITEM_TIMEOUT): Promise<void> {
|
|
140
|
-
const workspaceDetailsTabLocator: By = By.xpath(this.getTabXpathLocator(tabTitle));
|
|
141
|
-
|
|
142
|
-
await this.driverHelper.waitAndClick(workspaceDetailsTabLocator, timeout);
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
private async waitTabSelected(tabTitle: string, timeout: number = TimeoutConstants.TS_COMMON_DASHBOARD_WAIT_TIMEOUT): Promise<void> {
|
|
146
|
-
const selectedTabLocator: By = By.xpath(this.getSelectedTabXpathLocator(tabTitle));
|
|
147
|
-
|
|
148
|
-
await this.driverHelper.waitVisibility(selectedTabLocator, timeout);
|
|
149
|
-
}
|
|
165
|
+
private async clickOnTab(tabTitle: string, timeout: number = TIMEOUT_CONSTANTS.TS_CLICK_DASHBOARD_ITEM_TIMEOUT): Promise<void> {
|
|
166
|
+
const workspaceDetailsTabLocator: By = By.xpath(this.getTabXpathLocator(tabTitle));
|
|
150
167
|
|
|
168
|
+
await this.driverHelper.waitAndClick(workspaceDetailsTabLocator, timeout);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
private async waitTabSelected(tabTitle: string, timeout: number = TIMEOUT_CONSTANTS.TS_COMMON_DASHBOARD_WAIT_TIMEOUT): Promise<void> {
|
|
172
|
+
const selectedTabLocator: By = By.xpath(this.getSelectedTabXpathLocator(tabTitle));
|
|
173
|
+
|
|
174
|
+
await this.driverHelper.waitVisibility(selectedTabLocator, timeout);
|
|
175
|
+
}
|
|
151
176
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
*
|
|
1
|
+
/** *******************************************************************
|
|
2
|
+
* copyright (c) 2019 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,171 +12,182 @@ import { By } from 'selenium-webdriver';
|
|
|
12
12
|
import { CLASSES } from '../../configs/inversify.types';
|
|
13
13
|
import { DriverHelper } from '../../utils/DriverHelper';
|
|
14
14
|
import { Logger } from '../../utils/Logger';
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
15
|
+
import { TIMEOUT_CONSTANTS } from '../../constants/TIMEOUT_CONSTANTS';
|
|
16
|
+
import { FACTORY_TEST_CONSTANTS, GitProviderType } from '../../constants/FACTORY_TEST_CONSTANTS';
|
|
17
|
+
import { OAUTH_CONSTANTS } from '../../constants/OAUTH_CONSTANTS';
|
|
18
18
|
|
|
19
19
|
@injectable()
|
|
20
20
|
export class OauthPage {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
21
|
+
private static LOGIN_FORM: By;
|
|
22
|
+
private static PASSWORD_FORM: By;
|
|
23
|
+
private static SUBMIT_BUTTON: By;
|
|
24
|
+
private static APPROVE_BUTTON: By;
|
|
25
|
+
private static DENY_ACCESS_BUTTON: By;
|
|
26
|
+
private static DENY_SAVE_CREDENTIALS_BUTTON: By;
|
|
27
|
+
|
|
28
|
+
constructor(
|
|
29
|
+
@inject(CLASSES.DriverHelper)
|
|
30
|
+
private readonly driverHelper: DriverHelper
|
|
31
|
+
) {
|
|
32
|
+
switch (FACTORY_TEST_CONSTANTS.TS_SELENIUM_FACTORY_GIT_PROVIDER) {
|
|
33
|
+
case GitProviderType.BITBUCKET:
|
|
34
|
+
{
|
|
35
|
+
OauthPage.LOGIN_FORM = By.id('j_username');
|
|
36
|
+
OauthPage.PASSWORD_FORM = By.id('j_password');
|
|
37
|
+
OauthPage.APPROVE_BUTTON = By.id('approve');
|
|
38
|
+
OauthPage.SUBMIT_BUTTON = By.id('submit');
|
|
39
|
+
OauthPage.DENY_ACCESS_BUTTON = By.id('deny');
|
|
40
|
+
}
|
|
41
|
+
break;
|
|
42
|
+
case GitProviderType.GITLAB:
|
|
43
|
+
{
|
|
44
|
+
OauthPage.LOGIN_FORM = By.id('user_login');
|
|
45
|
+
OauthPage.PASSWORD_FORM = By.id('user_password');
|
|
46
|
+
OauthPage.SUBMIT_BUTTON = By.xpath('//button[@data-qa-selector="sign_in_button"]');
|
|
47
|
+
OauthPage.APPROVE_BUTTON = By.xpath('//*[@value="Authorize"]');
|
|
48
|
+
OauthPage.DENY_ACCESS_BUTTON = By.xpath('//input[@value="Deny"]');
|
|
49
|
+
}
|
|
50
|
+
break;
|
|
51
|
+
case GitProviderType.GITHUB:
|
|
52
|
+
{
|
|
53
|
+
OauthPage.LOGIN_FORM = By.id('login_field');
|
|
54
|
+
OauthPage.PASSWORD_FORM = By.id('password');
|
|
55
|
+
OauthPage.APPROVE_BUTTON = By.xpath('//*[@id="js-oauth-authorize-btn"]');
|
|
56
|
+
OauthPage.SUBMIT_BUTTON = By.xpath('//*[@value="Sign in"]');
|
|
57
|
+
OauthPage.DENY_ACCESS_BUTTON = By.xpath('//button[contains(., "Cancel")]');
|
|
58
|
+
}
|
|
59
|
+
break;
|
|
60
|
+
case GitProviderType.AZURE_DEVOPS:
|
|
61
|
+
{
|
|
62
|
+
OauthPage.LOGIN_FORM = By.xpath('//input[@type="email"]');
|
|
63
|
+
OauthPage.PASSWORD_FORM = By.xpath('//input[@type="password"]');
|
|
64
|
+
OauthPage.APPROVE_BUTTON = By.id('accept-button');
|
|
65
|
+
OauthPage.SUBMIT_BUTTON = By.xpath('//input[@type="submit"]');
|
|
66
|
+
OauthPage.DENY_SAVE_CREDENTIALS_BUTTON = By.xpath('//input[@type="button"]');
|
|
67
|
+
OauthPage.DENY_ACCESS_BUTTON = By.id('deny-button');
|
|
68
|
+
}
|
|
69
|
+
break;
|
|
70
|
+
default: {
|
|
71
|
+
throw new Error(
|
|
72
|
+
`Invalid git provider. The value should be ${GitProviderType.GITHUB}, ${GitProviderType.GITLAB}, ${GitProviderType.AZURE_DEVOPS} or ${GitProviderType.BITBUCKET}`
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
async waitLoginPage(): Promise<void> {
|
|
79
|
+
Logger.debug();
|
|
80
|
+
|
|
81
|
+
await this.driverHelper.waitVisibility(OauthPage.LOGIN_FORM, TIMEOUT_CONSTANTS.TS_SELENIUM_CLICK_ON_VISIBLE_ITEM * 3);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
async enterUserName(userName: string): Promise<void> {
|
|
85
|
+
Logger.debug(`"${userName}"`);
|
|
86
|
+
|
|
87
|
+
await this.driverHelper.enterValue(OauthPage.LOGIN_FORM, userName);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
async enterPassword(password: string): Promise<void> {
|
|
91
|
+
Logger.debug();
|
|
92
|
+
|
|
93
|
+
await this.driverHelper.enterValue(OauthPage.PASSWORD_FORM, password);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
async clickOnSubmitButton(): Promise<void> {
|
|
97
|
+
Logger.debug();
|
|
98
|
+
|
|
99
|
+
await this.driverHelper.waitAndClick(OauthPage.SUBMIT_BUTTON);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
async clickOnNotRememberCredentialsButton(): Promise<void> {
|
|
103
|
+
Logger.debug();
|
|
104
|
+
|
|
105
|
+
await this.driverHelper.waitAndClick(OauthPage.DENY_SAVE_CREDENTIALS_BUTTON);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
async waitClosingLoginPage(): Promise<void> {
|
|
109
|
+
Logger.debug();
|
|
110
|
+
|
|
111
|
+
await this.driverHelper.waitDisappearance(OauthPage.PASSWORD_FORM);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
async waitOauthPage(): Promise<void> {
|
|
115
|
+
Logger.debug();
|
|
116
|
+
|
|
117
|
+
await this.driverHelper.waitVisibility(OauthPage.APPROVE_BUTTON);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
async clickOnApproveButton(): Promise<void> {
|
|
121
|
+
Logger.debug();
|
|
122
|
+
|
|
123
|
+
await this.driverHelper.waitAndClick(OauthPage.APPROVE_BUTTON);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
async clickOnDenyAccessButton(): Promise<void> {
|
|
127
|
+
Logger.debug();
|
|
128
|
+
|
|
129
|
+
await this.driverHelper.waitAndClick(OauthPage.DENY_ACCESS_BUTTON);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
async waitDisappearanceOauthPage(): Promise<void> {
|
|
133
|
+
Logger.debug();
|
|
134
|
+
|
|
135
|
+
await this.driverHelper.waitDisappearance(OauthPage.APPROVE_BUTTON);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
async login(): Promise<void> {
|
|
139
|
+
Logger.debug();
|
|
140
|
+
|
|
141
|
+
await this.waitLoginPage();
|
|
142
|
+
await this.enterUserName(OAUTH_CONSTANTS.TS_SELENIUM_GIT_PROVIDER_USERNAME);
|
|
143
|
+
if (FACTORY_TEST_CONSTANTS.TS_SELENIUM_FACTORY_GIT_PROVIDER === GitProviderType.AZURE_DEVOPS) {
|
|
144
|
+
await this.clickOnSubmitButton();
|
|
145
|
+
}
|
|
146
|
+
await this.enterPassword(OAUTH_CONSTANTS.TS_SELENIUM_GIT_PROVIDER_PASSWORD);
|
|
147
|
+
await this.clickOnSubmitButton();
|
|
148
|
+
if (FACTORY_TEST_CONSTANTS.TS_SELENIUM_FACTORY_GIT_PROVIDER === GitProviderType.AZURE_DEVOPS) {
|
|
149
|
+
await this.clickOnNotRememberCredentialsButton();
|
|
150
|
+
}
|
|
151
|
+
await this.waitClosingLoginPage();
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
async confirmAccess(): Promise<void> {
|
|
155
|
+
Logger.debug();
|
|
156
|
+
|
|
157
|
+
try {
|
|
158
|
+
await this.clickOnApproveButton();
|
|
159
|
+
await this.waitDisappearanceOauthPage();
|
|
160
|
+
} catch (e) {
|
|
161
|
+
Logger.debug('access was not confirmed, retrying to click confirmation button');
|
|
162
|
+
// workaround for GITHUB, AZURE_DEVOPS oauth confirmation page (bot security)
|
|
163
|
+
await this.driverHelper
|
|
164
|
+
.getAction()
|
|
165
|
+
.move({
|
|
166
|
+
origin: await this.driverHelper.waitPresence(OauthPage.APPROVE_BUTTON)
|
|
167
|
+
})
|
|
168
|
+
.click()
|
|
169
|
+
.perform();
|
|
170
|
+
await this.waitDisappearanceOauthPage();
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
async denyAccess(): Promise<void> {
|
|
175
|
+
Logger.debug();
|
|
176
|
+
|
|
177
|
+
try {
|
|
178
|
+
await this.clickOnDenyAccessButton();
|
|
179
|
+
await this.waitDisappearanceOauthPage();
|
|
180
|
+
} catch (e) {
|
|
181
|
+
Logger.debug('deny access was not confirmed, retrying to click confirmation button');
|
|
182
|
+
// workaround for GITHUB, AZURE_DEVOPS oauth confirmation page (bot security)
|
|
183
|
+
await this.driverHelper
|
|
184
|
+
.getAction()
|
|
185
|
+
.move({
|
|
186
|
+
origin: await this.driverHelper.waitPresence(OauthPage.DENY_ACCESS_BUTTON)
|
|
187
|
+
})
|
|
188
|
+
.click()
|
|
189
|
+
.perform();
|
|
190
|
+
await this.waitDisappearanceOauthPage();
|
|
191
|
+
}
|
|
192
|
+
}
|
|
182
193
|
}
|