@eclipse-che/che-e2e 7.122.0-next-4d9831f → 7.123.0-next

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 (261) hide show
  1. package/configs/inversify.config.ts +2 -0
  2. package/configs/inversify.types.ts +2 -1
  3. package/index.ts +6 -5
  4. package/package.json +1 -1
  5. package/pageobjects/dashboard/workspace-details/WorkspaceDetails.ts +10 -0
  6. package/pageobjects/ide/RestartWorkspaceDialog.ts +74 -0
  7. package/specs/restart-tests/RestartFromLocalDevfile.spec.ts +351 -0
  8. package/dist/configs/inversify.config.js +0 -121
  9. package/dist/configs/inversify.config.js.map +0 -1
  10. package/dist/configs/inversify.types.js +0 -73
  11. package/dist/configs/inversify.types.js.map +0 -1
  12. package/dist/configs/mocharc.js +0 -42
  13. package/dist/configs/mocharc.js.map +0 -1
  14. package/dist/constants/API_TEST_CONSTANTS.js +0 -60
  15. package/dist/constants/API_TEST_CONSTANTS.js.map +0 -1
  16. package/dist/constants/BASE_TEST_CONSTANTS.js +0 -109
  17. package/dist/constants/BASE_TEST_CONSTANTS.js.map +0 -1
  18. package/dist/constants/CHROME_DRIVER_CONSTANTS.js +0 -40
  19. package/dist/constants/CHROME_DRIVER_CONSTANTS.js.map +0 -1
  20. package/dist/constants/EDITOR_CONSTANTS.js +0 -114
  21. package/dist/constants/EDITOR_CONSTANTS.js.map +0 -1
  22. package/dist/constants/FACTORY_TEST_CONSTANTS.js +0 -87
  23. package/dist/constants/FACTORY_TEST_CONSTANTS.js.map +0 -1
  24. package/dist/constants/MOCHA_CONSTANTS.js +0 -24
  25. package/dist/constants/MOCHA_CONSTANTS.js.map +0 -1
  26. package/dist/constants/MONACO_CONSTANTS.js +0 -25
  27. package/dist/constants/MONACO_CONSTANTS.js.map +0 -1
  28. package/dist/constants/OAUTH_CONSTANTS.js +0 -53
  29. package/dist/constants/OAUTH_CONSTANTS.js.map +0 -1
  30. package/dist/constants/PLUGIN_TEST_CONSTANTS.js +0 -19
  31. package/dist/constants/PLUGIN_TEST_CONSTANTS.js.map +0 -1
  32. package/dist/constants/REPORTER_CONSTANTS.js +0 -123
  33. package/dist/constants/REPORTER_CONSTANTS.js.map +0 -1
  34. package/dist/constants/TIMEOUT_CONSTANTS.js +0 -101
  35. package/dist/constants/TIMEOUT_CONSTANTS.js.map +0 -1
  36. package/dist/driver/ChromeDriver.js +0 -77
  37. package/dist/driver/ChromeDriver.js.map +0 -1
  38. package/dist/driver/IDriver.js +0 -3
  39. package/dist/driver/IDriver.js.map +0 -1
  40. package/dist/index.js +0 -98
  41. package/dist/index.js.map +0 -1
  42. package/dist/pageobjects/dashboard/CreateWorkspace.js +0 -181
  43. package/dist/pageobjects/dashboard/CreateWorkspace.js.map +0 -1
  44. package/dist/pageobjects/dashboard/Dashboard.js +0 -208
  45. package/dist/pageobjects/dashboard/Dashboard.js.map +0 -1
  46. package/dist/pageobjects/dashboard/TrustAuthorPopup.js +0 -61
  47. package/dist/pageobjects/dashboard/TrustAuthorPopup.js.map +0 -1
  48. package/dist/pageobjects/dashboard/UserPreferences.js +0 -268
  49. package/dist/pageobjects/dashboard/UserPreferences.js.map +0 -1
  50. package/dist/pageobjects/dashboard/Workspaces.js +0 -242
  51. package/dist/pageobjects/dashboard/Workspaces.js.map +0 -1
  52. package/dist/pageobjects/dashboard/workspace-details/WorkspaceDetails.js +0 -186
  53. package/dist/pageobjects/dashboard/workspace-details/WorkspaceDetails.js.map +0 -1
  54. package/dist/pageobjects/git-providers/OauthPage.js +0 -218
  55. package/dist/pageobjects/git-providers/OauthPage.js.map +0 -1
  56. package/dist/pageobjects/ide/AiCodeSignInDialog.js +0 -55
  57. package/dist/pageobjects/ide/AiCodeSignInDialog.js.map +0 -1
  58. package/dist/pageobjects/ide/CheCodeLocatorLoader.js +0 -108
  59. package/dist/pageobjects/ide/CheCodeLocatorLoader.js.map +0 -1
  60. package/dist/pageobjects/ide/CommandPalette.js +0 -117
  61. package/dist/pageobjects/ide/CommandPalette.js.map +0 -1
  62. package/dist/pageobjects/ide/ExplorerView.js +0 -108
  63. package/dist/pageobjects/ide/ExplorerView.js.map +0 -1
  64. package/dist/pageobjects/ide/ExtensionsView.js +0 -162
  65. package/dist/pageobjects/ide/ExtensionsView.js.map +0 -1
  66. package/dist/pageobjects/ide/GitHubExtensionDialog.js +0 -66
  67. package/dist/pageobjects/ide/GitHubExtensionDialog.js.map +0 -1
  68. package/dist/pageobjects/ide/NotificationHandler.js +0 -83
  69. package/dist/pageobjects/ide/NotificationHandler.js.map +0 -1
  70. package/dist/pageobjects/ide/RestrictedModeButton.js +0 -57
  71. package/dist/pageobjects/ide/RestrictedModeButton.js.map +0 -1
  72. package/dist/pageobjects/ide/SourceControlView.js +0 -52
  73. package/dist/pageobjects/ide/SourceControlView.js.map +0 -1
  74. package/dist/pageobjects/ide/ViewsMoreActionsButton.js +0 -73
  75. package/dist/pageobjects/ide/ViewsMoreActionsButton.js.map +0 -1
  76. package/dist/pageobjects/login/interfaces/ICheLoginPage.js +0 -12
  77. package/dist/pageobjects/login/interfaces/ICheLoginPage.js.map +0 -1
  78. package/dist/pageobjects/login/interfaces/IOcpLoginPage.js +0 -12
  79. package/dist/pageobjects/login/interfaces/IOcpLoginPage.js.map +0 -1
  80. package/dist/pageobjects/login/kubernetes/DexLoginPage.js +0 -69
  81. package/dist/pageobjects/login/kubernetes/DexLoginPage.js.map +0 -1
  82. package/dist/pageobjects/login/kubernetes/KubernetesLoginPage.js +0 -50
  83. package/dist/pageobjects/login/kubernetes/KubernetesLoginPage.js.map +0 -1
  84. package/dist/pageobjects/login/openshift/OcpLoginPage.js +0 -88
  85. package/dist/pageobjects/login/openshift/OcpLoginPage.js.map +0 -1
  86. package/dist/pageobjects/login/openshift/OcpRedHatLoginPage.js +0 -73
  87. package/dist/pageobjects/login/openshift/OcpRedHatLoginPage.js.map +0 -1
  88. package/dist/pageobjects/login/openshift/OcpUserLoginPage.js +0 -53
  89. package/dist/pageobjects/login/openshift/OcpUserLoginPage.js.map +0 -1
  90. package/dist/pageobjects/login/openshift/RedHatLoginPage.js +0 -85
  91. package/dist/pageobjects/login/openshift/RedHatLoginPage.js.map +0 -1
  92. package/dist/pageobjects/login/openshift/RegularUserOcpCheLoginPage.js +0 -65
  93. package/dist/pageobjects/login/openshift/RegularUserOcpCheLoginPage.js.map +0 -1
  94. package/dist/pageobjects/openshift/OcpApplicationPage.js +0 -60
  95. package/dist/pageobjects/openshift/OcpApplicationPage.js.map +0 -1
  96. package/dist/pageobjects/openshift/OcpImportFromGitPage.js +0 -92
  97. package/dist/pageobjects/openshift/OcpImportFromGitPage.js.map +0 -1
  98. package/dist/pageobjects/openshift/OcpMainPage.js +0 -140
  99. package/dist/pageobjects/openshift/OcpMainPage.js.map +0 -1
  100. package/dist/pageobjects/webterminal/WebTerminalPage.js +0 -182
  101. package/dist/pageobjects/webterminal/WebTerminalPage.js.map +0 -1
  102. package/dist/specs/MochaHooks.js +0 -142
  103. package/dist/specs/MochaHooks.js.map +0 -1
  104. package/dist/specs/SmokeTest.spec.js +0 -58
  105. package/dist/specs/SmokeTest.spec.js.map +0 -1
  106. package/dist/specs/api/AnsibleDevFileAPI.spec.js +0 -263
  107. package/dist/specs/api/AnsibleDevFileAPI.spec.js.map +0 -1
  108. package/dist/specs/api/BuildPushRunPodmanContainerAPI.spec.js +0 -147
  109. package/dist/specs/api/BuildPushRunPodmanContainerAPI.spec.js.map +0 -1
  110. package/dist/specs/api/ContainerOverridesAPI.spec.js +0 -40
  111. package/dist/specs/api/ContainerOverridesAPI.spec.js.map +0 -1
  112. package/dist/specs/api/CppDevFileAPI.spec.js +0 -87
  113. package/dist/specs/api/CppDevFileAPI.spec.js.map +0 -1
  114. package/dist/specs/api/DevfileAcceptanceTestAPI.spec.js +0 -99
  115. package/dist/specs/api/DevfileAcceptanceTestAPI.spec.js.map +0 -1
  116. package/dist/specs/api/DotnetDevFileAPI.spec.js +0 -89
  117. package/dist/specs/api/DotnetDevFileAPI.spec.js.map +0 -1
  118. package/dist/specs/api/EmptyWorkspaceAPI.spec.js +0 -60
  119. package/dist/specs/api/EmptyWorkspaceAPI.spec.js.map +0 -1
  120. package/dist/specs/api/GoDevFileAPI.spec.js +0 -82
  121. package/dist/specs/api/GoDevFileAPI.spec.js.map +0 -1
  122. package/dist/specs/api/InbuiltApplicationDevWorkspacesAPI.spec.js +0 -97
  123. package/dist/specs/api/InbuiltApplicationDevWorkspacesAPI.spec.js.map +0 -1
  124. package/dist/specs/api/JBossEapDevFileAPI.spec.js +0 -127
  125. package/dist/specs/api/JBossEapDevFileAPI.spec.js.map +0 -1
  126. package/dist/specs/api/LombokDevFileAPI.spec.js +0 -81
  127. package/dist/specs/api/LombokDevFileAPI.spec.js.map +0 -1
  128. package/dist/specs/api/NodeJSMongoDBDevFileAPI.spec.js +0 -81
  129. package/dist/specs/api/NodeJSMongoDBDevFileAPI.spec.js.map +0 -1
  130. package/dist/specs/api/NodeJsExpressDevFileAPI.spec.js +0 -130
  131. package/dist/specs/api/NodeJsExpressDevFileAPI.spec.js.map +0 -1
  132. package/dist/specs/api/PhpDevFileAPI.spec.js +0 -71
  133. package/dist/specs/api/PhpDevFileAPI.spec.js.map +0 -1
  134. package/dist/specs/api/PodOverridesAPI.spec.js +0 -46
  135. package/dist/specs/api/PodOverridesAPI.spec.js.map +0 -1
  136. package/dist/specs/api/PythonDevFileAPI.spec.js +0 -71
  137. package/dist/specs/api/PythonDevFileAPI.spec.js.map +0 -1
  138. package/dist/specs/api/QuarkusDevFileAPI.spec.js +0 -97
  139. package/dist/specs/api/QuarkusDevFileAPI.spec.js.map +0 -1
  140. package/dist/specs/dashboard-samples/Documentation.spec.js +0 -118
  141. package/dist/specs/dashboard-samples/Documentation.spec.js.map +0 -1
  142. package/dist/specs/dashboard-samples/EmptyWorkspace.spec.js +0 -60
  143. package/dist/specs/dashboard-samples/EmptyWorkspace.spec.js.map +0 -1
  144. package/dist/specs/dashboard-samples/Quarkus.spec.js +0 -64
  145. package/dist/specs/dashboard-samples/Quarkus.spec.js.map +0 -1
  146. package/dist/specs/dashboard-samples/RecommendedExtensions.spec.js +0 -345
  147. package/dist/specs/dashboard-samples/RecommendedExtensions.spec.js.map +0 -1
  148. package/dist/specs/dashboard-samples/StartWorkspaceUsingDesktopEditors.spec.js +0 -171
  149. package/dist/specs/dashboard-samples/StartWorkspaceUsingDesktopEditors.spec.js.map +0 -1
  150. package/dist/specs/devconsole-intergration/DevConsoleIntegration.spec.js +0 -155
  151. package/dist/specs/devconsole-intergration/DevConsoleIntegration.spec.js.map +0 -1
  152. package/dist/specs/factory/Factory.spec.js +0 -183
  153. package/dist/specs/factory/Factory.spec.js.map +0 -1
  154. package/dist/specs/factory/FactoryWithGitRepoOptions.spec.js +0 -63
  155. package/dist/specs/factory/FactoryWithGitRepoOptions.spec.js.map +0 -1
  156. package/dist/specs/factory/NoSetupRepoFactory.spec.js +0 -212
  157. package/dist/specs/factory/NoSetupRepoFactory.spec.js.map +0 -1
  158. package/dist/specs/factory/RefusedOAuthFactory.spec.js +0 -239
  159. package/dist/specs/factory/RefusedOAuthFactory.spec.js.map +0 -1
  160. package/dist/specs/factory/SshUrlNoOauthPatFactory.spec.js +0 -202
  161. package/dist/specs/factory/SshUrlNoOauthPatFactory.spec.js.map +0 -1
  162. package/dist/specs/miscellaneous/CreateWorkspaceWithExistedName.spec.js +0 -77
  163. package/dist/specs/miscellaneous/CreateWorkspaceWithExistedName.spec.js.map +0 -1
  164. package/dist/specs/miscellaneous/CreateWorkspaceWithExistingNameFromEmptyWorkspaceSample.spec.js +0 -106
  165. package/dist/specs/miscellaneous/CreateWorkspaceWithExistingNameFromEmptyWorkspaceSample.spec.js.map +0 -1
  166. package/dist/specs/miscellaneous/CreateWorkspaceWithExistingNameFromGitUrl.spec.js +0 -113
  167. package/dist/specs/miscellaneous/CreateWorkspaceWithExistingNameFromGitUrl.spec.js.map +0 -1
  168. package/dist/specs/miscellaneous/CreateWorkspaceWithExistingNameFromSample.spec.js +0 -116
  169. package/dist/specs/miscellaneous/CreateWorkspaceWithExistingNameFromSample.spec.js.map +0 -1
  170. package/dist/specs/miscellaneous/CustomOpenVSXRegistry.spec.js +0 -205
  171. package/dist/specs/miscellaneous/CustomOpenVSXRegistry.spec.js.map +0 -1
  172. package/dist/specs/miscellaneous/ExtensionActivationTest.spec.js +0 -129
  173. package/dist/specs/miscellaneous/ExtensionActivationTest.spec.js.map +0 -1
  174. package/dist/specs/miscellaneous/KubedockPodmanPersistUserHomeTest.spec.js +0 -121
  175. package/dist/specs/miscellaneous/KubedockPodmanPersistUserHomeTest.spec.js.map +0 -1
  176. package/dist/specs/miscellaneous/KubedockPodmanTest.spec.js +0 -103
  177. package/dist/specs/miscellaneous/KubedockPodmanTest.spec.js.map +0 -1
  178. package/dist/specs/miscellaneous/PredefinedNamespace.spec.js +0 -111
  179. package/dist/specs/miscellaneous/PredefinedNamespace.spec.js.map +0 -1
  180. package/dist/specs/miscellaneous/RenameWorkspace.spec.js +0 -116
  181. package/dist/specs/miscellaneous/RenameWorkspace.spec.js.map +0 -1
  182. package/dist/specs/miscellaneous/RevokeOauth.spec.js +0 -29
  183. package/dist/specs/miscellaneous/RevokeOauth.spec.js.map +0 -1
  184. package/dist/specs/miscellaneous/UserPreferencesTest.spec.js +0 -26
  185. package/dist/specs/miscellaneous/UserPreferencesTest.spec.js.map +0 -1
  186. package/dist/specs/miscellaneous/UserSecretsInWorkspace.spec.js +0 -78
  187. package/dist/specs/miscellaneous/UserSecretsInWorkspace.spec.js.map +0 -1
  188. package/dist/specs/miscellaneous/VsixInstallationDisableTest.spec.js +0 -196
  189. package/dist/specs/miscellaneous/VsixInstallationDisableTest.spec.js.map +0 -1
  190. package/dist/specs/miscellaneous/WorkspaceBackupRestore.spec.js +0 -208
  191. package/dist/specs/miscellaneous/WorkspaceBackupRestore.spec.js.map +0 -1
  192. package/dist/specs/miscellaneous/WorkspaceIdleTimeout.spec.js +0 -84
  193. package/dist/specs/miscellaneous/WorkspaceIdleTimeout.spec.js.map +0 -1
  194. package/dist/specs/miscellaneous/WorkspaceRunTimeout.spec.js +0 -84
  195. package/dist/specs/miscellaneous/WorkspaceRunTimeout.spec.js.map +0 -1
  196. package/dist/specs/miscellaneous/WorkspaceWithParent.spec.js +0 -101
  197. package/dist/specs/miscellaneous/WorkspaceWithParent.spec.js.map +0 -1
  198. package/dist/specs/web-terminal/WebTerminalTest.spec.js +0 -47
  199. package/dist/specs/web-terminal/WebTerminalTest.spec.js.map +0 -1
  200. package/dist/specs/web-terminal/WebTerminalUnderAdmin.spec.js +0 -82
  201. package/dist/specs/web-terminal/WebTerminalUnderAdmin.spec.js.map +0 -1
  202. package/dist/specs/web-terminal/WebTerminalUnderRegularUser.spec.js +0 -78
  203. package/dist/specs/web-terminal/WebTerminalUnderRegularUser.spec.js.map +0 -1
  204. package/dist/suites/devfile-acceptance-test-suite/DynamicallyGeneratingAPITest.suite.js +0 -13
  205. package/dist/suites/devfile-acceptance-test-suite/DynamicallyGeneratingAPITest.suite.js.map +0 -1
  206. package/dist/suites/disconnected-ocp/APITest.suite.js +0 -14
  207. package/dist/suites/disconnected-ocp/APITest.suite.js.map +0 -1
  208. package/dist/suites/disconnected-ocp/DynamicallyGeneratingAPITest.suite.js +0 -13
  209. package/dist/suites/disconnected-ocp/DynamicallyGeneratingAPITest.suite.js.map +0 -1
  210. package/dist/suites/disconnected-ocp/UITest.suite.js +0 -19
  211. package/dist/suites/disconnected-ocp/UITest.suite.js.map +0 -1
  212. package/dist/suites/online-ocp/APITest.suite.js +0 -15
  213. package/dist/suites/online-ocp/APITest.suite.js.map +0 -1
  214. package/dist/suites/online-ocp/DynamicallyGeneratingAPITest.suite.js +0 -13
  215. package/dist/suites/online-ocp/DynamicallyGeneratingAPITest.suite.js.map +0 -1
  216. package/dist/suites/online-ocp/UITest.suite.js +0 -23
  217. package/dist/suites/online-ocp/UITest.suite.js.map +0 -1
  218. package/dist/tests-library/LoginTests.js +0 -76
  219. package/dist/tests-library/LoginTests.js.map +0 -1
  220. package/dist/tests-library/ProjectAndFileTests.js +0 -230
  221. package/dist/tests-library/ProjectAndFileTests.js.map +0 -1
  222. package/dist/tests-library/WorkspaceHandlingTests.js +0 -219
  223. package/dist/tests-library/WorkspaceHandlingTests.js.map +0 -1
  224. package/dist/utils/BrowserTabsUtil.js +0 -124
  225. package/dist/utils/BrowserTabsUtil.js.map +0 -1
  226. package/dist/utils/CheReporter.js +0 -238
  227. package/dist/utils/CheReporter.js.map +0 -1
  228. package/dist/utils/DevWorkspaceConfigurationHelper.js +0 -145
  229. package/dist/utils/DevWorkspaceConfigurationHelper.js.map +0 -1
  230. package/dist/utils/DevfilesHelper.js +0 -177
  231. package/dist/utils/DevfilesHelper.js.map +0 -1
  232. package/dist/utils/DriverHelper.js +0 -609
  233. package/dist/utils/DriverHelper.js.map +0 -1
  234. package/dist/utils/IContextParams.js +0 -12
  235. package/dist/utils/IContextParams.js.map +0 -1
  236. package/dist/utils/IKubernetesCommandLineToolsExecutor.js +0 -3
  237. package/dist/utils/IKubernetesCommandLineToolsExecutor.js.map +0 -1
  238. package/dist/utils/KubernetesCommandLineToolsExecutor.js +0 -338
  239. package/dist/utils/KubernetesCommandLineToolsExecutor.js.map +0 -1
  240. package/dist/utils/Logger.js +0 -146
  241. package/dist/utils/Logger.js.map +0 -1
  242. package/dist/utils/ScreenCatcher.js +0 -114
  243. package/dist/utils/ScreenCatcher.js.map +0 -1
  244. package/dist/utils/ShellExecutor.js +0 -47
  245. package/dist/utils/ShellExecutor.js.map +0 -1
  246. package/dist/utils/StringUtil.js +0 -107
  247. package/dist/utils/StringUtil.js.map +0 -1
  248. package/dist/utils/request-handlers/CheApiRequestHandler.js +0 -128
  249. package/dist/utils/request-handlers/CheApiRequestHandler.js.map +0 -1
  250. package/dist/utils/request-handlers/headers/CheMultiuserAuthorizationHeaderHandler.js +0 -55
  251. package/dist/utils/request-handlers/headers/CheMultiuserAuthorizationHeaderHandler.js.map +0 -1
  252. package/dist/utils/request-handlers/headers/IAuthorizationHeaderHandler.js +0 -12
  253. package/dist/utils/request-handlers/headers/IAuthorizationHeaderHandler.js.map +0 -1
  254. package/dist/utils/workspace/ApiUrlResolver.js +0 -117
  255. package/dist/utils/workspace/ApiUrlResolver.js.map +0 -1
  256. package/dist/utils/workspace/ITestWorkspaceUtil.js +0 -12
  257. package/dist/utils/workspace/ITestWorkspaceUtil.js.map +0 -1
  258. package/dist/utils/workspace/TestWorkspaceUtil.js +0 -202
  259. package/dist/utils/workspace/TestWorkspaceUtil.js.map +0 -1
  260. package/dist/utils/workspace/WorkspaceStatus.js +0 -19
  261. package/dist/utils/workspace/WorkspaceStatus.js.map +0 -1
@@ -63,6 +63,7 @@ import { NotificationHandler } from '../pageobjects/ide/NotificationHandler';
63
63
  import { SourceControlView } from '../pageobjects/ide/SourceControlView';
64
64
  import { GitHubExtensionDialog } from '../pageobjects/ide/GitHubExtensionDialog';
65
65
  import { AiCodeSignInDialog } from '../pageobjects/ide/AiCodeSignInDialog';
66
+ import { RestartWorkspaceDialog } from '../pageobjects/ide/RestartWorkspaceDialog';
66
67
 
67
68
  const e2eContainer: Container = new Container({ defaultScope: 'Transient', skipBaseClassChecks: true });
68
69
 
@@ -111,6 +112,7 @@ e2eContainer.bind<NotificationHandler>(CLASSES.NotificationHandler).to(Notificat
111
112
  e2eContainer.bind<SourceControlView>(CLASSES.SourceControlView).to(SourceControlView);
112
113
  e2eContainer.bind<GitHubExtensionDialog>(CLASSES.GitHubExtensionDialog).to(GitHubExtensionDialog);
113
114
  e2eContainer.bind<AiCodeSignInDialog>(CLASSES.AiCodeSignInDialog).to(AiCodeSignInDialog);
115
+ e2eContainer.bind<RestartWorkspaceDialog>(CLASSES.RestartWorkspaceDialog).to(RestartWorkspaceDialog);
114
116
 
115
117
  if (BASE_TEST_CONSTANTS.TS_PLATFORM === Platform.OPENSHIFT) {
116
118
  if (OAUTH_CONSTANTS.TS_SELENIUM_VALUE_OPENSHIFT_OAUTH) {
@@ -60,7 +60,8 @@ const CLASSES: any = {
60
60
  NotificationHandler: 'NotificationHandler',
61
61
  SourceControlView: 'SourceControlView',
62
62
  GitHubExtensionDialog: 'GitHubExtensionDialog',
63
- AiCodeSignInDialog: 'AiCodeSignInDialog'
63
+ AiCodeSignInDialog: 'AiCodeSignInDialog',
64
+ RestartWorkspaceDialog: 'RestartWorkspaceDialog'
64
65
  };
65
66
 
66
67
  const EXTERNAL_CLASSES: any = {
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/DevWorkspaceConfigurationHelper';
9
8
  export * from './utils/DevfilesHelper';
9
+ export * from './utils/DevWorkspaceConfigurationHelper';
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/ScreenCatcher';
16
- export * from './utils/ShellExecutor';
17
- export * from './utils/StringUtil';
18
15
  export * from './utils/request-handlers/CheApiRequestHandler';
19
16
  export * from './utils/request-handlers/headers/CheMultiuserAuthorizationHeaderHandler';
20
17
  export * from './utils/request-handlers/headers/IAuthorizationHeaderHandler';
18
+ export * from './utils/ScreenCatcher';
19
+ export * from './utils/ShellExecutor';
20
+ export * from './utils/StringUtil';
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/Workspaces';
30
29
  export * from './pageobjects/dashboard/workspace-details/WorkspaceDetails';
30
+ export * from './pageobjects/dashboard/Workspaces';
31
31
  export * from './pageobjects/git-providers/OauthPage';
32
32
  export * from './pageobjects/ide/AiCodeSignInDialog';
33
33
  export * from './pageobjects/ide/CheCodeLocatorLoader';
@@ -36,6 +36,7 @@ export * from './pageobjects/ide/ExplorerView';
36
36
  export * from './pageobjects/ide/ExtensionsView';
37
37
  export * from './pageobjects/ide/GitHubExtensionDialog';
38
38
  export * from './pageobjects/ide/NotificationHandler';
39
+ export * from './pageobjects/ide/RestartWorkspaceDialog';
39
40
  export * from './pageobjects/ide/RestrictedModeButton';
40
41
  export * from './pageobjects/ide/SourceControlView';
41
42
  export * from './pageobjects/ide/ViewsMoreActionsButton';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eclipse-che/che-e2e",
3
- "version": "7.122.0-next-4d9831f",
3
+ "version": "7.123.0-next",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -26,6 +26,10 @@ export class WorkspaceDetails {
26
26
  private static readonly ENABLED_SAVE_BUTTON: By = By.css('button[name="save-button"][aria-disabled="false"]');
27
27
  private static readonly WORKSPACE_DETAILS_LOADER: By = By.css('workspace-details-overview md-progress-linear');
28
28
  private static readonly STORAGE_TYPE_INFO_BUTTON: By = By.css('span[aria-label="More info for storage type"]');
29
+ private static readonly STORAGE_TYPE_VALUE: By = By.xpath(
30
+ '//span[@aria-label="More info for storage type"]/ancestor::div[contains(@class, "pf-v6-c-form__group")]' +
31
+ '//div[contains(@class, "pf-v6-c-form__group-control")]/span'
32
+ );
29
33
  private static readonly CLOSE_STORAGE_TYPE_INFO_BUTTON: By = By.xpath('//button[@aria-label="Close"]');
30
34
  private static readonly STORAGE_TYPE_DOC_LINK: By = By.xpath('//div/p/a');
31
35
  private static readonly DEVFILE_DOC_LINK: By = By.xpath('//a[text()="Devfile Documentation"]');
@@ -126,6 +130,12 @@ export class WorkspaceDetails {
126
130
  await this.clickOnTab(tabTitle, timeout);
127
131
  }
128
132
 
133
+ async getStorageTypeValue(timeout: number = TIMEOUT_CONSTANTS.TS_COMMON_DASHBOARD_WAIT_TIMEOUT): Promise<string> {
134
+ Logger.debug();
135
+
136
+ return await this.driverHelper.waitAndGetText(WorkspaceDetails.STORAGE_TYPE_VALUE, timeout);
137
+ }
138
+
129
139
  async clickStorageTypeInfo(): Promise<void> {
130
140
  Logger.debug();
131
141
 
@@ -0,0 +1,74 @@
1
+ /** *******************************************************************
2
+ * copyright (c) 2026 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
+ import { inject, injectable } from 'inversify';
11
+ import { CLASSES } from '../../configs/inversify.types';
12
+ import { By, Key, WebElement } from 'selenium-webdriver';
13
+ import { DriverHelper } from '../../utils/DriverHelper';
14
+ import { Logger } from '../../utils/Logger';
15
+ import { TIMEOUT_CONSTANTS } from '../../constants/TIMEOUT_CONSTANTS';
16
+
17
+ @injectable()
18
+ export class RestartWorkspaceDialog {
19
+ private static readonly RESTART_BUTTON: By = By.xpath('//div[@class="dialog-buttons"]//a[text()="Restart"]');
20
+ private static readonly RESTART_WORKSPACE_BUTTON: By = By.xpath('//div[@class="dialog-buttons"]//a[text()="Restart your workspace"]');
21
+ private static readonly RESTART_WITH_DEFAULT_DEVFILE_BUTTON: By = By.xpath('//span[text()="Restart with default devfile"]');
22
+ private static readonly ERROR_DIALOG_TEXT: By = By.xpath('//*[@class="dialog-message-text"]');
23
+ private static readonly ERROR_DIALOG_DETAIL: By = By.xpath('//*[@class="dialog-message-detail"]');
24
+
25
+ constructor(
26
+ @inject(CLASSES.DriverHelper)
27
+ private readonly driverHelper: DriverHelper
28
+ ) {}
29
+
30
+ async restartFromLocalDevfile(projectName: string): Promise<void> {
31
+ Logger.debug();
32
+
33
+ await this.driverHelper.getDriver().actions().keyDown(Key.CONTROL).sendKeys('p').keyUp(Key.CONTROL).perform();
34
+ await this.driverHelper.wait(TIMEOUT_CONSTANTS.TS_SELENIUM_DEFAULT_POLLING);
35
+
36
+ await this.driverHelper.getDriver().actions().sendKeys('>Dev Spaces: Restart Workspace from Local Devfile').perform();
37
+ await this.driverHelper.wait(TIMEOUT_CONSTANTS.TS_SELENIUM_DEFAULT_POLLING);
38
+ await this.driverHelper.getDriver().actions().sendKeys(Key.ENTER).perform();
39
+ await this.driverHelper.wait(TIMEOUT_CONSTANTS.TS_SELENIUM_DEFAULT_POLLING);
40
+
41
+ await this.driverHelper.getDriver().actions().sendKeys(`/projects/${projectName}/devfile.yaml`).perform();
42
+ await this.driverHelper.wait(TIMEOUT_CONSTANTS.TS_SELENIUM_DEFAULT_POLLING);
43
+ await this.driverHelper.getDriver().actions().sendKeys(Key.ENTER).perform();
44
+ await this.driverHelper.wait(TIMEOUT_CONSTANTS.TS_SELENIUM_DEFAULT_POLLING);
45
+
46
+ await this.driverHelper.waitAndClick(RestartWorkspaceDialog.RESTART_BUTTON);
47
+ }
48
+
49
+ async confirmRestartWorkspace(timeout: number = TIMEOUT_CONSTANTS.TS_COMMON_PLUGIN_TEST_TIMEOUT): Promise<void> {
50
+ Logger.debug();
51
+
52
+ await this.driverHelper.waitAndClick(RestartWorkspaceDialog.RESTART_WORKSPACE_BUTTON, timeout);
53
+ }
54
+
55
+ async clickRestartWithDefaultDevfile(timeout: number = TIMEOUT_CONSTANTS.TS_SELENIUM_START_WORKSPACE_TIMEOUT): Promise<void> {
56
+ Logger.debug();
57
+
58
+ await this.driverHelper.waitAndClick(RestartWorkspaceDialog.RESTART_WITH_DEFAULT_DEVFILE_BUTTON, timeout);
59
+ }
60
+
61
+ async getErrorDialogText(timeout: number = TIMEOUT_CONSTANTS.TS_COMMON_PLUGIN_TEST_TIMEOUT): Promise<string> {
62
+ Logger.debug();
63
+
64
+ const element: WebElement = await this.driverHelper.waitVisibility(RestartWorkspaceDialog.ERROR_DIALOG_TEXT, timeout);
65
+ return element.getText();
66
+ }
67
+
68
+ async getErrorDetailText(timeout: number = TIMEOUT_CONSTANTS.TS_COMMON_PLUGIN_TEST_TIMEOUT): Promise<string> {
69
+ Logger.debug();
70
+
71
+ const element: WebElement = await this.driverHelper.waitVisibility(RestartWorkspaceDialog.ERROR_DIALOG_DETAIL, timeout);
72
+ return element.getText();
73
+ }
74
+ }
@@ -0,0 +1,351 @@
1
+ /** *******************************************************************
2
+ * copyright (c) 2026 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 { ContainerTerminal, KubernetesCommandLineToolsExecutor } from '../../utils/KubernetesCommandLineToolsExecutor';
12
+ import { expect } from 'chai';
13
+ import { ShellString } from 'shelljs';
14
+ import { BASE_TEST_CONSTANTS } from '../../constants/BASE_TEST_CONSTANTS';
15
+ import { TIMEOUT_CONSTANTS } from '../../constants/TIMEOUT_CONSTANTS';
16
+ import { e2eContainer } from '../../configs/inversify.config';
17
+ import { CLASSES } from '../../configs/inversify.types';
18
+ import { ShellExecutor } from '../../utils/ShellExecutor';
19
+ import { Logger } from '../../utils/Logger';
20
+ import { LoginTests } from '../../tests-library/LoginTests';
21
+ import { WorkspaceHandlingTests } from '../../tests-library/WorkspaceHandlingTests';
22
+ import { Dashboard } from '../../pageobjects/dashboard/Dashboard';
23
+ import { Workspaces } from '../../pageobjects/dashboard/Workspaces';
24
+ import { WorkspaceDetails } from '../../pageobjects/dashboard/workspace-details/WorkspaceDetails';
25
+ import { BrowserTabsUtil } from '../../utils/BrowserTabsUtil';
26
+ import { DriverHelper } from '../../utils/DriverHelper';
27
+ import { ProjectAndFileTests } from '../../tests-library/ProjectAndFileTests';
28
+ import { RestartWorkspaceDialog } from '../../pageobjects/ide/RestartWorkspaceDialog';
29
+ import { By } from 'selenium-webdriver';
30
+ import { registerRunningWorkspace } from '../MochaHooks';
31
+
32
+ suite(`Test case with empty workspace (per-user storage) ${BASE_TEST_CONSTANTS.TEST_ENVIRONMENT}`, function (): void {
33
+ const loginTests: LoginTests = e2eContainer.get(CLASSES.LoginTests);
34
+ const workspaceHandlingTests: WorkspaceHandlingTests = e2eContainer.get(CLASSES.WorkspaceHandlingTests);
35
+ const dashboard: Dashboard = e2eContainer.get(CLASSES.Dashboard);
36
+ const browserTabsUtil: BrowserTabsUtil = e2eContainer.get(CLASSES.BrowserTabsUtil);
37
+ const driverHelper: DriverHelper = e2eContainer.get(CLASSES.DriverHelper);
38
+ const projectAndFileTests: ProjectAndFileTests = e2eContainer.get(CLASSES.ProjectAndFileTests);
39
+ const containerTerminal: ContainerTerminal = e2eContainer.get(CLASSES.ContainerTerminal);
40
+ const kubernetesCommandLineToolsExecutor: KubernetesCommandLineToolsExecutor = e2eContainer.get(
41
+ CLASSES.KubernetesCommandLineToolsExecutor
42
+ );
43
+ const shellExecutor: ShellExecutor = e2eContainer.get(CLASSES.ShellExecutor);
44
+ const restartWorkspaceDialog: RestartWorkspaceDialog = e2eContainer.get(CLASSES.RestartWorkspaceDialog);
45
+ const testFileName: string = 'test-new-file.txt';
46
+ const testFileContent: string = 'test file content for restart verification';
47
+ const gitRepository: string = BASE_TEST_CONSTANTS.IS_CLUSTER_DISCONNECTED()
48
+ ? 'https://gh.crw-qe.com/test-automation-only/devfile-with-typo'
49
+ : 'https://github.com/dmytro-ndp/devfile-with-typo';
50
+ const projectName: string = 'devfile-with-typo';
51
+ let currentTabHandle: string = 'undefined';
52
+ const editorXpath: string = '//*[@id="editor-selector-card-che-incubator/che-code/latest"]';
53
+ const xPathToWaitFor: string = '//*[@id="workbench.parts.sidebar"]';
54
+ const cheClusterName: string = 'devspaces';
55
+ let originalStorageStrategy: string = '';
56
+
57
+ suiteSetup('Login into Che and set per-user storage strategy', async function (): Promise<void> {
58
+ kubernetesCommandLineToolsExecutor.loginToOcp();
59
+ shellExecutor.executeCommand('oc project openshift-devspaces');
60
+
61
+ originalStorageStrategy = shellExecutor
62
+ .executeCommand(`oc get checluster/${cheClusterName} -o "jsonpath={.spec.devEnvironments.storage.pvcStrategy}"`)
63
+ .stdout.trim();
64
+
65
+ if (originalStorageStrategy !== 'per-user') {
66
+ const patchResult: ShellString = shellExecutor.executeCommand(
67
+ `oc patch checluster ${cheClusterName} --type=merge ` +
68
+ '-p \'{"spec":{"devEnvironments":{"storage":{"pvcStrategy":"per-user"}}}}\''
69
+ );
70
+ expect(patchResult.code).to.equal(0, 'Failed to patch CheCluster to set per-user storage strategy');
71
+ }
72
+
73
+ await loginTests.loginIntoChe();
74
+ });
75
+
76
+ function clearCurrentTabHandle(): void {
77
+ currentTabHandle = 'undefined';
78
+ }
79
+
80
+ test('Create Empty workspace', async function (): Promise<void> {
81
+ await dashboard.openDashboard();
82
+ currentTabHandle = await browserTabsUtil.getCurrentWindowHandle();
83
+ await dashboard.clickCreateWorkspaceButton();
84
+ await workspaceHandlingTests.createAndOpenWorkspaceWithSpecificEditorAndSample(editorXpath, 'Empty Workspace', xPathToWaitFor);
85
+ registerRunningWorkspace(WorkspaceHandlingTests.getWorkspaceName());
86
+ });
87
+
88
+ test('Setup workspace context for API operations', function (): void {
89
+ kubernetesCommandLineToolsExecutor.workspaceName = WorkspaceHandlingTests.getWorkspaceName();
90
+ kubernetesCommandLineToolsExecutor.getPodAndContainerNames();
91
+ });
92
+
93
+ test('Clone devfile-with-typo repository', function (): void {
94
+ const cloneOutput: ShellString = containerTerminal.gitClone(gitRepository);
95
+ expect(cloneOutput.stdout + cloneOutput.stderr).includes('Cloning');
96
+ });
97
+
98
+ test('Accept the project as a trusted one', async function (): Promise<void> {
99
+ await projectAndFileTests.performTrustAuthorDialog();
100
+ });
101
+
102
+ test('Verify cloned project exists', function (): void {
103
+ expect(containerTerminal.ls().stdout).includes(projectName);
104
+ });
105
+
106
+ test('Create new file in project root', function (): void {
107
+ const output: ShellString = containerTerminal.execInContainerCommand(
108
+ `echo "${testFileContent}" > /projects/${projectName}/${testFileName}`
109
+ );
110
+ expect(output.code).to.equal(0);
111
+ });
112
+
113
+ test('Restart workspace from local devfile with bad image', async function (): Promise<void> {
114
+ await restartWorkspaceDialog.restartFromLocalDevfile(projectName);
115
+ Logger.info('Waiting for "Restart Workspace" confirmation popup');
116
+ await restartWorkspaceDialog.confirmRestartWorkspace();
117
+ });
118
+
119
+ test('Wait for workspace start failure and restart', async function (): Promise<void> {
120
+ Logger.info('Waiting for workspace to enter Failed phase and restart with default devfile');
121
+ await restartWorkspaceDialog.clickRestartWithDefaultDevfile();
122
+ await driverHelper.waitVisibility(By.xpath(xPathToWaitFor), TIMEOUT_CONSTANTS.TS_IDE_START_TIMEOUT);
123
+ });
124
+
125
+ test('Re-initialize workspace context after restart', function (): void {
126
+ kubernetesCommandLineToolsExecutor.getPodAndContainerNames();
127
+ });
128
+
129
+ test('Verify project exists with cloned files after restart', function (): void {
130
+ expect(containerTerminal.ls().stdout).includes(projectName);
131
+ expect(containerTerminal.ls(`/projects/${projectName}`).stdout).includes('devfile.yaml');
132
+ });
133
+
134
+ test('Verify new file is present in project root after restart', function (): void {
135
+ const output: ShellString = containerTerminal.execInContainerCommand(`cat /projects/${projectName}/${testFileName}`);
136
+ expect(output.stdout.trim()).to.equal(testFileContent);
137
+ });
138
+
139
+ test('Verify devfile schema validation error on invalid env declaration', async function (): Promise<void> {
140
+ Logger.info('Appending invalid env declaration to devfile.yaml');
141
+ const appendOutput: ShellString = containerTerminal.execInContainerCommand(
142
+ `echo " env:" >> /projects/${projectName}/devfile.yaml && ` +
143
+ `echo " - name: test-env" >> /projects/${projectName}/devfile.yaml && ` +
144
+ `echo " value: true" >> /projects/${projectName}/devfile.yaml`
145
+ );
146
+ expect(appendOutput.code).to.equal(0, 'Failed to append invalid env content to devfile.yaml');
147
+
148
+ Logger.info('Restart from local devfile');
149
+ await restartWorkspaceDialog.restartFromLocalDevfile(projectName);
150
+
151
+ Logger.info('Check error popup');
152
+ const dialogText: string = await restartWorkspaceDialog.getErrorDialogText();
153
+ Logger.info(`Error dialog title text: ${dialogText}`);
154
+
155
+ const detailText: string = await restartWorkspaceDialog.getErrorDetailText();
156
+ Logger.info(`Error dialog detail text: ${detailText}`);
157
+
158
+ expect(detailText).to.equal(
159
+ 'Devfile schema validation failed. Error: 0: instance.components[0] is not allowed to have the additional property "env"'
160
+ );
161
+ });
162
+
163
+ suiteTeardown('Delete DevWorkspace', async function (): Promise<void> {
164
+ Logger.debug('Delete DevWorkspace. After each test.');
165
+ if (currentTabHandle !== 'undefined') {
166
+ await browserTabsUtil.switchToWindow(currentTabHandle);
167
+ }
168
+
169
+ await dashboard.openDashboard();
170
+ await browserTabsUtil.closeAllTabsExceptCurrent();
171
+
172
+ if (WorkspaceHandlingTests.getWorkspaceName() !== 'undefined') {
173
+ Logger.debug('Workspace name is defined. Deleting workspace...');
174
+ await dashboard.deleteStoppedWorkspaceByUI(WorkspaceHandlingTests.getWorkspaceName());
175
+ }
176
+
177
+ WorkspaceHandlingTests.clearWorkspaceName();
178
+ clearCurrentTabHandle();
179
+ registerRunningWorkspace('');
180
+
181
+ if (originalStorageStrategy !== '' && originalStorageStrategy !== 'per-user') {
182
+ const restoreResult: ShellString = shellExecutor.executeCommand(
183
+ `oc patch checluster ${cheClusterName} --type=merge ` +
184
+ `-p '{"spec":{"devEnvironments":{"storage":{"pvcStrategy":"${originalStorageStrategy}"}}}}'`
185
+ );
186
+ expect(restoreResult.code).to.equal(0, 'Failed to restore CheCluster storage strategy');
187
+ }
188
+ });
189
+ });
190
+
191
+ suite(`Test case with pvc-fail workspace (bad image restart) ${BASE_TEST_CONSTANTS.TEST_ENVIRONMENT}`, function (): void {
192
+ const loginTests: LoginTests = e2eContainer.get(CLASSES.LoginTests);
193
+ const workspaceHandlingTests: WorkspaceHandlingTests = e2eContainer.get(CLASSES.WorkspaceHandlingTests);
194
+ const dashboard: Dashboard = e2eContainer.get(CLASSES.Dashboard);
195
+ const workspaces: Workspaces = e2eContainer.get(CLASSES.Workspaces);
196
+ const workspaceDetails: WorkspaceDetails = e2eContainer.get(CLASSES.WorkspaceDetails);
197
+ const browserTabsUtil: BrowserTabsUtil = e2eContainer.get(CLASSES.BrowserTabsUtil);
198
+ const driverHelper: DriverHelper = e2eContainer.get(CLASSES.DriverHelper);
199
+ const containerTerminal: ContainerTerminal = e2eContainer.get(CLASSES.ContainerTerminal);
200
+ const kubernetesCommandLineToolsExecutor: KubernetesCommandLineToolsExecutor = e2eContainer.get(
201
+ CLASSES.KubernetesCommandLineToolsExecutor
202
+ );
203
+ const projectAndFileTests: ProjectAndFileTests = e2eContainer.get(CLASSES.ProjectAndFileTests);
204
+ const shellExecutor: ShellExecutor = e2eContainer.get(CLASSES.ShellExecutor);
205
+ const restartWorkspaceDialog: RestartWorkspaceDialog = e2eContainer.get(CLASSES.RestartWorkspaceDialog);
206
+ const testFileName: string = 'test-new-file.txt';
207
+ const testFileContent: string = 'test file content for pvc-fail restart verification';
208
+ const gitRepository: string = 'https://github.com/cgruver/test-workspace/tree/pvc-fail';
209
+ const projectName: string = 'test-workspace';
210
+ let currentTabHandle: string = 'undefined';
211
+ const xPathToWaitFor: string = '//*[@id="workbench.parts.sidebar"]';
212
+ const editorXpath: string = '//*[@id="editor-selector-card-che-incubator/che-code/latest"]';
213
+ const cheClusterName: string = 'devspaces';
214
+ let originalStorageStrategy: string = '';
215
+
216
+ suiteSetup('Skip suite on disconnected clusters', function (): void {
217
+ if (BASE_TEST_CONSTANTS.IS_CLUSTER_DISCONNECTED()) {
218
+ Logger.info('Test cluster is disconnected. Skipping pvc-fail workspace suite.');
219
+ this.skip();
220
+ }
221
+ });
222
+
223
+ suiteSetup('Login into Che and set per-workspace storage strategy', async function (): Promise<void> {
224
+ kubernetesCommandLineToolsExecutor.loginToOcp();
225
+ shellExecutor.executeCommand('oc project openshift-devspaces');
226
+
227
+ originalStorageStrategy = shellExecutor
228
+ .executeCommand(`oc get checluster/${cheClusterName} -o "jsonpath={.spec.devEnvironments.storage.pvcStrategy}"`)
229
+ .stdout.trim();
230
+
231
+ if (originalStorageStrategy !== 'per-workspace') {
232
+ const patchResult: ShellString = shellExecutor.executeCommand(
233
+ `oc patch checluster ${cheClusterName} --type=merge ` +
234
+ '-p \'{"spec":{"devEnvironments":{"storage":{"pvcStrategy":"per-workspace"}}}}\''
235
+ );
236
+ expect(patchResult.code).to.equal(0, 'Failed to patch CheCluster to set per-workspace storage strategy');
237
+ }
238
+
239
+ await loginTests.loginIntoChe();
240
+ });
241
+
242
+ function clearCurrentTabHandle(): void {
243
+ currentTabHandle = 'undefined';
244
+ }
245
+
246
+ test('Create workspace from test-workspace pvc-fail branch', async function (): Promise<void> {
247
+ await dashboard.openDashboard();
248
+ currentTabHandle = await browserTabsUtil.getCurrentWindowHandle();
249
+ await dashboard.clickCreateWorkspaceButton();
250
+ await workspaceHandlingTests.createAndOpenWorkspaceWithSpecificEditorAndGitUrl(editorXpath, gitRepository, xPathToWaitFor);
251
+ registerRunningWorkspace(WorkspaceHandlingTests.getWorkspaceName());
252
+ });
253
+
254
+ test('Accept the project as a trusted one', async function (): Promise<void> {
255
+ await projectAndFileTests.performTrustAuthorDialog();
256
+ });
257
+
258
+ test('Setup workspace context for API operations', function (): void {
259
+ kubernetesCommandLineToolsExecutor.workspaceName = WorkspaceHandlingTests.getWorkspaceName();
260
+ kubernetesCommandLineToolsExecutor.getPodAndContainerNames();
261
+ });
262
+
263
+ test('Create new file in project folder', function (): void {
264
+ const output: ShellString = containerTerminal.execInContainerCommand(
265
+ `echo "${testFileContent}" > /projects/${projectName}/${testFileName}`
266
+ );
267
+ expect(output.code).to.equal(0);
268
+ });
269
+
270
+ test('Modify devfile to point to bad image location', function (): void {
271
+ Logger.info('Replacing ":latest" with ":badimage" in devfile.yaml using sed');
272
+ const output: ShellString = containerTerminal.execInContainerCommand(
273
+ `sed -i 's/:latest/:badimage/g' /projects/${projectName}/devfile.yaml`
274
+ );
275
+ expect(output.code).to.equal(0, 'Failed to replace :latest with :badimage in devfile.yaml');
276
+
277
+ const verifyOutput: ShellString = containerTerminal.execInContainerCommand(`cat /projects/${projectName}/devfile.yaml`);
278
+ expect(verifyOutput.stdout).to.include(':badimage');
279
+ expect(verifyOutput.stdout).to.not.include(':latest');
280
+ });
281
+
282
+ test('Restart workspace from local devfile with bad image', async function (): Promise<void> {
283
+ await restartWorkspaceDialog.restartFromLocalDevfile(projectName);
284
+ Logger.info('Waiting for "Restart Workspace" confirmation popup');
285
+ await restartWorkspaceDialog.confirmRestartWorkspace();
286
+ });
287
+
288
+ test('Wait for workspace start failure and restart with default devfile', async function (): Promise<void> {
289
+ Logger.info('Waiting for workspace to enter Failed phase and restart with default devfile');
290
+ await restartWorkspaceDialog.clickRestartWithDefaultDevfile();
291
+ await driverHelper.waitVisibility(By.xpath(xPathToWaitFor), TIMEOUT_CONSTANTS.TS_IDE_START_TIMEOUT);
292
+ });
293
+
294
+ test('Re-initialize workspace context after restart', function (): void {
295
+ kubernetesCommandLineToolsExecutor.getPodAndContainerNames();
296
+ });
297
+
298
+ test('Verify project exists after restart with default devfile', function (): void {
299
+ expect(containerTerminal.ls().stdout).includes(projectName);
300
+ expect(containerTerminal.ls(`/projects/${projectName}`).stdout).includes('devfile.yaml');
301
+ });
302
+
303
+ test('Verify new file is present after restart with default devfile', function (): void {
304
+ const output: ShellString = containerTerminal.execInContainerCommand(`cat /projects/${projectName}/${testFileName}`);
305
+ expect(output.stdout.trim()).to.equal(testFileContent);
306
+ });
307
+
308
+ test('Verify storage type is per-workspace in workspace details', async function (): Promise<void> {
309
+ const workspaceName: string = WorkspaceHandlingTests.getWorkspaceName();
310
+
311
+ Logger.info('Opening Workspaces page');
312
+ await dashboard.openDashboard();
313
+ await dashboard.clickWorkspacesButton();
314
+ await workspaces.waitPage();
315
+
316
+ Logger.info(`Opening workspace details for: ${workspaceName}`);
317
+ await workspaces.clickWorkspaceListItemLink(workspaceName);
318
+ await workspaceDetails.waitWorkspaceTitle(workspaceName);
319
+
320
+ Logger.info('Verifying storage type is per-workspace on Overview tab');
321
+ const storageTypeValue: string = await workspaceDetails.getStorageTypeValue();
322
+ expect(storageTypeValue).to.equal('per-workspace');
323
+ });
324
+
325
+ suiteTeardown('Delete DevWorkspace', async function (): Promise<void> {
326
+ Logger.debug('Delete DevWorkspace. After each test.');
327
+ if (currentTabHandle !== 'undefined') {
328
+ await browserTabsUtil.switchToWindow(currentTabHandle);
329
+ }
330
+
331
+ await dashboard.openDashboard();
332
+ await browserTabsUtil.closeAllTabsExceptCurrent();
333
+
334
+ if (WorkspaceHandlingTests.getWorkspaceName() !== 'undefined') {
335
+ Logger.debug('Workspace name is defined. Deleting workspace...');
336
+ await dashboard.deleteStoppedWorkspaceByUI(WorkspaceHandlingTests.getWorkspaceName());
337
+ }
338
+
339
+ WorkspaceHandlingTests.clearWorkspaceName();
340
+ clearCurrentTabHandle();
341
+ registerRunningWorkspace('');
342
+
343
+ if (originalStorageStrategy !== '' && originalStorageStrategy !== 'per-workspace') {
344
+ const restoreResult: ShellString = shellExecutor.executeCommand(
345
+ `oc patch checluster ${cheClusterName} --type=merge ` +
346
+ `-p '{"spec":{"devEnvironments":{"storage":{"pvcStrategy":"${originalStorageStrategy}"}}}}'`
347
+ );
348
+ expect(restoreResult.code).to.equal(0, 'Failed to restore CheCluster storage strategy');
349
+ }
350
+ });
351
+ });
@@ -1,121 +0,0 @@
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.e2eContainer = void 0;
13
- require("reflect-metadata");
14
- const inversify_1 = require("inversify");
15
- const ChromeDriver_1 = require("../driver/ChromeDriver");
16
- const inversify_types_1 = require("./inversify.types");
17
- const TestWorkspaceUtil_1 = require("../utils/workspace/TestWorkspaceUtil");
18
- const OcpUserLoginPage_1 = require("../pageobjects/login/openshift/OcpUserLoginPage");
19
- const RegularUserOcpCheLoginPage_1 = require("../pageobjects/login/openshift/RegularUserOcpCheLoginPage");
20
- const DriverHelper_1 = require("../utils/DriverHelper");
21
- const Dashboard_1 = require("../pageobjects/dashboard/Dashboard");
22
- const Workspaces_1 = require("../pageobjects/dashboard/Workspaces");
23
- const WorkspaceDetails_1 = require("../pageobjects/dashboard/workspace-details/WorkspaceDetails");
24
- const ScreenCatcher_1 = require("../utils/ScreenCatcher");
25
- const OcpLoginPage_1 = require("../pageobjects/login/openshift/OcpLoginPage");
26
- const CheMultiuserAuthorizationHeaderHandler_1 = require("../utils/request-handlers/headers/CheMultiuserAuthorizationHeaderHandler");
27
- const CheApiRequestHandler_1 = require("../utils/request-handlers/CheApiRequestHandler");
28
- const CreateWorkspace_1 = require("../pageobjects/dashboard/CreateWorkspace");
29
- const BrowserTabsUtil_1 = require("../utils/BrowserTabsUtil");
30
- const WorkspaceHandlingTests_1 = require("../tests-library/WorkspaceHandlingTests");
31
- const ApiUrlResolver_1 = require("../utils/workspace/ApiUrlResolver");
32
- const ProjectAndFileTests_1 = require("../tests-library/ProjectAndFileTests");
33
- const LoginTests_1 = require("../tests-library/LoginTests");
34
- const RedHatLoginPage_1 = require("../pageobjects/login/openshift/RedHatLoginPage");
35
- const OcpRedHatLoginPage_1 = require("../pageobjects/login/openshift/OcpRedHatLoginPage");
36
- const OcpMainPage_1 = require("../pageobjects/openshift/OcpMainPage");
37
- const OcpImportFromGitPage_1 = require("../pageobjects/openshift/OcpImportFromGitPage");
38
- const OcpApplicationPage_1 = require("../pageobjects/openshift/OcpApplicationPage");
39
- const StringUtil_1 = require("../utils/StringUtil");
40
- const KubernetesLoginPage_1 = require("../pageobjects/login/kubernetes/KubernetesLoginPage");
41
- const DexLoginPage_1 = require("../pageobjects/login/kubernetes/DexLoginPage");
42
- const OAUTH_CONSTANTS_1 = require("../constants/OAUTH_CONSTANTS");
43
- const BASE_TEST_CONSTANTS_1 = require("../constants/BASE_TEST_CONSTANTS");
44
- const CheCodeLocatorLoader_1 = require("../pageobjects/ide/CheCodeLocatorLoader");
45
- const loader_1 = require("monaco-page-objects/out/locators/loader");
46
- const OauthPage_1 = require("../pageobjects/git-providers/OauthPage");
47
- const DevfilesHelper_1 = require("../utils/DevfilesHelper");
48
- const main_1 = require("@eclipse-che/che-devworkspace-generator/lib/main");
49
- const KubernetesCommandLineToolsExecutor_1 = require("../utils/KubernetesCommandLineToolsExecutor");
50
- const ShellExecutor_1 = require("../utils/ShellExecutor");
51
- const UserPreferences_1 = require("../pageobjects/dashboard/UserPreferences");
52
- const WebTerminalPage_1 = require("../pageobjects/webterminal/WebTerminalPage");
53
- const TrustAuthorPopup_1 = require("../pageobjects/dashboard/TrustAuthorPopup");
54
- const ViewsMoreActionsButton_1 = require("../pageobjects/ide/ViewsMoreActionsButton");
55
- const RestrictedModeButton_1 = require("../pageobjects/ide/RestrictedModeButton");
56
- const CommandPalette_1 = require("../pageobjects/ide/CommandPalette");
57
- const ExtensionsView_1 = require("../pageobjects/ide/ExtensionsView");
58
- const ExplorerView_1 = require("../pageobjects/ide/ExplorerView");
59
- const NotificationHandler_1 = require("../pageobjects/ide/NotificationHandler");
60
- const SourceControlView_1 = require("../pageobjects/ide/SourceControlView");
61
- const GitHubExtensionDialog_1 = require("../pageobjects/ide/GitHubExtensionDialog");
62
- const AiCodeSignInDialog_1 = require("../pageobjects/ide/AiCodeSignInDialog");
63
- const e2eContainer = new inversify_1.Container({ defaultScope: 'Transient', skipBaseClassChecks: true });
64
- exports.e2eContainer = e2eContainer;
65
- e2eContainer.bind(inversify_types_1.TYPES.Driver).to(ChromeDriver_1.ChromeDriver).inSingletonScope();
66
- e2eContainer.bind(inversify_types_1.TYPES.WorkspaceUtil).to(TestWorkspaceUtil_1.TestWorkspaceUtil);
67
- e2eContainer.bind(inversify_types_1.TYPES.OcpLogin).to(OcpUserLoginPage_1.OcpUserLoginPage);
68
- e2eContainer.bind(inversify_types_1.TYPES.IAuthorizationHeaderHandler).to(CheMultiuserAuthorizationHeaderHandler_1.CheMultiuserAuthorizationHeaderHandler);
69
- e2eContainer.bind(inversify_types_1.CLASSES.BrowserTabsUtil).to(BrowserTabsUtil_1.BrowserTabsUtil);
70
- e2eContainer.bind(inversify_types_1.CLASSES.DriverHelper).to(DriverHelper_1.DriverHelper);
71
- e2eContainer.bind(inversify_types_1.CLASSES.Dashboard).to(Dashboard_1.Dashboard);
72
- e2eContainer.bind(inversify_types_1.CLASSES.Workspaces).to(Workspaces_1.Workspaces);
73
- e2eContainer.bind(inversify_types_1.CLASSES.WorkspaceDetails).to(WorkspaceDetails_1.WorkspaceDetails);
74
- e2eContainer.bind(inversify_types_1.CLASSES.ScreenCatcher).to(ScreenCatcher_1.ScreenCatcher);
75
- e2eContainer.bind(inversify_types_1.CLASSES.OcpLoginPage).to(OcpLoginPage_1.OcpLoginPage);
76
- e2eContainer.bind(inversify_types_1.CLASSES.DexLoginPage).to(DexLoginPage_1.DexLoginPage);
77
- e2eContainer.bind(inversify_types_1.CLASSES.CheCodeLocatorLoader).to(CheCodeLocatorLoader_1.CheCodeLocatorLoader);
78
- e2eContainer.bind(inversify_types_1.CLASSES.LocatorLoader).to(loader_1.LocatorLoader);
79
- e2eContainer.bind(inversify_types_1.CLASSES.OauthPage).to(OauthPage_1.OauthPage);
80
- e2eContainer.bind(inversify_types_1.CLASSES.OcpMainPage).to(OcpMainPage_1.OcpMainPage);
81
- e2eContainer.bind(inversify_types_1.CLASSES.OcpImportFromGitPage).to(OcpImportFromGitPage_1.OcpImportFromGitPage);
82
- e2eContainer.bind(inversify_types_1.CLASSES.OcpApplicationPage).to(OcpApplicationPage_1.OcpApplicationPage);
83
- e2eContainer.bind(inversify_types_1.CLASSES.CheApiRequestHandler).to(CheApiRequestHandler_1.CheApiRequestHandler);
84
- e2eContainer.bind(inversify_types_1.CLASSES.CreateWorkspace).to(CreateWorkspace_1.CreateWorkspace);
85
- e2eContainer.bind(inversify_types_1.CLASSES.ProjectAndFileTests).to(ProjectAndFileTests_1.ProjectAndFileTests);
86
- e2eContainer.bind(inversify_types_1.CLASSES.LoginTests).to(LoginTests_1.LoginTests);
87
- e2eContainer.bind(inversify_types_1.CLASSES.StringUtil).to(StringUtil_1.StringUtil);
88
- e2eContainer.bind(inversify_types_1.CLASSES.ApiUrlResolver).to(ApiUrlResolver_1.ApiUrlResolver);
89
- e2eContainer.bind(inversify_types_1.CLASSES.WorkspaceHandlingTests).to(WorkspaceHandlingTests_1.WorkspaceHandlingTests);
90
- e2eContainer.bind(inversify_types_1.CLASSES.RedHatLoginPage).to(RedHatLoginPage_1.RedHatLoginPage);
91
- e2eContainer.bind(inversify_types_1.CLASSES.DevfilesRegistryHelper).to(DevfilesHelper_1.DevfilesHelper);
92
- e2eContainer.bind(inversify_types_1.CLASSES.KubernetesCommandLineToolsExecutor).to(KubernetesCommandLineToolsExecutor_1.KubernetesCommandLineToolsExecutor);
93
- e2eContainer.bind(inversify_types_1.CLASSES.ShellExecutor).to(ShellExecutor_1.ShellExecutor);
94
- e2eContainer.bind(inversify_types_1.CLASSES.ContainerTerminal).to(KubernetesCommandLineToolsExecutor_1.ContainerTerminal);
95
- e2eContainer.bind(inversify_types_1.CLASSES.WebTerminalPage).to(WebTerminalPage_1.WebTerminalPage);
96
- e2eContainer.bind(inversify_types_1.CLASSES.UserPreferences).to(UserPreferences_1.UserPreferences);
97
- e2eContainer.bind(inversify_types_1.EXTERNAL_CLASSES.Generator).to(main_1.Main);
98
- e2eContainer.bind(inversify_types_1.EXTERNAL_CLASSES.LocatorLoader).to(loader_1.LocatorLoader);
99
- e2eContainer.bind(inversify_types_1.EXTERNAL_CLASSES.LocatorLoader).to(loader_1.LocatorLoader);
100
- e2eContainer.bind(inversify_types_1.CLASSES.TrustAuthorPopup).to(TrustAuthorPopup_1.TrustAuthorPopup);
101
- e2eContainer.bind(inversify_types_1.CLASSES.ViewsMoreActionsButton).to(ViewsMoreActionsButton_1.ViewsMoreActionsButton);
102
- e2eContainer.bind(inversify_types_1.CLASSES.RestrictedModeButton).to(RestrictedModeButton_1.RestrictedModeButton);
103
- e2eContainer.bind(inversify_types_1.CLASSES.CommandPalette).to(CommandPalette_1.CommandPalette);
104
- e2eContainer.bind(inversify_types_1.CLASSES.ExtensionsView).to(ExtensionsView_1.ExtensionsView);
105
- e2eContainer.bind(inversify_types_1.CLASSES.ExplorerView).to(ExplorerView_1.ExplorerView);
106
- e2eContainer.bind(inversify_types_1.CLASSES.NotificationHandler).to(NotificationHandler_1.NotificationHandler);
107
- e2eContainer.bind(inversify_types_1.CLASSES.SourceControlView).to(SourceControlView_1.SourceControlView);
108
- e2eContainer.bind(inversify_types_1.CLASSES.GitHubExtensionDialog).to(GitHubExtensionDialog_1.GitHubExtensionDialog);
109
- e2eContainer.bind(inversify_types_1.CLASSES.AiCodeSignInDialog).to(AiCodeSignInDialog_1.AiCodeSignInDialog);
110
- if (BASE_TEST_CONSTANTS_1.BASE_TEST_CONSTANTS.TS_PLATFORM === BASE_TEST_CONSTANTS_1.Platform.OPENSHIFT) {
111
- if (OAUTH_CONSTANTS_1.OAUTH_CONSTANTS.TS_SELENIUM_VALUE_OPENSHIFT_OAUTH) {
112
- e2eContainer.bind(inversify_types_1.TYPES.CheLogin).to(RegularUserOcpCheLoginPage_1.RegularUserOcpCheLoginPage);
113
- }
114
- else {
115
- e2eContainer.bind(inversify_types_1.TYPES.CheLogin).to(OcpRedHatLoginPage_1.OcpRedHatLoginPage);
116
- }
117
- }
118
- else {
119
- e2eContainer.bind(inversify_types_1.TYPES.CheLogin).to(KubernetesLoginPage_1.KubernetesLoginPage);
120
- }
121
- //# sourceMappingURL=inversify.config.js.map