@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.
@@ -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: 120000,
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
- await this.clickClusterBanner();
328
- await (0, test_1.expect)(clusterRow).toBeVisible({ timeout: 30000 });
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) {
@@ -44,5 +44,6 @@ declare class ClusterSecretsPage {
44
44
  name: string;
45
45
  value: string;
46
46
  }[]): Promise<void>;
47
+ private waitForSecretsPanel;
47
48
  }
48
49
  export { ClusterSecretsPage };
@@ -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
- await this.clusterSecretTab.click({ timeout: 30000 });
232
- await (0, test_1.expect)(this.createNewSecretButton).toBeVisible({
233
- timeout: 60000,
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: 60000,
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
- await (0, test_1.expect)(operateHomePage.operateBanner).toBeVisible({
366
- timeout: 30000,
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
- (0, c8Run_8_9_1.test)('REST Connector No Auth User Flow', async ({ page, operateHomePage, operateProcessInstancePage, operateProcessesPage, }) => {
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
- (0, c8Run_8_9_1.test)(`As a user I can authenticate using ${name} and list tools`, async ({ operateHomePage, operateProcessesPage, operateProcessInstancePage, }) => {
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
- (0, c8Run_8_9_1.test)('As an user I can invoke the MCP Client connector and use all its operations', async ({ operateHomePage, operateProcessesPage, operateProcessInstancePage, }) => {
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();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camunda/e2e-test-suite",
3
- "version": "0.0.1473",
3
+ "version": "0.0.1475",
4
4
  "description": "End-to-end test helpers for Camunda 8",
5
5
  "repository": {
6
6
  "type": "git",