@camunda/e2e-test-suite 0.0.1473 → 0.0.1475
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.9/ClusterPage.js +20 -3
- package/dist/pages/8.9/ClusterSecretsPage.d.ts +1 -0
- package/dist/pages/8.9/ClusterSecretsPage.js +14 -5
- package/dist/tests/8.9/rba-enabled-v2-user-flows.spec.js +10 -2
- package/dist/tests/c8Run-8.9/connectors-user-flows.spec.js +2 -1
- package/dist/tests/c8Run-8.9/mcp-connector-authentication.spec.js +5 -2
- package/dist/tests/c8Run-8.9/mcp-user-flows.spec.js +2 -1
- package/package.json +1 -1
|
@@ -235,9 +235,14 @@ class ClusterPage {
|
|
|
235
235
|
});
|
|
236
236
|
}
|
|
237
237
|
async clickClusterNameInput() {
|
|
238
|
+
// `clusters/parameters` can fail several opens in a row: on 2026-10-19
|
|
239
|
+
// it was CORS-blocked (net::ERR_FAILED) on three consecutive re-opens and
|
|
240
|
+
// only answered on the fourth, right after the old 3-attempt budget ran
|
|
241
|
+
// out. Allow enough re-opens to outlast such a burst.
|
|
238
242
|
await (0, clickLocatorWithRetry_1.clickLocatorWithRetry)(this.page, this.clusterNameInput, {
|
|
239
243
|
visibilityTimeout: 30000,
|
|
240
|
-
totalTimeout:
|
|
244
|
+
totalTimeout: 240000,
|
|
245
|
+
maxRetries: 6,
|
|
241
246
|
postAction: async () => {
|
|
242
247
|
// Going back to the Clusters list is not a recovery on its own: the
|
|
243
248
|
// create-cluster form is a separate route, so the name input can never
|
|
@@ -324,8 +329,20 @@ class ClusterPage {
|
|
|
324
329
|
await (0, test_1.expect)(clusterRow).toBeVisible({ timeout: 30000 });
|
|
325
330
|
}
|
|
326
331
|
catch (error) {
|
|
327
|
-
|
|
328
|
-
|
|
332
|
+
// The cluster list is fetched from the Console API, which can fail
|
|
333
|
+
// (CORS-blocked net::ERR_FAILED) and leaves the list without the new
|
|
334
|
+
// row; an in-app route change does not refetch it, so reload.
|
|
335
|
+
await (0, expectLocatorWithRetry_1.expectLocatorWithRetry)(this.page, clusterRow, {
|
|
336
|
+
preAction: async () => {
|
|
337
|
+
await this.clickClusterBanner();
|
|
338
|
+
},
|
|
339
|
+
postAction: async () => {
|
|
340
|
+
await this.page.reload({ waitUntil: 'domcontentloaded' });
|
|
341
|
+
},
|
|
342
|
+
totalTimeout: 180000,
|
|
343
|
+
visibilityTimeout: 30000,
|
|
344
|
+
maxRetries: 4,
|
|
345
|
+
});
|
|
329
346
|
}
|
|
330
347
|
}
|
|
331
348
|
async clickClusterLink(name) {
|
|
@@ -228,10 +228,9 @@ class ClusterSecretsPage {
|
|
|
228
228
|
// underlying render issue. Re-navigate to the tab before waiting for it.
|
|
229
229
|
await this.clickClusterBanner();
|
|
230
230
|
await this.clickCluster(cluster);
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
});
|
|
231
|
+
// Same "Oops ... something went wrong" boundary as after the bulk import:
|
|
232
|
+
// a single 60s wait never recovers from it, so reload until it clears.
|
|
233
|
+
await this.waitForSecretsPanel();
|
|
235
234
|
}
|
|
236
235
|
async createSetOfSecrets(cluster, secrets) {
|
|
237
236
|
await this.bulkImportSecrets(secrets);
|
|
@@ -312,6 +311,15 @@ class ClusterSecretsPage {
|
|
|
312
311
|
// clicked before Hub hydrated) or rendering Hub's "Oops ... something
|
|
313
312
|
// went wrong. Please try reloading!" boundary, so createNewSecretButton
|
|
314
313
|
// never appears; both clear on another reload + tab re-select.
|
|
314
|
+
await this.waitForSecretsPanel();
|
|
315
|
+
}
|
|
316
|
+
// The boundary is caused by Console API calls Hub makes cross-origin coming
|
|
317
|
+
// back without CORS headers (net::ERR_FAILED) in bursts of a few minutes,
|
|
318
|
+
// and the panel never refetches on its own -- only a reload does. The
|
|
319
|
+
// 2026-10-19 nightly trace shows the burst outlasting 3 reloads spaced 60s
|
|
320
|
+
// apart, so poll in 30s windows: the 5-minute budget is unchanged, but it
|
|
321
|
+
// now holds enough reloads to outlast such a burst.
|
|
322
|
+
async waitForSecretsPanel() {
|
|
315
323
|
await (0, expectLocatorWithRetry_1.expectLocatorWithRetry)(this.page, this.createNewSecretButton, {
|
|
316
324
|
preAction: async () => {
|
|
317
325
|
await this.clusterSecretTab.first().click({ timeout: 60000 });
|
|
@@ -320,7 +328,8 @@ class ClusterSecretsPage {
|
|
|
320
328
|
await this.page.reload({ waitUntil: 'domcontentloaded' });
|
|
321
329
|
},
|
|
322
330
|
totalTimeout: 300000,
|
|
323
|
-
visibilityTimeout:
|
|
331
|
+
visibilityTimeout: 30000,
|
|
332
|
+
maxRetries: 8,
|
|
324
333
|
});
|
|
325
334
|
}
|
|
326
335
|
}
|
|
@@ -7,6 +7,7 @@ const UtilitiesPage_1 = require("../../pages/8.9/UtilitiesPage");
|
|
|
7
7
|
const sleep_1 = require("../../utils/sleep");
|
|
8
8
|
const roleAuthorizations_1 = require("../../utils/roleAuthorizations");
|
|
9
9
|
const expectTextWithRetry_1 = require("../../utils/assertionHelpers/expectTextWithRetry");
|
|
10
|
+
const expectLocatorWithRetry_1 = require("../../utils/assertionHelpers/expectLocatorWithRetry");
|
|
10
11
|
const expectTextWithPagination_1 = require("../../utils/assertionHelpers/expectTextWithPagination");
|
|
11
12
|
const users_1 = require("../../utils/users");
|
|
12
13
|
const consoleApiHelpers_1 = require("../../utils/consoleApiHelpers");
|
|
@@ -362,8 +363,15 @@ _8_9_1.test.describe.parallel('RBA Enabled User Flows Test @tasklistV2', () => {
|
|
|
362
363
|
await _8_9_1.test.step('Navigate to Operate and Assert Both Processes Are Accessible', async () => {
|
|
363
364
|
await appsPage.clickCamundaApps();
|
|
364
365
|
await appsPage.clickOperate(clusterName);
|
|
365
|
-
|
|
366
|
-
|
|
366
|
+
// Operate can render "Something went wrong ... Failed to fetch
|
|
367
|
+
// dynamically imported module" when a lazy-loaded asset fails to load
|
|
368
|
+
// (nightly 2026-10-19). That boundary only clears on a reload.
|
|
369
|
+
await (0, expectLocatorWithRetry_1.expectLocatorWithRetry)(page, operateHomePage.operateBanner, {
|
|
370
|
+
postAction: async () => {
|
|
371
|
+
await page.reload({ waitUntil: 'domcontentloaded' });
|
|
372
|
+
},
|
|
373
|
+
totalTimeout: 120000,
|
|
374
|
+
visibilityTimeout: 30000,
|
|
367
375
|
});
|
|
368
376
|
await operateHomePage.clickProcessesTab();
|
|
369
377
|
await (0, expectTextWithRetry_1.expectTextWithRetry)(page, process1);
|
|
@@ -43,7 +43,8 @@ c8Run_8_9_1.test.describe('Connectors User Flow Tests @tasklistV2', () => {
|
|
|
43
43
|
await (0, _setup_1.captureScreenshot)(page, testInfo);
|
|
44
44
|
await (0, _setup_1.captureFailureVideo)(page, testInfo);
|
|
45
45
|
});
|
|
46
|
-
|
|
46
|
+
// Skipped due to bug #8440: https://github.com/camunda/connectors/issues/8440
|
|
47
|
+
c8Run_8_9_1.test.skip('REST Connector No Auth User Flow', async ({ page, operateHomePage, operateProcessInstancePage, operateProcessesPage, }) => {
|
|
47
48
|
await c8Run_8_9_1.test.step('View Process Instance in Operate, assert it completes and assert result expression', async () => {
|
|
48
49
|
await (0, test_1.expect)(operateHomePage.processesTab).toBeVisible({ timeout: 180000 });
|
|
49
50
|
await operateHomePage.clickProcessesTab();
|
|
@@ -13,6 +13,8 @@ const authMethods = [
|
|
|
13
13
|
{
|
|
14
14
|
name: 'Basic Auth',
|
|
15
15
|
processId: 'mcp_remote_client_basic_auth',
|
|
16
|
+
// Skipped due to bug #8440: https://github.com/camunda/connectors/issues/8440
|
|
17
|
+
skip: true,
|
|
16
18
|
},
|
|
17
19
|
{
|
|
18
20
|
name: 'Bearer Token',
|
|
@@ -56,8 +58,9 @@ c8Run_8_9_1.test.describe('@tasklistV2 MCP Client connector authentication tests
|
|
|
56
58
|
await (0, _setup_1.captureScreenshot)(page, testInfo);
|
|
57
59
|
await (0, _setup_1.captureFailureVideo)(page, testInfo);
|
|
58
60
|
});
|
|
59
|
-
for (const { name, processId, getVariables } of authMethods) {
|
|
60
|
-
|
|
61
|
+
for (const { name, processId, getVariables, skip } of authMethods) {
|
|
62
|
+
const it = skip ? c8Run_8_9_1.test.skip : c8Run_8_9_1.test;
|
|
63
|
+
it(`As a user I can authenticate using ${name} and list tools`, async ({ operateHomePage, operateProcessesPage, operateProcessInstancePage, }) => {
|
|
61
64
|
await (0, zeebeClient_1.createInstances)(processId, 1, 1, getVariables?.());
|
|
62
65
|
await (0, sleep_1.sleep)(2000);
|
|
63
66
|
await c8Run_8_9_1.test.step('Navigate to completed process instance', async () => {
|
|
@@ -32,7 +32,8 @@ c8Run_8_9_1.test.describe('@tasklistV2 MCP Client connector tests', () => {
|
|
|
32
32
|
await (0, _setup_1.captureScreenshot)(page, testInfo);
|
|
33
33
|
await (0, _setup_1.captureFailureVideo)(page, testInfo);
|
|
34
34
|
});
|
|
35
|
-
|
|
35
|
+
// Skipped due to bug #8440: https://github.com/camunda/connectors/issues/8440
|
|
36
|
+
c8Run_8_9_1.test.skip('As an user I can invoke the MCP Client connector and use all its operations', async ({ operateHomePage, operateProcessesPage, operateProcessInstancePage, }) => {
|
|
36
37
|
c8Run_8_9_1.test.slow();
|
|
37
38
|
await c8Run_8_9_1.test.step('Navigate to completed process instance', async () => {
|
|
38
39
|
await operateHomePage.clickProcessesTab();
|