@eclipse-che/che-e2e 7.124.0-next → 7.124.0-next-6307b25
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/constants/BASE_TEST_CONSTANTS.ts +6 -0
- package/dist/configs/inversify.config.js +123 -0
- package/dist/configs/inversify.config.js.map +1 -0
- package/dist/configs/inversify.types.js +74 -0
- package/dist/configs/inversify.types.js.map +1 -0
- package/dist/configs/mocharc.js +42 -0
- package/dist/configs/mocharc.js.map +1 -0
- package/dist/constants/API_TEST_CONSTANTS.js +60 -0
- package/dist/constants/API_TEST_CONSTANTS.js.map +1 -0
- package/dist/constants/BASE_TEST_CONSTANTS.js +113 -0
- package/dist/constants/BASE_TEST_CONSTANTS.js.map +1 -0
- package/dist/constants/CHROME_DRIVER_CONSTANTS.js +40 -0
- package/dist/constants/CHROME_DRIVER_CONSTANTS.js.map +1 -0
- package/dist/constants/EDITOR_CONSTANTS.js +114 -0
- package/dist/constants/EDITOR_CONSTANTS.js.map +1 -0
- package/dist/constants/FACTORY_TEST_CONSTANTS.js +87 -0
- package/dist/constants/FACTORY_TEST_CONSTANTS.js.map +1 -0
- package/dist/constants/MOCHA_CONSTANTS.js +24 -0
- package/dist/constants/MOCHA_CONSTANTS.js.map +1 -0
- package/dist/constants/MONACO_CONSTANTS.js +25 -0
- package/dist/constants/MONACO_CONSTANTS.js.map +1 -0
- package/dist/constants/OAUTH_CONSTANTS.js +53 -0
- package/dist/constants/OAUTH_CONSTANTS.js.map +1 -0
- package/dist/constants/PLUGIN_TEST_CONSTANTS.js +19 -0
- package/dist/constants/PLUGIN_TEST_CONSTANTS.js.map +1 -0
- package/dist/constants/REPORTER_CONSTANTS.js +123 -0
- package/dist/constants/REPORTER_CONSTANTS.js.map +1 -0
- package/dist/constants/TIMEOUT_CONSTANTS.js +101 -0
- package/dist/constants/TIMEOUT_CONSTANTS.js.map +1 -0
- package/dist/driver/ChromeDriver.js +77 -0
- package/dist/driver/ChromeDriver.js.map +1 -0
- package/dist/driver/IDriver.js +3 -0
- package/dist/driver/IDriver.js.map +1 -0
- package/dist/index.js +99 -0
- package/dist/index.js.map +1 -0
- package/dist/pageobjects/dashboard/CreateWorkspace.js +214 -0
- package/dist/pageobjects/dashboard/CreateWorkspace.js.map +1 -0
- package/dist/pageobjects/dashboard/Dashboard.js +208 -0
- package/dist/pageobjects/dashboard/Dashboard.js.map +1 -0
- package/dist/pageobjects/dashboard/TrustAuthorPopup.js +61 -0
- package/dist/pageobjects/dashboard/TrustAuthorPopup.js.map +1 -0
- package/dist/pageobjects/dashboard/UserPreferences.js +341 -0
- package/dist/pageobjects/dashboard/UserPreferences.js.map +1 -0
- package/dist/pageobjects/dashboard/Workspaces.js +242 -0
- package/dist/pageobjects/dashboard/Workspaces.js.map +1 -0
- package/dist/pageobjects/dashboard/workspace-details/WorkspaceDetails.js +192 -0
- package/dist/pageobjects/dashboard/workspace-details/WorkspaceDetails.js.map +1 -0
- package/dist/pageobjects/git-providers/OauthPage.js +218 -0
- package/dist/pageobjects/git-providers/OauthPage.js.map +1 -0
- package/dist/pageobjects/ide/AiCodeSignInDialog.js +55 -0
- package/dist/pageobjects/ide/AiCodeSignInDialog.js.map +1 -0
- package/dist/pageobjects/ide/CheCodeLocatorLoader.js +108 -0
- package/dist/pageobjects/ide/CheCodeLocatorLoader.js.map +1 -0
- package/dist/pageobjects/ide/CommandPalette.js +117 -0
- package/dist/pageobjects/ide/CommandPalette.js.map +1 -0
- package/dist/pageobjects/ide/ExplorerView.js +108 -0
- package/dist/pageobjects/ide/ExplorerView.js.map +1 -0
- package/dist/pageobjects/ide/ExtensionsView.js +162 -0
- package/dist/pageobjects/ide/ExtensionsView.js.map +1 -0
- package/dist/pageobjects/ide/GitHubExtensionDialog.js +66 -0
- package/dist/pageobjects/ide/GitHubExtensionDialog.js.map +1 -0
- package/dist/pageobjects/ide/NotificationHandler.js +83 -0
- package/dist/pageobjects/ide/NotificationHandler.js.map +1 -0
- package/dist/pageobjects/ide/RestartWorkspaceDialog.js +80 -0
- package/dist/pageobjects/ide/RestartWorkspaceDialog.js.map +1 -0
- package/dist/pageobjects/ide/RestrictedModeButton.js +57 -0
- package/dist/pageobjects/ide/RestrictedModeButton.js.map +1 -0
- package/dist/pageobjects/ide/SourceControlView.js +52 -0
- package/dist/pageobjects/ide/SourceControlView.js.map +1 -0
- package/dist/pageobjects/ide/ViewsMoreActionsButton.js +73 -0
- package/dist/pageobjects/ide/ViewsMoreActionsButton.js.map +1 -0
- package/dist/pageobjects/login/interfaces/ICheLoginPage.js +12 -0
- package/dist/pageobjects/login/interfaces/ICheLoginPage.js.map +1 -0
- package/dist/pageobjects/login/interfaces/IOcpLoginPage.js +12 -0
- package/dist/pageobjects/login/interfaces/IOcpLoginPage.js.map +1 -0
- package/dist/pageobjects/login/kubernetes/DexLoginPage.js +69 -0
- package/dist/pageobjects/login/kubernetes/DexLoginPage.js.map +1 -0
- package/dist/pageobjects/login/kubernetes/KubernetesLoginPage.js +50 -0
- package/dist/pageobjects/login/kubernetes/KubernetesLoginPage.js.map +1 -0
- package/dist/pageobjects/login/openshift/OcpLoginPage.js +88 -0
- package/dist/pageobjects/login/openshift/OcpLoginPage.js.map +1 -0
- package/dist/pageobjects/login/openshift/OcpRedHatLoginPage.js +73 -0
- package/dist/pageobjects/login/openshift/OcpRedHatLoginPage.js.map +1 -0
- package/dist/pageobjects/login/openshift/OcpUserLoginPage.js +53 -0
- package/dist/pageobjects/login/openshift/OcpUserLoginPage.js.map +1 -0
- package/dist/pageobjects/login/openshift/RedHatLoginPage.js +85 -0
- package/dist/pageobjects/login/openshift/RedHatLoginPage.js.map +1 -0
- package/dist/pageobjects/login/openshift/RegularUserOcpCheLoginPage.js +65 -0
- package/dist/pageobjects/login/openshift/RegularUserOcpCheLoginPage.js.map +1 -0
- package/dist/pageobjects/openshift/OcpApplicationPage.js +60 -0
- package/dist/pageobjects/openshift/OcpApplicationPage.js.map +1 -0
- package/dist/pageobjects/openshift/OcpImportFromGitPage.js +92 -0
- package/dist/pageobjects/openshift/OcpImportFromGitPage.js.map +1 -0
- package/dist/pageobjects/openshift/OcpMainPage.js +140 -0
- package/dist/pageobjects/openshift/OcpMainPage.js.map +1 -0
- package/dist/pageobjects/webterminal/WebTerminalPage.js +182 -0
- package/dist/pageobjects/webterminal/WebTerminalPage.js.map +1 -0
- package/dist/specs/MochaHooks.js +142 -0
- package/dist/specs/MochaHooks.js.map +1 -0
- package/dist/specs/SmokeTest.spec.js +58 -0
- package/dist/specs/SmokeTest.spec.js.map +1 -0
- package/dist/specs/api/AnsibleDevFileAPI.spec.js +263 -0
- package/dist/specs/api/AnsibleDevFileAPI.spec.js.map +1 -0
- package/dist/specs/api/BuildPushRunPodmanContainerAPI.spec.js +147 -0
- package/dist/specs/api/BuildPushRunPodmanContainerAPI.spec.js.map +1 -0
- package/dist/specs/api/ContainerOverridesAPI.spec.js +40 -0
- package/dist/specs/api/ContainerOverridesAPI.spec.js.map +1 -0
- package/dist/specs/api/CppDevFileAPI.spec.js +87 -0
- package/dist/specs/api/CppDevFileAPI.spec.js.map +1 -0
- package/dist/specs/api/DevfileAcceptanceTestAPI.spec.js +99 -0
- package/dist/specs/api/DevfileAcceptanceTestAPI.spec.js.map +1 -0
- package/dist/specs/api/DotnetDevFileAPI.spec.js +89 -0
- package/dist/specs/api/DotnetDevFileAPI.spec.js.map +1 -0
- package/dist/specs/api/EmptyWorkspaceAPI.spec.js +60 -0
- package/dist/specs/api/EmptyWorkspaceAPI.spec.js.map +1 -0
- package/dist/specs/api/GoDevFileAPI.spec.js +82 -0
- package/dist/specs/api/GoDevFileAPI.spec.js.map +1 -0
- package/dist/specs/api/InbuiltApplicationDevWorkspacesAPI.spec.js +97 -0
- package/dist/specs/api/InbuiltApplicationDevWorkspacesAPI.spec.js.map +1 -0
- package/dist/specs/api/JBossEapDevFileAPI.spec.js +127 -0
- package/dist/specs/api/JBossEapDevFileAPI.spec.js.map +1 -0
- package/dist/specs/api/LombokDevFileAPI.spec.js +81 -0
- package/dist/specs/api/LombokDevFileAPI.spec.js.map +1 -0
- package/dist/specs/api/NodeJSMongoDBDevFileAPI.spec.js +81 -0
- package/dist/specs/api/NodeJSMongoDBDevFileAPI.spec.js.map +1 -0
- package/dist/specs/api/NodeJsExpressDevFileAPI.spec.js +130 -0
- package/dist/specs/api/NodeJsExpressDevFileAPI.spec.js.map +1 -0
- package/dist/specs/api/PhpDevFileAPI.spec.js +71 -0
- package/dist/specs/api/PhpDevFileAPI.spec.js.map +1 -0
- package/dist/specs/api/PodOverridesAPI.spec.js +46 -0
- package/dist/specs/api/PodOverridesAPI.spec.js.map +1 -0
- package/dist/specs/api/PythonDevFileAPI.spec.js +71 -0
- package/dist/specs/api/PythonDevFileAPI.spec.js.map +1 -0
- package/dist/specs/api/QuarkusDevFileAPI.spec.js +97 -0
- package/dist/specs/api/QuarkusDevFileAPI.spec.js.map +1 -0
- package/dist/specs/dashboard-samples/Documentation.spec.js +118 -0
- package/dist/specs/dashboard-samples/Documentation.spec.js.map +1 -0
- package/dist/specs/dashboard-samples/EmptyWorkspace.spec.js +60 -0
- package/dist/specs/dashboard-samples/EmptyWorkspace.spec.js.map +1 -0
- package/dist/specs/dashboard-samples/Quarkus.spec.js +64 -0
- package/dist/specs/dashboard-samples/Quarkus.spec.js.map +1 -0
- package/dist/specs/dashboard-samples/RecommendedExtensions.spec.js +361 -0
- package/dist/specs/dashboard-samples/RecommendedExtensions.spec.js.map +1 -0
- package/dist/specs/dashboard-samples/StartWorkspaceUsingDesktopEditors.spec.js +171 -0
- package/dist/specs/dashboard-samples/StartWorkspaceUsingDesktopEditors.spec.js.map +1 -0
- package/dist/specs/devconsole-intergration/DevConsoleIntegration.spec.js +155 -0
- package/dist/specs/devconsole-intergration/DevConsoleIntegration.spec.js.map +1 -0
- package/dist/specs/factory/Factory.spec.js +183 -0
- package/dist/specs/factory/Factory.spec.js.map +1 -0
- package/dist/specs/factory/FactoryWithGitRepoOptions.spec.js +63 -0
- package/dist/specs/factory/FactoryWithGitRepoOptions.spec.js.map +1 -0
- package/dist/specs/factory/NoSetupRepoFactory.spec.js +212 -0
- package/dist/specs/factory/NoSetupRepoFactory.spec.js.map +1 -0
- package/dist/specs/factory/RefusedOAuthFactory.spec.js +239 -0
- package/dist/specs/factory/RefusedOAuthFactory.spec.js.map +1 -0
- package/dist/specs/factory/SshUrlNoOauthPatFactory.spec.js +202 -0
- package/dist/specs/factory/SshUrlNoOauthPatFactory.spec.js.map +1 -0
- package/dist/specs/miscellaneous/CreateWorkspaceWithExistedName.spec.js +77 -0
- package/dist/specs/miscellaneous/CreateWorkspaceWithExistedName.spec.js.map +1 -0
- package/dist/specs/miscellaneous/CreateWorkspaceWithExistingNameFromEmptyWorkspaceSample.spec.js +106 -0
- package/dist/specs/miscellaneous/CreateWorkspaceWithExistingNameFromEmptyWorkspaceSample.spec.js.map +1 -0
- package/dist/specs/miscellaneous/CreateWorkspaceWithExistingNameFromGitUrl.spec.js +113 -0
- package/dist/specs/miscellaneous/CreateWorkspaceWithExistingNameFromGitUrl.spec.js.map +1 -0
- package/dist/specs/miscellaneous/CreateWorkspaceWithExistingNameFromSample.spec.js +116 -0
- package/dist/specs/miscellaneous/CreateWorkspaceWithExistingNameFromSample.spec.js.map +1 -0
- package/dist/specs/miscellaneous/CustomOpenVSXRegistry.spec.js +205 -0
- package/dist/specs/miscellaneous/CustomOpenVSXRegistry.spec.js.map +1 -0
- package/dist/specs/miscellaneous/ExtensionActivationTest.spec.js +129 -0
- package/dist/specs/miscellaneous/ExtensionActivationTest.spec.js.map +1 -0
- package/dist/specs/miscellaneous/KubedockPodmanPersistUserHomeTest.spec.js +121 -0
- package/dist/specs/miscellaneous/KubedockPodmanPersistUserHomeTest.spec.js.map +1 -0
- package/dist/specs/miscellaneous/KubedockPodmanTest.spec.js +103 -0
- package/dist/specs/miscellaneous/KubedockPodmanTest.spec.js.map +1 -0
- package/dist/specs/miscellaneous/OpenCodeProviderSmokeTest.spec.js +138 -0
- package/dist/specs/miscellaneous/OpenCodeProviderSmokeTest.spec.js.map +1 -0
- package/dist/specs/miscellaneous/PredefinedNamespace.spec.js +111 -0
- package/dist/specs/miscellaneous/PredefinedNamespace.spec.js.map +1 -0
- package/dist/specs/miscellaneous/RenameWorkspace.spec.js +116 -0
- package/dist/specs/miscellaneous/RenameWorkspace.spec.js.map +1 -0
- package/dist/specs/miscellaneous/RevokeOauth.spec.js +29 -0
- package/dist/specs/miscellaneous/RevokeOauth.spec.js.map +1 -0
- package/dist/specs/miscellaneous/UserPreferencesTest.spec.js +26 -0
- package/dist/specs/miscellaneous/UserPreferencesTest.spec.js.map +1 -0
- package/dist/specs/miscellaneous/UserSecretsInWorkspace.spec.js +78 -0
- package/dist/specs/miscellaneous/UserSecretsInWorkspace.spec.js.map +1 -0
- package/dist/specs/miscellaneous/VsixInstallationDisableTest.spec.js +196 -0
- package/dist/specs/miscellaneous/VsixInstallationDisableTest.spec.js.map +1 -0
- package/dist/specs/miscellaneous/WorkspaceBackupRestore.spec.js +208 -0
- package/dist/specs/miscellaneous/WorkspaceBackupRestore.spec.js.map +1 -0
- package/dist/specs/miscellaneous/WorkspaceIdleTimeout.spec.js +84 -0
- package/dist/specs/miscellaneous/WorkspaceIdleTimeout.spec.js.map +1 -0
- package/dist/specs/miscellaneous/WorkspaceRunTimeout.spec.js +84 -0
- package/dist/specs/miscellaneous/WorkspaceRunTimeout.spec.js.map +1 -0
- package/dist/specs/miscellaneous/WorkspaceWithParent.spec.js +101 -0
- package/dist/specs/miscellaneous/WorkspaceWithParent.spec.js.map +1 -0
- package/dist/specs/restart-tests/RestartFromLocalDevfile.spec.js +266 -0
- package/dist/specs/restart-tests/RestartFromLocalDevfile.spec.js.map +1 -0
- package/dist/specs/web-terminal/WebTerminalTest.spec.js +47 -0
- package/dist/specs/web-terminal/WebTerminalTest.spec.js.map +1 -0
- package/dist/specs/web-terminal/WebTerminalUnderAdmin.spec.js +82 -0
- package/dist/specs/web-terminal/WebTerminalUnderAdmin.spec.js.map +1 -0
- package/dist/specs/web-terminal/WebTerminalUnderRegularUser.spec.js +78 -0
- package/dist/specs/web-terminal/WebTerminalUnderRegularUser.spec.js.map +1 -0
- package/dist/suites/devfile-acceptance-test-suite/DynamicallyGeneratingAPITest.suite.js +13 -0
- package/dist/suites/devfile-acceptance-test-suite/DynamicallyGeneratingAPITest.suite.js.map +1 -0
- package/dist/suites/disconnected-ocp/APITest.suite.js +14 -0
- package/dist/suites/disconnected-ocp/APITest.suite.js.map +1 -0
- package/dist/suites/disconnected-ocp/DynamicallyGeneratingAPITest.suite.js +13 -0
- package/dist/suites/disconnected-ocp/DynamicallyGeneratingAPITest.suite.js.map +1 -0
- package/dist/suites/disconnected-ocp/UITest.suite.js +19 -0
- package/dist/suites/disconnected-ocp/UITest.suite.js.map +1 -0
- package/dist/suites/online-ocp/APITest.suite.js +15 -0
- package/dist/suites/online-ocp/APITest.suite.js.map +1 -0
- package/dist/suites/online-ocp/DynamicallyGeneratingAPITest.suite.js +13 -0
- package/dist/suites/online-ocp/DynamicallyGeneratingAPITest.suite.js.map +1 -0
- package/dist/suites/online-ocp/UITest.suite.js +23 -0
- package/dist/suites/online-ocp/UITest.suite.js.map +1 -0
- package/dist/tests-library/LoginTests.js +76 -0
- package/dist/tests-library/LoginTests.js.map +1 -0
- package/dist/tests-library/ProjectAndFileTests.js +278 -0
- package/dist/tests-library/ProjectAndFileTests.js.map +1 -0
- package/dist/tests-library/WorkspaceHandlingTests.js +219 -0
- package/dist/tests-library/WorkspaceHandlingTests.js.map +1 -0
- package/dist/utils/BrowserTabsUtil.js +124 -0
- package/dist/utils/BrowserTabsUtil.js.map +1 -0
- package/dist/utils/CheReporter.js +238 -0
- package/dist/utils/CheReporter.js.map +1 -0
- package/dist/utils/DevWorkspaceConfigurationHelper.js +145 -0
- package/dist/utils/DevWorkspaceConfigurationHelper.js.map +1 -0
- package/dist/utils/DevfilesHelper.js +177 -0
- package/dist/utils/DevfilesHelper.js.map +1 -0
- package/dist/utils/DriverHelper.js +609 -0
- package/dist/utils/DriverHelper.js.map +1 -0
- package/dist/utils/IContextParams.js +12 -0
- package/dist/utils/IContextParams.js.map +1 -0
- package/dist/utils/IKubernetesCommandLineToolsExecutor.js +3 -0
- package/dist/utils/IKubernetesCommandLineToolsExecutor.js.map +1 -0
- package/dist/utils/KubernetesCommandLineToolsExecutor.js +338 -0
- package/dist/utils/KubernetesCommandLineToolsExecutor.js.map +1 -0
- package/dist/utils/Logger.js +146 -0
- package/dist/utils/Logger.js.map +1 -0
- package/dist/utils/ScreenCatcher.js +114 -0
- package/dist/utils/ScreenCatcher.js.map +1 -0
- package/dist/utils/ShellExecutor.js +47 -0
- package/dist/utils/ShellExecutor.js.map +1 -0
- package/dist/utils/StringUtil.js +107 -0
- package/dist/utils/StringUtil.js.map +1 -0
- package/dist/utils/request-handlers/CheApiRequestHandler.js +128 -0
- package/dist/utils/request-handlers/CheApiRequestHandler.js.map +1 -0
- package/dist/utils/request-handlers/headers/CheMultiuserAuthorizationHeaderHandler.js +55 -0
- package/dist/utils/request-handlers/headers/CheMultiuserAuthorizationHeaderHandler.js.map +1 -0
- package/dist/utils/request-handlers/headers/IAuthorizationHeaderHandler.js +12 -0
- package/dist/utils/request-handlers/headers/IAuthorizationHeaderHandler.js.map +1 -0
- package/dist/utils/workspace/ApiUrlResolver.js +123 -0
- package/dist/utils/workspace/ApiUrlResolver.js.map +1 -0
- package/dist/utils/workspace/ITestWorkspaceUtil.js +12 -0
- package/dist/utils/workspace/ITestWorkspaceUtil.js.map +1 -0
- package/dist/utils/workspace/TestWorkspaceUtil.js +212 -0
- package/dist/utils/workspace/TestWorkspaceUtil.js.map +1 -0
- package/dist/utils/workspace/WorkspaceStatus.js +19 -0
- package/dist/utils/workspace/WorkspaceStatus.js.map +1 -0
- package/index.ts +5 -5
- package/package.json +1 -1
- package/pageobjects/dashboard/CreateWorkspace.ts +50 -0
- package/pageobjects/dashboard/UserPreferences.ts +106 -0
- package/specs/miscellaneous/OpenCodeProviderSmokeTest.spec.ts +175 -0
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/** *******************************************************************
|
|
3
|
+
* copyright (c) 2019-2023 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
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
12
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
13
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
14
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
15
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
16
|
+
};
|
|
17
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
18
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
19
|
+
};
|
|
20
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
21
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
22
|
+
};
|
|
23
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
24
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
25
|
+
};
|
|
26
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
exports.TestWorkspaceUtil = void 0;
|
|
28
|
+
require("reflect-metadata");
|
|
29
|
+
const inversify_1 = require("inversify");
|
|
30
|
+
const DriverHelper_1 = require("../DriverHelper");
|
|
31
|
+
const WorkspaceStatus_1 = require("./WorkspaceStatus");
|
|
32
|
+
const selenium_webdriver_1 = require("selenium-webdriver");
|
|
33
|
+
const CheApiRequestHandler_1 = require("../request-handlers/CheApiRequestHandler");
|
|
34
|
+
const inversify_types_1 = require("../../configs/inversify.types");
|
|
35
|
+
const Logger_1 = require("../Logger");
|
|
36
|
+
const axios_1 = __importDefault(require("axios"));
|
|
37
|
+
const ApiUrlResolver_1 = require("./ApiUrlResolver");
|
|
38
|
+
const TIMEOUT_CONSTANTS_1 = require("../../constants/TIMEOUT_CONSTANTS");
|
|
39
|
+
let TestWorkspaceUtil = class TestWorkspaceUtil {
|
|
40
|
+
constructor(driverHelper, processRequestHandler, apiUrlResolver) {
|
|
41
|
+
this.driverHelper = driverHelper;
|
|
42
|
+
this.processRequestHandler = processRequestHandler;
|
|
43
|
+
this.apiUrlResolver = apiUrlResolver;
|
|
44
|
+
this.polling = TIMEOUT_CONSTANTS_1.TIMEOUT_CONSTANTS.TS_SELENIUM_DEFAULT_POLLING;
|
|
45
|
+
this.attempts = TIMEOUT_CONSTANTS_1.TIMEOUT_CONSTANTS.TS_DASHBOARD_WORKSPACE_STOP_TIMEOUT / this.polling;
|
|
46
|
+
}
|
|
47
|
+
async waitWorkspaceStatus(workspaceName, expectedWorkspaceStatus) {
|
|
48
|
+
Logger_1.Logger.debug();
|
|
49
|
+
const workspaceApiUrl = await this.apiUrlResolver.getWorkspaceApiUrl(workspaceName);
|
|
50
|
+
let workspaceStatus = '';
|
|
51
|
+
let expectedStatus = false;
|
|
52
|
+
for (let i = 0; i < this.attempts; i++) {
|
|
53
|
+
let response;
|
|
54
|
+
try {
|
|
55
|
+
response = await this.processRequestHandler.get(workspaceApiUrl);
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
// handle transient network errors (e.g. socket hang up) by retrying
|
|
59
|
+
Logger_1.Logger.warn(`waitWorkspaceStatus: transient error polling workspace status, retrying (attempt ${i + 1}): ${err}`);
|
|
60
|
+
await this.driverHelper.wait(this.polling);
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
if (response.status !== 200) {
|
|
64
|
+
throw new Error(`Can not get status of a workspace. Code: ${response.status} Data: ${response.data}`);
|
|
65
|
+
}
|
|
66
|
+
workspaceStatus = await response.data.status.phase;
|
|
67
|
+
if (workspaceStatus === expectedWorkspaceStatus) {
|
|
68
|
+
expectedStatus = true;
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
await this.driverHelper.wait(this.polling);
|
|
72
|
+
}
|
|
73
|
+
if (!expectedStatus) {
|
|
74
|
+
const waitTime = this.attempts * this.polling;
|
|
75
|
+
throw new selenium_webdriver_1.error.TimeoutError(`The workspace was not stopped in ${waitTime} ms. Current status is: ${workspaceStatus}`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
async stopWorkspaceByName(workspaceName) {
|
|
79
|
+
Logger_1.Logger.debug(`${workspaceName}`);
|
|
80
|
+
const stopWorkspaceApiUrl = await this.apiUrlResolver.getWorkspaceApiUrl(workspaceName);
|
|
81
|
+
let stopWorkspaceResponse;
|
|
82
|
+
try {
|
|
83
|
+
stopWorkspaceResponse = await this.processRequestHandler.patch(stopWorkspaceApiUrl, [
|
|
84
|
+
{
|
|
85
|
+
op: 'replace',
|
|
86
|
+
path: '/spec/started',
|
|
87
|
+
value: false
|
|
88
|
+
}
|
|
89
|
+
]);
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
Logger_1.Logger.error(`stop workspace call failed. URL used: ${stopWorkspaceApiUrl}`);
|
|
93
|
+
throw err;
|
|
94
|
+
}
|
|
95
|
+
if (stopWorkspaceResponse.status !== 200) {
|
|
96
|
+
throw new Error(`Cannot stop workspace. Code: ${stopWorkspaceResponse.status} Data: ${stopWorkspaceResponse.data}`);
|
|
97
|
+
}
|
|
98
|
+
await this.waitWorkspaceStatus(workspaceName, WorkspaceStatus_1.WorkspaceStatus.STOPPED);
|
|
99
|
+
Logger_1.Logger.debug(`${workspaceName} stopped successfully`);
|
|
100
|
+
}
|
|
101
|
+
// delete a workspace without stopping phase (similar with force deleting)
|
|
102
|
+
async deleteWorkspaceByName(workspaceName) {
|
|
103
|
+
Logger_1.Logger.debug(`${workspaceName}`);
|
|
104
|
+
const deleteWorkspaceApiUrl = await this.apiUrlResolver.getWorkspaceApiUrl(workspaceName);
|
|
105
|
+
let deleteWorkspaceResponse;
|
|
106
|
+
let deleteWorkspaceStatus = false;
|
|
107
|
+
try {
|
|
108
|
+
deleteWorkspaceResponse = await this.processRequestHandler.delete(deleteWorkspaceApiUrl);
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
if (axios_1.default.isAxiosError(error) && error.response?.status === 404) {
|
|
112
|
+
Logger_1.Logger.info(`Workspace ${workspaceName} not found, already deleted`);
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
Logger_1.Logger.error(`delete workspace call failed. URL used: ${deleteWorkspaceApiUrl}`);
|
|
116
|
+
throw error;
|
|
117
|
+
}
|
|
118
|
+
if (deleteWorkspaceResponse.status !== 204) {
|
|
119
|
+
throw new Error(`Can not delete workspace. Code: ${deleteWorkspaceResponse.status} Data: ${deleteWorkspaceResponse.data}`);
|
|
120
|
+
}
|
|
121
|
+
for (let i = 0; i < this.attempts; i++) {
|
|
122
|
+
try {
|
|
123
|
+
deleteWorkspaceResponse = await this.processRequestHandler.get(deleteWorkspaceApiUrl);
|
|
124
|
+
Logger_1.Logger.trace(`GET ${deleteWorkspaceApiUrl} returned status: ${deleteWorkspaceResponse.status}; data: ${deleteWorkspaceResponse.data}`);
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
if (axios_1.default.isAxiosError(error) && (error.response?.status === 404 || error.response?.status === 500)) {
|
|
128
|
+
deleteWorkspaceStatus = true;
|
|
129
|
+
Logger_1.Logger.debug(`${workspaceName} deleted successfully`);
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
Logger_1.Logger.trace(`GET ${deleteWorkspaceApiUrl} threw error: ${error}`);
|
|
133
|
+
}
|
|
134
|
+
await this.driverHelper.wait(this.polling);
|
|
135
|
+
}
|
|
136
|
+
if (!deleteWorkspaceStatus) {
|
|
137
|
+
const waitTime = this.attempts * this.polling;
|
|
138
|
+
throw new selenium_webdriver_1.error.TimeoutError(`The workspace was not deleted in ${waitTime} ms.`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// stop workspace before deleting with checking stopping phase
|
|
142
|
+
async stopAndDeleteWorkspaceByName(workspaceName) {
|
|
143
|
+
Logger_1.Logger.debug();
|
|
144
|
+
await this.stopWorkspaceByName(workspaceName);
|
|
145
|
+
await this.deleteWorkspaceByName(workspaceName);
|
|
146
|
+
}
|
|
147
|
+
// stop all run workspaces in the namespace
|
|
148
|
+
async stopAllRunningWorkspaces() {
|
|
149
|
+
Logger_1.Logger.debug();
|
|
150
|
+
const response = await this.processRequestHandler.get(await this.apiUrlResolver.getWorkspacesApiUrl());
|
|
151
|
+
for (let i = 0; i < response.data.items.length; i++) {
|
|
152
|
+
Logger_1.Logger.info('the project is being stopped: ' + response.data.items[i].metadata.name);
|
|
153
|
+
await this.stopWorkspaceByName(response.data.items[i].metadata.name);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
// stop all run workspaces, check statuses and remove the workspaces
|
|
157
|
+
async stopAndDeleteAllRunningWorkspaces() {
|
|
158
|
+
Logger_1.Logger.debug();
|
|
159
|
+
const response = await this.processRequestHandler.get(await this.apiUrlResolver.getWorkspacesApiUrl());
|
|
160
|
+
await this.stopAllRunningWorkspaces();
|
|
161
|
+
for (let i = 0; i < response.data.items.length; i++) {
|
|
162
|
+
Logger_1.Logger.info('the project is being deleted: ' + response.data.items[i].metadata.name);
|
|
163
|
+
await this.deleteWorkspaceByName(response.data.items[i].metadata.name);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// stop all run workspaces without stopping and waiting for of 'Stopped' phase
|
|
167
|
+
// similar with 'force' deleting
|
|
168
|
+
async deleteAllWorkspaces() {
|
|
169
|
+
Logger_1.Logger.debug();
|
|
170
|
+
const response = await this.processRequestHandler.get(await this.apiUrlResolver.getWorkspacesApiUrl());
|
|
171
|
+
for (let i = 0; i < response.data.items.length; i++) {
|
|
172
|
+
Logger_1.Logger.info('the project is being deleted .......: ' + response.data.items[i].metadata.name);
|
|
173
|
+
await this.deleteWorkspaceByName(response.data.items[i].metadata.name);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* set user preferences for Che "security.workspace.trust.enabled": false using JS. in background mode
|
|
178
|
+
*/
|
|
179
|
+
async switchOffTrustDialogWithJavaScript() {
|
|
180
|
+
const javaScriptExecCode = '(async function importData() {\n' +
|
|
181
|
+
' const stub = "{\\"vscode-web-db\\":{\\"vscode-userdata-store\\":{\\"/User/settings.json\\":{\\"type\\":\\"Uint8Array\\",\\"value\\":\\"%7B%0A%20%20%20%20%22security.workspace.trust.enabled%22%3A%20false%0A%7D\\"}}}}";\n' +
|
|
182
|
+
' for (const [dbName, dbData] of Object.entries(JSON.parse(stub))) {\n' +
|
|
183
|
+
' const req = indexedDB.open(dbName);\n' +
|
|
184
|
+
' req.onupgradeneeded = ({ target: { result: db } }) =>\n' +
|
|
185
|
+
' Object.keys(dbData).forEach((name) => db.createObjectStore(name));\n' +
|
|
186
|
+
' await new Promise((r) => (req.onsuccess = r));\n' +
|
|
187
|
+
' for (const [storeName, storeData] of Object.entries(dbData)) {\n' +
|
|
188
|
+
' const transaction = req.result.transaction(storeName, "readwrite");\n' +
|
|
189
|
+
' const store = transaction.objectStore(storeName);\n' +
|
|
190
|
+
' store.clear();\n' +
|
|
191
|
+
' for (const [key, { type, value }] of Object.entries(storeData)) {\n' +
|
|
192
|
+
' const str = decodeURIComponent(value);\n' +
|
|
193
|
+
' store.put(type === "String" ? str : new TextEncoder().encode(str), key);\n' +
|
|
194
|
+
' }\n' +
|
|
195
|
+
' await new Promise((r) => (transaction.oncomplete = r));\n' +
|
|
196
|
+
' }\n' +
|
|
197
|
+
' }\n' +
|
|
198
|
+
'})().then(() => {});';
|
|
199
|
+
await this.driverHelper.getDriver().executeScript(javaScriptExecCode);
|
|
200
|
+
}
|
|
201
|
+
};
|
|
202
|
+
TestWorkspaceUtil = __decorate([
|
|
203
|
+
(0, inversify_1.injectable)(),
|
|
204
|
+
__param(0, (0, inversify_1.inject)(inversify_types_1.CLASSES.DriverHelper)),
|
|
205
|
+
__param(1, (0, inversify_1.inject)(inversify_types_1.CLASSES.CheApiRequestHandler)),
|
|
206
|
+
__param(2, (0, inversify_1.inject)(inversify_types_1.CLASSES.ApiUrlResolver)),
|
|
207
|
+
__metadata("design:paramtypes", [DriverHelper_1.DriverHelper,
|
|
208
|
+
CheApiRequestHandler_1.CheApiRequestHandler,
|
|
209
|
+
ApiUrlResolver_1.ApiUrlResolver])
|
|
210
|
+
], TestWorkspaceUtil);
|
|
211
|
+
exports.TestWorkspaceUtil = TestWorkspaceUtil;
|
|
212
|
+
//# sourceMappingURL=TestWorkspaceUtil.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestWorkspaceUtil.js","sourceRoot":"","sources":["../../../utils/workspace/TestWorkspaceUtil.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/** *******************************************************************
|
|
3
|
+
* copyright (c) 2019-2023 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.WorkspaceStatus = void 0;
|
|
13
|
+
var WorkspaceStatus;
|
|
14
|
+
(function (WorkspaceStatus) {
|
|
15
|
+
WorkspaceStatus["RUNNING"] = "Running";
|
|
16
|
+
WorkspaceStatus["STOPPED"] = "Stopped";
|
|
17
|
+
WorkspaceStatus["STARTING"] = "Starting";
|
|
18
|
+
})(WorkspaceStatus = exports.WorkspaceStatus || (exports.WorkspaceStatus = {}));
|
|
19
|
+
//# sourceMappingURL=WorkspaceStatus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkspaceStatus.js","sourceRoot":"","sources":["../../../utils/workspace/WorkspaceStatus.ts"],"names":[],"mappings":";AAAA;;;;;;;;wEAQwE;;;AAExE,IAAY,eAIX;AAJD,WAAY,eAAe;IAC1B,sCAAmB,CAAA;IACnB,sCAAmB,CAAA;IACnB,wCAAqB,CAAA;AACtB,CAAC,EAJW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAI1B"}
|
package/index.ts
CHANGED
|
@@ -5,19 +5,19 @@ export * from './configs/mocharc';
|
|
|
5
5
|
export * from './driver/ChromeDriver';
|
|
6
6
|
export * from './driver/IDriver';
|
|
7
7
|
export * from './utils/BrowserTabsUtil';
|
|
8
|
-
export * from './utils/DevfilesHelper';
|
|
9
8
|
export * from './utils/DevWorkspaceConfigurationHelper';
|
|
9
|
+
export * from './utils/DevfilesHelper';
|
|
10
10
|
export * from './utils/DriverHelper';
|
|
11
11
|
export * from './utils/IContextParams';
|
|
12
12
|
export * from './utils/IKubernetesCommandLineToolsExecutor';
|
|
13
13
|
export * from './utils/KubernetesCommandLineToolsExecutor';
|
|
14
14
|
export * from './utils/Logger';
|
|
15
|
-
export * from './utils/request-handlers/CheApiRequestHandler';
|
|
16
|
-
export * from './utils/request-handlers/headers/CheMultiuserAuthorizationHeaderHandler';
|
|
17
|
-
export * from './utils/request-handlers/headers/IAuthorizationHeaderHandler';
|
|
18
15
|
export * from './utils/ScreenCatcher';
|
|
19
16
|
export * from './utils/ShellExecutor';
|
|
20
17
|
export * from './utils/StringUtil';
|
|
18
|
+
export * from './utils/request-handlers/CheApiRequestHandler';
|
|
19
|
+
export * from './utils/request-handlers/headers/CheMultiuserAuthorizationHeaderHandler';
|
|
20
|
+
export * from './utils/request-handlers/headers/IAuthorizationHeaderHandler';
|
|
21
21
|
export * from './utils/workspace/ApiUrlResolver';
|
|
22
22
|
export * from './utils/workspace/ITestWorkspaceUtil';
|
|
23
23
|
export * from './utils/workspace/TestWorkspaceUtil';
|
|
@@ -26,8 +26,8 @@ export * from './pageobjects/dashboard/CreateWorkspace';
|
|
|
26
26
|
export * from './pageobjects/dashboard/Dashboard';
|
|
27
27
|
export * from './pageobjects/dashboard/TrustAuthorPopup';
|
|
28
28
|
export * from './pageobjects/dashboard/UserPreferences';
|
|
29
|
-
export * from './pageobjects/dashboard/workspace-details/WorkspaceDetails';
|
|
30
29
|
export * from './pageobjects/dashboard/Workspaces';
|
|
30
|
+
export * from './pageobjects/dashboard/workspace-details/WorkspaceDetails';
|
|
31
31
|
export * from './pageobjects/git-providers/OauthPage';
|
|
32
32
|
export * from './pageobjects/ide/AiCodeSignInDialog';
|
|
33
33
|
export * from './pageobjects/ide/CheCodeLocatorLoader';
|
package/package.json
CHANGED
|
@@ -28,6 +28,10 @@ export class CreateWorkspace {
|
|
|
28
28
|
private static readonly CREATE_NEW_WORKPACE_CHECKBOX: By = By.css('label[for="create-new-if-exist-switch"]');
|
|
29
29
|
private static readonly CREATE_NEW_WORKPACE_CHECKBOX_VALUE: By = By.id('create-new-if-exist-switch');
|
|
30
30
|
|
|
31
|
+
private static readonly AI_PROVIDER_SELECTOR_HEADING: By = By.xpath('//h3[text()="AI Provider Selector"]');
|
|
32
|
+
private static readonly AI_PROVIDER_CHOOSE_TOGGLE: By = By.id('accordion-item-ai-selector');
|
|
33
|
+
private static readonly AI_PROVIDER_KEY_CONFIGURED_BADGE: By = By.xpath('//span[text()=" Key configured"]');
|
|
34
|
+
|
|
31
35
|
constructor(
|
|
32
36
|
@inject(CLASSES.DriverHelper)
|
|
33
37
|
private readonly driverHelper: DriverHelper,
|
|
@@ -186,6 +190,47 @@ export class CreateWorkspace {
|
|
|
186
190
|
await this.driverHelper.scrollToAndClick(CreateWorkspace.CREATE_NEW_WORKPACE_CHECKBOX, timeout);
|
|
187
191
|
}
|
|
188
192
|
|
|
193
|
+
async waitAiProviderSectionVisible(timeout: number = TIMEOUT_CONSTANTS.TS_COMMON_DASHBOARD_WAIT_TIMEOUT): Promise<void> {
|
|
194
|
+
Logger.debug();
|
|
195
|
+
|
|
196
|
+
await this.driverHelper.waitVisibility(CreateWorkspace.AI_PROVIDER_SELECTOR_HEADING, timeout);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
async expandChooseAiProviderSection(): Promise<void> {
|
|
200
|
+
Logger.debug();
|
|
201
|
+
|
|
202
|
+
const toggle: By = CreateWorkspace.AI_PROVIDER_CHOOSE_TOGGLE;
|
|
203
|
+
await this.driverHelper.waitAndClick(toggle);
|
|
204
|
+
await this.driverHelper.waitAttributeValue(toggle, 'aria-expanded', 'true', TIMEOUT_CONSTANTS.TS_COMMON_DASHBOARD_WAIT_TIMEOUT);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
async isAiProviderSectionVisible(): Promise<boolean> {
|
|
208
|
+
Logger.debug();
|
|
209
|
+
|
|
210
|
+
return await this.driverHelper.isVisible(CreateWorkspace.AI_PROVIDER_SELECTOR_HEADING);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
async isAiProviderCardVisible(providerId: string): Promise<boolean> {
|
|
214
|
+
Logger.debug(`providerId: "${providerId}"`);
|
|
215
|
+
|
|
216
|
+
return await this.driverHelper.isVisible(this.getAiProviderCardLocator(providerId));
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
async waitAiProviderCardVisible(
|
|
220
|
+
providerId: string,
|
|
221
|
+
timeout: number = TIMEOUT_CONSTANTS.TS_COMMON_DASHBOARD_WAIT_TIMEOUT
|
|
222
|
+
): Promise<void> {
|
|
223
|
+
Logger.debug(`providerId: "${providerId}"`);
|
|
224
|
+
|
|
225
|
+
await this.driverHelper.waitVisibility(this.getAiProviderCardLocator(providerId), timeout);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
async isAiProviderKeyConfiguredBadgeVisible(): Promise<boolean> {
|
|
229
|
+
Logger.debug();
|
|
230
|
+
|
|
231
|
+
return await this.driverHelper.isVisible(CreateWorkspace.AI_PROVIDER_KEY_CONFIGURED_BADGE);
|
|
232
|
+
}
|
|
233
|
+
|
|
189
234
|
private getEditorsDropdownListLocator(sampleName: string): By {
|
|
190
235
|
return By.xpath(`//div[text()=\'${sampleName}\']//parent::article//button`);
|
|
191
236
|
}
|
|
@@ -215,6 +260,11 @@ export class CreateWorkspace {
|
|
|
215
260
|
return By.xpath(`//div[contains(@id, 'sample-card') and text()='${sampleName}']`);
|
|
216
261
|
}
|
|
217
262
|
|
|
263
|
+
private getAiProviderCardLocator(providerId: string): By {
|
|
264
|
+
const cardId: string = providerId.replace(/\//g, '-');
|
|
265
|
+
return By.id(`ai-provider-card-${cardId}`);
|
|
266
|
+
}
|
|
267
|
+
|
|
218
268
|
private getGitBranchListItemLocator(branchName: string): By {
|
|
219
269
|
return By.xpath(`//ul[@role="listbox"]//span[text()="${branchName}"]`);
|
|
220
270
|
}
|
|
@@ -54,6 +54,15 @@ export class UserPreferences {
|
|
|
54
54
|
private static readonly DELETE_CONFIRMATION_CHECKBOX: By = By.id('revoke-warning-info-check');
|
|
55
55
|
private static readonly DELETE_ITEM_BUTTON_ENABLED: By = By.css('button[data-testid="revoke-button"]:not([disabled])');
|
|
56
56
|
|
|
57
|
+
private static readonly AI_PROVIDER_KEYS_TAB: By = By.xpath('//button[text()="AI Providers Keys"]');
|
|
58
|
+
private static readonly AI_ADD_KEY_EMPTY_STATE_BUTTON: By = By.css('button[aria-label="Add AI Provider Key"]');
|
|
59
|
+
private static readonly AI_ADD_EDIT_MODAL: By = By.css('div[aria-label="add-edit-ai-provider-key"]');
|
|
60
|
+
private static readonly AI_PROVIDER_SELECT_TOGGLE: By = By.css('div[aria-label="add-edit-ai-provider-key"] button.pf-v6-c-menu-toggle');
|
|
61
|
+
private static readonly AI_API_KEY_INPUT: By = By.id('ai-provider-api-key');
|
|
62
|
+
private static readonly AI_SAVE_BUTTON: By = By.css('button[data-testid="save-button"]');
|
|
63
|
+
private static readonly AI_BULK_DELETE_BUTTON: By = By.css('button[data-testid="bulk-delete-ai-key-button"]');
|
|
64
|
+
private static readonly AI_DELETE_CONFIRM_CHECKBOX: By = By.id('delete-ai-key-warning-checkbox');
|
|
65
|
+
|
|
57
66
|
constructor(
|
|
58
67
|
@inject(CLASSES.DriverHelper)
|
|
59
68
|
readonly driverHelper: DriverHelper
|
|
@@ -286,6 +295,87 @@ export class UserPreferences {
|
|
|
286
295
|
Logger.info('SSH keys have been deleted');
|
|
287
296
|
}
|
|
288
297
|
|
|
298
|
+
async openAiProviderKeysTab(): Promise<void> {
|
|
299
|
+
Logger.debug();
|
|
300
|
+
|
|
301
|
+
await this.driverHelper.waitAndClick(UserPreferences.AI_PROVIDER_KEYS_TAB);
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
async waitAiProviderKeysTab(timeout: number = TIMEOUT_CONSTANTS.TS_COMMON_DASHBOARD_WAIT_TIMEOUT): Promise<void> {
|
|
305
|
+
Logger.debug();
|
|
306
|
+
|
|
307
|
+
await this.driverHelper.waitVisibility(UserPreferences.AI_PROVIDER_KEYS_TAB, timeout);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
async isAiProviderKeyPresent(providerId: string): Promise<boolean> {
|
|
311
|
+
Logger.debug(`providerId: "${providerId}"`);
|
|
312
|
+
|
|
313
|
+
return await this.driverHelper.isVisible(this.getAiProviderRowLocator(providerId));
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
async waitAiProviderKeyPresent(
|
|
317
|
+
providerId: string,
|
|
318
|
+
timeout: number = TIMEOUT_CONSTANTS.TS_COMMON_DASHBOARD_WAIT_TIMEOUT
|
|
319
|
+
): Promise<void> {
|
|
320
|
+
Logger.debug(`providerId: "${providerId}"`);
|
|
321
|
+
|
|
322
|
+
await this.driverHelper.waitVisibility(this.getAiProviderRowLocator(providerId), timeout);
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
async addAiProviderKey(providerName: string, apiKey: string): Promise<void> {
|
|
326
|
+
Logger.debug(`providerName: "${providerName}"`);
|
|
327
|
+
|
|
328
|
+
await this.driverHelper.waitAndClick(UserPreferences.AI_ADD_KEY_EMPTY_STATE_BUTTON);
|
|
329
|
+
await this.driverHelper.waitVisibility(UserPreferences.AI_ADD_EDIT_MODAL);
|
|
330
|
+
await this.selectAiProvider(providerName);
|
|
331
|
+
await this.driverHelper.waitVisibility(UserPreferences.AI_API_KEY_INPUT);
|
|
332
|
+
await this.driverHelper.enterValue(UserPreferences.AI_API_KEY_INPUT, apiKey);
|
|
333
|
+
await this.driverHelper.waitAndClick(UserPreferences.AI_SAVE_BUTTON);
|
|
334
|
+
|
|
335
|
+
const attempts: number = Math.ceil(
|
|
336
|
+
TIMEOUT_CONSTANTS.TS_COMMON_DASHBOARD_WAIT_TIMEOUT / TIMEOUT_CONSTANTS.TS_SELENIUM_DEFAULT_POLLING
|
|
337
|
+
);
|
|
338
|
+
await this.driverHelper.waitDisappearance(
|
|
339
|
+
UserPreferences.AI_ADD_EDIT_MODAL,
|
|
340
|
+
attempts,
|
|
341
|
+
TIMEOUT_CONSTANTS.TS_SELENIUM_DEFAULT_POLLING
|
|
342
|
+
);
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
async selectAiProvider(providerName: string): Promise<void> {
|
|
346
|
+
Logger.debug(`providerName: "${providerName}"`);
|
|
347
|
+
|
|
348
|
+
await this.driverHelper.waitAndClick(UserPreferences.AI_PROVIDER_SELECT_TOGGLE);
|
|
349
|
+
await this.driverHelper.waitAndClick(this.getAiProviderSelectOptionLocator(providerName));
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
async getAiProviderEnvVarName(providerId: string): Promise<string> {
|
|
353
|
+
Logger.debug(`providerId: "${providerId}"`);
|
|
354
|
+
|
|
355
|
+
return await this.driverHelper.waitAndGetText(this.getAiProviderEnvVarLocator(providerId));
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
async deleteAiProviderKeys(providerName: string): Promise<void> {
|
|
359
|
+
Logger.debug(`providerName: "${providerName}"`);
|
|
360
|
+
|
|
361
|
+
Logger.info('Deleting AI Provider keys');
|
|
362
|
+
const rows: By = By.css('table[aria-label="AI Provider Keys"] tbody tr input[type="checkbox"]');
|
|
363
|
+
const hasRows: boolean = await this.driverHelper.isVisible(rows);
|
|
364
|
+
|
|
365
|
+
if (!hasRows) {
|
|
366
|
+
Logger.info('No AI Provider keys to delete');
|
|
367
|
+
return;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
const selectAllCheckbox: By = By.css('table[aria-label="AI Provider Keys"] thead input[type="checkbox"]');
|
|
371
|
+
await this.driverHelper.waitAndClick(selectAllCheckbox);
|
|
372
|
+
await this.driverHelper.waitAndClick(UserPreferences.AI_BULK_DELETE_BUTTON);
|
|
373
|
+
await this.driverHelper.waitAndClick(UserPreferences.AI_DELETE_CONFIRM_CHECKBOX);
|
|
374
|
+
await this.driverHelper.waitAndClick(this.getAiDeleteConfirmButtonLocator(providerName));
|
|
375
|
+
await this.driverHelper.waitDisappearance(rows);
|
|
376
|
+
Logger.info('AI Provider keys have been deleted');
|
|
377
|
+
}
|
|
378
|
+
|
|
289
379
|
getServiceConfig(service: string): string {
|
|
290
380
|
const gitService: { [key: string]: string } = {
|
|
291
381
|
[GitProviderType.GITHUB]: 'GitHub',
|
|
@@ -302,4 +392,20 @@ export class UserPreferences {
|
|
|
302
392
|
private getServicesListItemLocator(servicesName: string): By {
|
|
303
393
|
return By.xpath(`//tr[td[text()='${servicesName}']]//input`);
|
|
304
394
|
}
|
|
395
|
+
|
|
396
|
+
private getAiProviderRowLocator(providerId: string): By {
|
|
397
|
+
return By.css(`tr[data-testid="${providerId}"]`);
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
private getAiProviderSelectOptionLocator(providerName: string): By {
|
|
401
|
+
return By.xpath(`//button[@role="option"]//span[text()="${providerName}"]`);
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
private getAiProviderEnvVarLocator(providerId: string): By {
|
|
405
|
+
return By.xpath(`//tr[@data-testid="${providerId}"]//td[@data-label="Environment Variable"]//code`);
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
private getAiDeleteConfirmButtonLocator(providerName: string): By {
|
|
409
|
+
return By.xpath(`//div[@aria-label="Delete ${providerName} API Key"]//span[text()="Delete"]`);
|
|
410
|
+
}
|
|
305
411
|
}
|