@camunda/e2e-test-suite 0.0.1610 → 0.0.1612
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/dist/pages/8.10/HomePage.d.ts +1 -1
- package/dist/pages/8.10/HomePage.js +2 -4
- package/dist/pages/8.10/UtilitiesPage.d.ts +4 -1
- package/dist/pages/8.10/UtilitiesPage.js +5 -5
- package/dist/tests/8.10/console-cluster-duplication.spec.js +5 -1
- package/dist/tests/8.10/console-user-flows.spec.js +4 -2
- package/dist/tests/8.10/test-setup.spec.js +3 -1
- package/package.json +1 -1
|
@@ -24,6 +24,6 @@ declare class HomePage {
|
|
|
24
24
|
closeInformationDialog(): Promise<void>;
|
|
25
25
|
organizationUuid(): string;
|
|
26
26
|
clickOpenOrganizationButton(): Promise<void>;
|
|
27
|
-
clickSkipCustomization(): Promise<void>;
|
|
27
|
+
clickSkipCustomization(timeout?: number): Promise<void>;
|
|
28
28
|
}
|
|
29
29
|
export { HomePage };
|
|
@@ -155,11 +155,9 @@ class HomePage {
|
|
|
155
155
|
async clickOpenOrganizationButton() {
|
|
156
156
|
await this.openOrganizationButton.click({ timeout: 60000 });
|
|
157
157
|
}
|
|
158
|
-
async clickSkipCustomization() {
|
|
158
|
+
async clickSkipCustomization(timeout = 30000) {
|
|
159
159
|
try {
|
|
160
|
-
await (0, test_1.expect)(this.buttonSkipCustomization).toBeVisible({
|
|
161
|
-
timeout: 30000,
|
|
162
|
-
});
|
|
160
|
+
await (0, test_1.expect)(this.buttonSkipCustomization).toBeVisible({ timeout });
|
|
163
161
|
// Best-effort: dismiss any Carbon modal that has a named close button.
|
|
164
162
|
await this.closeInformationDialog();
|
|
165
163
|
// force: true bypasses the "pointer events intercepted by modal backdrop"
|
|
@@ -38,7 +38,10 @@ export declare function runMultipleProcesses(clusterName: string, page: Page, mo
|
|
|
38
38
|
processName?: string;
|
|
39
39
|
uploadFromFile?: string;
|
|
40
40
|
}): Promise<void>;
|
|
41
|
-
export declare function consoleSessionRecovery(page: Page, clusterUrl: string
|
|
41
|
+
export declare function consoleSessionRecovery(page: Page, clusterUrl: string, user?: {
|
|
42
|
+
username: string;
|
|
43
|
+
password: string;
|
|
44
|
+
}): () => Promise<void>;
|
|
42
45
|
export declare function goBackWithRetry(page: Page, maxRetries?: number): Promise<void>;
|
|
43
46
|
export declare function disableRBA(clusterName: string, homePage: HomePage, clusterPage: ClusterPage, clusterDetailsPage: ClusterDetailsPage, appsPage: AppsPage): Promise<void>;
|
|
44
47
|
export declare function enableAuthorizations(clusterName: string, homePage: HomePage, clusterPage: ClusterPage, clusterDetailsPage: ClusterDetailsPage, appsPage: AppsPage): Promise<void>;
|
|
@@ -649,13 +649,13 @@ exports.runMultipleProcesses = runMultipleProcesses;
|
|
|
649
649
|
// component-health poll below, after which reloading only ever re-renders the
|
|
650
650
|
// login form. Re-authenticate as the console user and return to the page that
|
|
651
651
|
// was being polled, so the health assertion carries on unchanged.
|
|
652
|
-
function consoleSessionRecovery(page, clusterUrl
|
|
652
|
+
function consoleSessionRecovery(page, clusterUrl, user = {
|
|
653
|
+
username: process.env.C8_USERNAME,
|
|
654
|
+
password: process.env.C8_PASSWORD,
|
|
655
|
+
}) {
|
|
653
656
|
return async () => {
|
|
654
657
|
console.warn(`Console session lost while polling component health on ${clusterUrl}; re-authenticating.`);
|
|
655
|
-
await loginWithRetry(page, new LoginPage_1.LoginPage(page),
|
|
656
|
-
username: process.env.C8_USERNAME,
|
|
657
|
-
password: process.env.C8_PASSWORD,
|
|
658
|
-
}, 0, 3);
|
|
658
|
+
await loginWithRetry(page, new LoginPage_1.LoginPage(page), user, 0, 3);
|
|
659
659
|
await page.goto(clusterUrl, {
|
|
660
660
|
waitUntil: 'domcontentloaded',
|
|
661
661
|
timeout: 60000,
|
|
@@ -31,8 +31,12 @@ const OVERRIDE_REGION_LABEL = 'Finland, Europe (europe-north1)';
|
|
|
31
31
|
* Isolation: every case creates its own source cluster with a randomised name and
|
|
32
32
|
* deletes every cluster it created in teardown - a leaked cluster consumes a
|
|
33
33
|
* reservation and would make the reservation case pass for the wrong reason.
|
|
34
|
+
*
|
|
35
|
+
* Parallel: no case reads state another writes (randomised names, per-test
|
|
36
|
+
* teardown), and each spends 10-14 minutes on cluster health polls, so serial
|
|
37
|
+
* mode stacked them into the longest chain of the full-suite pass.
|
|
34
38
|
*/
|
|
35
|
-
_8_10_1.test.describe.configure({ mode: '
|
|
39
|
+
_8_10_1.test.describe.configure({ mode: 'parallel' });
|
|
36
40
|
_8_10_1.test.describe('Console cluster duplication', () => {
|
|
37
41
|
// Everything this spec creates is tracked here so teardown runs even on failure.
|
|
38
42
|
const createdClusterNames = [];
|
|
@@ -71,7 +71,7 @@ _8_10_1.test.describe('Console User Flow Tests @tasklistV2', () => {
|
|
|
71
71
|
await (0, UtilitiesPage_1.assertLocatorVisibleWithRetry)(operateTabProcessInstancePage, operateTabProcessInstancePage.completedIcon, 'completed icon in Operate', 60000);
|
|
72
72
|
});
|
|
73
73
|
});
|
|
74
|
-
(0, _8_10_1.test)('Create Cluster', async ({ homePage, clusterPage }) => {
|
|
74
|
+
(0, _8_10_1.test)('Create Cluster', async ({ page, homePage, clusterPage }) => {
|
|
75
75
|
_8_10_1.test.slow();
|
|
76
76
|
// createCluster pre-deletes every cluster carrying this name, so a fixed
|
|
77
77
|
// name let concurrent runs of this test (--repeat-each, retries racing a
|
|
@@ -83,7 +83,9 @@ _8_10_1.test.describe('Console User Flow Tests @tasklistV2', () => {
|
|
|
83
83
|
await clusterPage.createCluster(newClusterName);
|
|
84
84
|
});
|
|
85
85
|
await _8_10_1.test.step('Assert cluster is healthy', async () => {
|
|
86
|
-
|
|
86
|
+
// Without recovery a dropped Hub session left the poll reloading the
|
|
87
|
+
// login form for its whole 25-minute budget.
|
|
88
|
+
await clusterPage.assertClusterHealthyStatusWithRetry(newClusterName, 300000, 1500000, (0, UtilitiesPage_1.consoleSessionRecovery)(page, page.url(), testUser));
|
|
87
89
|
});
|
|
88
90
|
await _8_10_1.test.step('Delete the created cluster', async () => {
|
|
89
91
|
await homePage.clickClusters();
|
|
@@ -227,7 +227,9 @@ _8_10_1.test.describe('Cluster Setup Tests', () => {
|
|
|
227
227
|
});
|
|
228
228
|
await _8_10_1.test.step('Create Cross Component Project Folder', async () => {
|
|
229
229
|
await (0, UtilitiesPage_1.withSessionRecovery)(page, loginPage, appsPage, modelerHomePage.modelerPageBanner, user, Math.min((testInfo.workerIndex + 1) * 5000, 60000), async () => {
|
|
230
|
-
|
|
230
|
+
// The Modeler banner is already visible here, so a customization
|
|
231
|
+
// prompt would have rendered with it; Hub-only orgs never show one.
|
|
232
|
+
await homePage.clickSkipCustomization(3000);
|
|
231
233
|
// Reverted the "only User 1 creates" leader-election attempt: it made
|
|
232
234
|
// things worse, not better. Run 34191243820 showed followers still
|
|
233
235
|
// timing out waiting for the folder even well after User 1 (2.9min)
|