@camunda/e2e-test-suite 0.0.1270 → 0.0.1272

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 (49) hide show
  1. package/dist/pages/8.10/ClusterSecretsPage.js +17 -1
  2. package/dist/pages/8.9/ClusterPage.js +11 -2
  3. package/dist/pages/8.9/ClusterSecretsPage.js +19 -4
  4. package/dist/pages/BrowseAllConnectorMarketplacePage.d.ts +1 -0
  5. package/dist/pages/BrowseAllConnectorMarketplacePage.js +26 -14
  6. package/dist/pages/SM-8.9/ClusterPage.js +5 -1
  7. package/dist/resources/Basic_Auth_REST_Connector.bpmn +2 -2
  8. package/dist/resources/ConnectorsBasicTest.bpmn +6 -6
  9. package/dist/resources/REST_Connector_Bearer_Auth_Process.bpmn +2 -2
  10. package/dist/resources/REST_Connector_No_Auth_Process.bpmn +1 -1
  11. package/dist/test-setup.d.ts +0 -1
  12. package/dist/test-setup.js +7 -29
  13. package/dist/tests/8.10/connectors-user-flows.spec.js +4 -7
  14. package/dist/tests/8.10/saas-migration-path-user-flows.spec.js +1 -2
  15. package/dist/tests/8.10/smoke-tests.spec.js +2 -3
  16. package/dist/tests/8.7/connectors-user-flows.spec.js +10 -14
  17. package/dist/tests/8.7/saas-migration-path-user-flows.spec.js +1 -2
  18. package/dist/tests/8.7/smoke-tests.spec.js +3 -3
  19. package/dist/tests/8.8/connectors-user-flows.spec.js +5 -7
  20. package/dist/tests/8.8/saas-migration-path-user-flows.spec.js +1 -2
  21. package/dist/tests/8.8/smoke-tests.spec.js +3 -3
  22. package/dist/tests/8.9/connectors-user-flows.spec.js +5 -7
  23. package/dist/tests/8.9/saas-migration-path-user-flows.spec.js +1 -2
  24. package/dist/tests/8.9/smoke-tests.spec.js +3 -3
  25. package/dist/tests/SM-8.10/connectors-user-flows.spec.js +6 -9
  26. package/dist/tests/SM-8.10/mt-enabled-user-flows.spec.js +6 -6
  27. package/dist/tests/SM-8.10/smoke-tests.spec.js +2 -1
  28. package/dist/tests/SM-8.7/connectors-user-flows.spec.js +4 -4
  29. package/dist/tests/SM-8.7/mt-enabled-user-flows.spec.js +5 -4
  30. package/dist/tests/SM-8.7/smoke-tests.spec.js +3 -2
  31. package/dist/tests/SM-8.8/connectors-user-flows.spec.js +4 -4
  32. package/dist/tests/SM-8.8/mt-enabled-user-flows.spec.js +5 -4
  33. package/dist/tests/SM-8.8/smoke-tests.spec.js +2 -1
  34. package/dist/tests/SM-8.9/connectors-user-flows.spec.js +6 -6
  35. package/dist/tests/SM-8.9/mt-enabled-user-flows.spec.js +5 -4
  36. package/dist/tests/SM-8.9/smoke-tests.spec.js +2 -1
  37. package/dist/tests/c8Run-8.10/connectors-user-flows.spec.js +2 -2
  38. package/dist/tests/c8Run-8.7/connectors-user-flows.spec.js +5 -8
  39. package/dist/tests/c8Run-8.8/connectors-user-flows.spec.js +5 -8
  40. package/dist/tests/c8Run-8.9/connectors-user-flows.spec.js +5 -8
  41. package/dist/utils/connectorSecrets.js +2 -1
  42. package/dist/utils/constants.d.ts +2 -0
  43. package/dist/utils/constants.js +20 -1
  44. package/package.json +1 -1
  45. package/playwright.config.ts +80 -0
  46. package/resources/Basic_Auth_REST_Connector.bpmn +2 -2
  47. package/resources/ConnectorsBasicTest.bpmn +6 -6
  48. package/resources/REST_Connector_Bearer_Auth_Process.bpmn +2 -2
  49. package/resources/REST_Connector_No_Auth_Process.bpmn +1 -1
@@ -32,24 +32,22 @@ c8Run_8_7_1.test.describe('Connectors User Flow Tests', () => {
32
32
  await (0, _setup_1.captureScreenshot)(page, testInfo);
33
33
  await (0, _setup_1.captureFailureVideo)(page, testInfo);
34
34
  });
35
- // Skipped due to bug #3673: https://github.com/camunda/c8-cross-component-e2e-tests/issues/3673
36
- c8Run_8_7_1.test.skip('REST Connector No Auth User Flow', async ({ operateHomePage, operateProcessInstancePage, operateProcessesPage, }) => {
35
+ (0, c8Run_8_7_1.test)('REST Connector No Auth User Flow', async ({ operateHomePage, operateProcessInstancePage, operateProcessesPage, }) => {
37
36
  await c8Run_8_7_1.test.step('View Process Instance in Operate, assert it completes and assert result expression', async () => {
38
37
  await (0, test_1.expect)(operateHomePage.processesTab).toBeVisible({ timeout: 180000 });
39
38
  await operateHomePage.clickProcessesTab();
40
39
  await operateProcessesPage.clickProcessCompletedCheckbox();
41
40
  await operateProcessesPage.clickProcessInstanceLink('REST_Connector_No_Auth_Process');
42
41
  await operateProcessInstancePage.completedIconAssertion();
43
- await (0, test_1.expect)(operateProcessInstancePage.statusVariable).toBeVisible({
42
+ await (0, test_1.expect)(operateProcessInstancePage.messageVariable).toBeVisible({
44
43
  timeout: 60000,
45
44
  });
46
- await (0, test_1.expect)(operateProcessInstancePage.statusVariable.getByText('"Awesome!"')).toBeVisible({
45
+ await (0, test_1.expect)(operateProcessInstancePage.messageVariable.getByText('"Awesome!"')).toBeVisible({
47
46
  timeout: 60000,
48
47
  });
49
48
  });
50
49
  });
51
- // Skipped due to bug #3673: https://github.com/camunda/c8-cross-component-e2e-tests/issues/3673
52
- c8Run_8_7_1.test.skip('REST Connector Basic Auth User Flow', async ({ operateHomePage, operateProcessesPage, operateProcessInstancePage, }) => {
50
+ (0, c8Run_8_7_1.test)('REST Connector Basic Auth User Flow', async ({ operateHomePage, operateProcessesPage, operateProcessInstancePage, }) => {
53
51
  await c8Run_8_7_1.test.step('View Process Instance in Operate, assert it completes and assert result expression', async () => {
54
52
  await (0, test_1.expect)(operateHomePage.processesTab).toBeVisible({ timeout: 180000 });
55
53
  await operateHomePage.clickProcessesTab();
@@ -64,8 +62,7 @@ c8Run_8_7_1.test.describe('Connectors User Flow Tests', () => {
64
62
  });
65
63
  });
66
64
  });
67
- // Skipped due to bug #3673: https://github.com/camunda/c8-cross-component-e2e-tests/issues/3673
68
- c8Run_8_7_1.test.skip('REST Connector Bearer Token Auth User Flow', async ({ operateHomePage, operateProcessInstancePage, operateProcessesPage, }) => {
65
+ (0, c8Run_8_7_1.test)('REST Connector Bearer Token Auth User Flow', async ({ operateHomePage, operateProcessInstancePage, operateProcessesPage, }) => {
69
66
  await c8Run_8_7_1.test.step('View Process Instance in Operate, assert it completes and assert result expression', async () => {
70
67
  await (0, test_1.expect)(operateHomePage.processesTab).toBeVisible({ timeout: 180000 });
71
68
  await operateHomePage.clickProcessesTab();
@@ -33,20 +33,18 @@ c8Run_8_8_1.test.describe('Connectors User Flow Tests @tasklistV2', () => {
33
33
  await (0, _setup_1.captureScreenshot)(page, testInfo);
34
34
  await (0, _setup_1.captureFailureVideo)(page, testInfo);
35
35
  });
36
- // Skipped due to bug #3673: https://github.com/camunda/c8-cross-component-e2e-tests/issues/3673
37
- c8Run_8_8_1.test.skip('REST Connector No Auth User Flow', async ({ page, operateHomePage, operateProcessInstancePage, operateProcessesPage, }) => {
36
+ (0, c8Run_8_8_1.test)('REST Connector No Auth User Flow', async ({ page, operateHomePage, operateProcessInstancePage, operateProcessesPage, }) => {
38
37
  await c8Run_8_8_1.test.step('View Process Instance in Operate, assert it completes and assert result expression', async () => {
39
38
  await (0, test_1.expect)(operateHomePage.processesTab).toBeVisible({ timeout: 180000 });
40
39
  await operateHomePage.clickProcessesTab();
41
40
  await operateProcessesPage.clickProcessCompletedCheckbox();
42
41
  await operateProcessesPage.clickProcessInstanceLink('REST_Connector_No_Auth_Process');
43
42
  await operateProcessInstancePage.completedIconAssertion();
44
- await (0, UtilitiesPage_1.assertLocatorVisibleWithRetry)(page, operateProcessInstancePage.statusVariable, 'Status variable');
45
- await (0, UtilitiesPage_1.assertLocatorVisibleWithRetry)(page, operateProcessInstancePage.statusVariable.getByText('"Awesome!"'), 'Status variable text');
43
+ await (0, UtilitiesPage_1.assertLocatorVisibleWithRetry)(page, operateProcessInstancePage.messageVariable, 'Message variable');
44
+ await (0, UtilitiesPage_1.assertLocatorVisibleWithRetry)(page, operateProcessInstancePage.messageVariable.getByText('"Awesome!"'), 'Message variable text');
46
45
  });
47
46
  });
48
- // Skipped due to bug #3673: https://github.com/camunda/c8-cross-component-e2e-tests/issues/3673
49
- c8Run_8_8_1.test.skip('REST Connector Basic Auth User Flow', async ({ page, operateHomePage, operateProcessesPage, operateProcessInstancePage, }) => {
47
+ (0, c8Run_8_8_1.test)('REST Connector Basic Auth User Flow', async ({ page, operateHomePage, operateProcessesPage, operateProcessInstancePage, }) => {
50
48
  await c8Run_8_8_1.test.step('View Process Instance in Operate, assert it completes and assert result expression', async () => {
51
49
  await (0, test_1.expect)(operateHomePage.processesTab).toBeVisible({ timeout: 180000 });
52
50
  await operateHomePage.clickProcessesTab();
@@ -57,8 +55,7 @@ c8Run_8_8_1.test.describe('Connectors User Flow Tests @tasklistV2', () => {
57
55
  await (0, UtilitiesPage_1.assertLocatorVisibleWithRetry)(page, operateProcessInstancePage.messageVariable.getByText('"Awesome!"'), 'Status variable text');
58
56
  });
59
57
  });
60
- // Skipped due to bug #3673: https://github.com/camunda/c8-cross-component-e2e-tests/issues/3673
61
- c8Run_8_8_1.test.skip('REST Connector Bearer Token Auth User Flow', async ({ operateHomePage, operateProcessInstancePage, operateProcessesPage, }) => {
58
+ (0, c8Run_8_8_1.test)('REST Connector Bearer Token Auth User Flow', async ({ operateHomePage, operateProcessInstancePage, operateProcessesPage, }) => {
62
59
  await c8Run_8_8_1.test.step('View Process Instance in Operate, assert it completes and assert result expression', async () => {
63
60
  await (0, test_1.expect)(operateHomePage.processesTab).toBeVisible({ timeout: 180000 });
64
61
  await operateHomePage.clickProcessesTab();
@@ -43,20 +43,18 @@ 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
- // Skipped due to bug #3673: https://github.com/camunda/c8-cross-component-e2e-tests/issues/3673
47
- c8Run_8_9_1.test.skip('REST Connector No Auth User Flow', async ({ page, operateHomePage, operateProcessInstancePage, operateProcessesPage, }) => {
46
+ (0, c8Run_8_9_1.test)('REST Connector No Auth User Flow', async ({ page, operateHomePage, operateProcessInstancePage, operateProcessesPage, }) => {
48
47
  await c8Run_8_9_1.test.step('View Process Instance in Operate, assert it completes and assert result expression', async () => {
49
48
  await (0, test_1.expect)(operateHomePage.processesTab).toBeVisible({ timeout: 180000 });
50
49
  await operateHomePage.clickProcessesTab();
51
50
  await operateProcessesPage.clickProcessCompletedCheckbox();
52
51
  await operateProcessesPage.clickProcessInstanceLink('REST_Connector_No_Auth_Process');
53
52
  await operateProcessInstancePage.completedIconAssertion();
54
- await (0, UtilitiesPage_1.assertLocatorVisibleWithRetry)(page, operateProcessInstancePage.statusVariable, 'Status variable');
55
- await (0, UtilitiesPage_1.assertLocatorVisibleWithRetry)(page, operateProcessInstancePage.statusVariable.getByText('"Awesome!"'), 'Status variable text');
53
+ await (0, UtilitiesPage_1.assertLocatorVisibleWithRetry)(page, operateProcessInstancePage.messageVariable, 'Message variable');
54
+ await (0, UtilitiesPage_1.assertLocatorVisibleWithRetry)(page, operateProcessInstancePage.messageVariable.getByText('"Awesome!"'), 'Message variable text');
56
55
  });
57
56
  });
58
- // Skipped due to bug #3673: https://github.com/camunda/c8-cross-component-e2e-tests/issues/3673
59
- c8Run_8_9_1.test.skip('REST Connector Basic Auth User Flow', async ({ page, operateHomePage, operateProcessesPage, operateProcessInstancePage, }) => {
57
+ (0, c8Run_8_9_1.test)('REST Connector Basic Auth User Flow', async ({ page, operateHomePage, operateProcessesPage, operateProcessInstancePage, }) => {
60
58
  await c8Run_8_9_1.test.step('View Process Instance in Operate, assert it completes and assert result expression', async () => {
61
59
  await (0, test_1.expect)(operateHomePage.processesTab).toBeVisible({ timeout: 180000 });
62
60
  await operateHomePage.clickProcessesTab();
@@ -67,8 +65,7 @@ c8Run_8_9_1.test.describe('Connectors User Flow Tests @tasklistV2', () => {
67
65
  await (0, UtilitiesPage_1.assertLocatorVisibleWithRetry)(page, operateProcessInstancePage.messageVariable.getByText('"Awesome!"'), 'Status variable text');
68
66
  });
69
67
  });
70
- // Skipped due to bug #3673: https://github.com/camunda/c8-cross-component-e2e-tests/issues/3673
71
- c8Run_8_9_1.test.skip('REST Connector Bearer Token Auth User Flow', async ({ operateHomePage, operateProcessInstancePage, operateProcessesPage, }) => {
68
+ (0, c8Run_8_9_1.test)('REST Connector Bearer Token Auth User Flow', async ({ operateHomePage, operateProcessInstancePage, operateProcessesPage, }) => {
72
69
  await c8Run_8_9_1.test.step('View Process Instance in Operate, assert it completes and assert result expression', async () => {
73
70
  await (0, test_1.expect)(operateHomePage.processesTab).toBeVisible({ timeout: 180000 });
74
71
  await operateHomePage.clickProcessesTab();
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.allConnectorSecrets = exports.connectorSecretsValues = exports.anthropicBedrockMantleSecretsValues = exports.bedrockCodeInterpreterSecretsValues = exports.agentcoreLtmSecretsValues = exports.agentcoreSecretsValues = exports.bedrockKbSecretsValues = exports.azureSecretsValues = exports.gcpSecretsValues = exports.openAiSecretsValues = exports.awsSecretsValues = void 0;
4
+ const constants_1 = require("./constants");
4
5
  exports.awsSecretsValues = [
5
6
  { name: 'IDP_AWS_REGION', value: process.env.IDP_AWS_REGION },
6
7
  { name: 'IDP_AWS_BUCKET_NAME', value: process.env.IDP_AWS_BUCKET_NAME },
@@ -214,7 +215,7 @@ exports.anthropicBedrockMantleSecretsValues = [
214
215
  exports.connectorSecretsValues = [
215
216
  {
216
217
  name: 'endpoint_url',
217
- value: 'https://camunda.proxy.beeceptor.com/pre-prod/basic-auth-test',
218
+ value: constants_1.REST_MOCK_BASIC_AUTH_URL,
218
219
  },
219
220
  { name: 'username', value: 'username' },
220
221
  { name: 'password', value: 'password' },
@@ -23,3 +23,5 @@ export declare const TIMEOUT: {
23
23
  processImport: number;
24
24
  optimizeImport: number;
25
25
  };
26
+ export declare const REST_MOCK_URL = "https://dummyjson.com/http/200/Awesome!";
27
+ export declare const REST_MOCK_BASIC_AUTH_URL = "https://dummyjson.com/http/200/Message%20from%20Mock!";
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TIMEOUT = exports.auditLogAssertionOptions = exports.deletionAssertionOptions = exports.defaultAssertionOptions = exports._3_MINUTES_IN_MS = exports._1_MINUTE_IN_MS = exports._1_SECOND_IN_MS = exports._100_MS = void 0;
3
+ exports.REST_MOCK_BASIC_AUTH_URL = exports.REST_MOCK_URL = exports.TIMEOUT = exports.auditLogAssertionOptions = exports.deletionAssertionOptions = exports.defaultAssertionOptions = exports._3_MINUTES_IN_MS = exports._1_MINUTE_IN_MS = exports._1_SECOND_IN_MS = exports._100_MS = void 0;
4
4
  exports._100_MS = 100;
5
5
  exports._1_SECOND_IN_MS = 1000;
6
6
  exports._1_MINUTE_IN_MS = 60 * 1000;
@@ -37,3 +37,22 @@ exports.TIMEOUT = {
37
37
  processImport: 480000,
38
38
  optimizeImport: 120000,
39
39
  };
40
+ // Public HTTP mock the REST connector flows call. DummyJSON's /http route
41
+ // answers any method with `{"status": <code>, "message": <message>}`, both
42
+ // taken from the URL, so the response body is fixed by the URL alone. It needs
43
+ // no account, no key and has no per-account request quota, which is what made
44
+ // the previous mock (camunda.proxy.beeceptor.com) fail every flow once the
45
+ // Camunda account ran out of quota -- see issue #3673.
46
+ //
47
+ // Neither URL checks credentials, exactly like the Beeceptor rules they
48
+ // replace: the auth flows assert that the connector sends its configured
49
+ // authentication without erroring, not that a server validates it.
50
+ //
51
+ // The two differ only in the message they echo back. Flows that assert
52
+ // "Awesome!" use REST_MOCK_URL; the basic-auth flows assert
53
+ // "Message from Mock!" and use REST_MOCK_BASIC_AUTH_URL.
54
+ //
55
+ // The BPMN files under resources/ carry the same URLs inline, because a
56
+ // diagram cannot import a constant -- keep them in step.
57
+ exports.REST_MOCK_URL = 'https://dummyjson.com/http/200/Awesome!';
58
+ exports.REST_MOCK_BASIC_AUTH_URL = 'https://dummyjson.com/http/200/Message%20from%20Mock!';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camunda/e2e-test-suite",
3
- "version": "0.0.1270",
3
+ "version": "0.0.1272",
4
4
  "description": "End-to-end test helpers for Camunda 8",
5
5
  "repository": {
6
6
  "type": "git",
@@ -224,6 +224,83 @@ const changedFolders =
224
224
  ? args[changedFoldersArgIndex + 1].split(',')
225
225
  : [];
226
226
 
227
+ // Run-budget guards. See the "A hung test is not an infrastructure failure"
228
+ // note in docs/ci-failure-categories.md, and issue #3115.
229
+ const isSmoke = process.env.IS_SMOKE === 'true';
230
+
231
+ // Reads a numeric env override. An unset, empty, negative or unparseable value
232
+ // returns undefined so the guard falls back to its default rather than being
233
+ // silently switched off by a typo. An explicit 0 is honoured -- Playwright
234
+ // reads 0 as "no limit" for both globalTimeout and maxFailures.
235
+ const numericEnv = (name: string): number | undefined => {
236
+ const raw = process.env[name];
237
+ if (raw === undefined || raw.trim() === '') return undefined;
238
+ const value = Number(raw);
239
+ return Number.isFinite(value) && value >= 0 ? value : undefined;
240
+ };
241
+
242
+ // Without globalTimeout Playwright never stops itself, so one hung test costs
243
+ // `timeout x (retries + 1)` -- 24 minutes at the 12-minute default -- and
244
+ // GitHub SIGKILLs the job at its `timeout-minutes` before any report is
245
+ // written. A run with no report has total_tests == 0, which
246
+ // docs/ci-failure-categories.md classifies as
247
+ // `infrastructure` -- a hung test gets filed as a platform problem and never
248
+ // reaches anyone who can fix it. When Playwright owns the deadline instead it
249
+ // runs its reporters first (runner/tasks.js finishTaskRun calls onEnd on every
250
+ // status), so the run fails with a report naming the stuck test.
251
+ //
252
+ // The budget belongs to the caller: globalTimeout is only correct below the
253
+ // job's `timeout-minutes`, and that differs per workflow. The smoke leg is the
254
+ // one context this file can infer -- the blocking gate with the tightest
255
+ // budget (25 minutes, camunda/camunda-platform-helm
256
+ // .github/workflows/test-integration-runner.yaml), which a single hang already
257
+ // exhausts. Every other caller opts in with C8E2E_GLOBAL_TIMEOUT_MIN. Jobs that
258
+ // declare no `timeout-minutes` (this repo's nightlies, the repeat-each
259
+ // validation loops that run for hours) have no budget to protect, so they keep
260
+ // the unbounded behaviour.
261
+ const SMOKE_GLOBAL_TIMEOUT_MINUTES = 20;
262
+
263
+ const globalTimeout = () => {
264
+ const override = numericEnv('C8E2E_GLOBAL_TIMEOUT_MIN');
265
+ if (override !== undefined) return override * 60 * 1000;
266
+ return isSmoke ? SMOKE_GLOBAL_TIMEOUT_MINUTES * 60 * 1000 : undefined;
267
+ };
268
+
269
+ // The missing fail-fast lever: once the platform is down there is no value in
270
+ // paying the per-test timeout for every remaining test. Smoke is a blocking
271
+ // gate over a single spec, so the first failure is already the answer.
272
+ //
273
+ // Everywhere else the default stays 0 (no limit) on purpose. The nightly triage
274
+ // dispatchers (.github/workflows/triage-nightly-failures*.yml) fan out one fix
275
+ // agent per failing test and docs/ci-failure-categories.md derives
276
+ // failure_category from the full counts, so truncating the failure list would
277
+ // hide work rather than save time. Callers with a real budget set
278
+ // C8E2E_MAX_FAILURES.
279
+ const maxFailures = () => {
280
+ const override = numericEnv('C8E2E_MAX_FAILURES');
281
+ if (override !== undefined) return override;
282
+ return isSmoke ? 1 : 0;
283
+ };
284
+
285
+ // @playwright/test sets the context navigation timeout to 0 -- no limit --
286
+ // whenever `navigationTimeout` is absent (playwright/lib/index.js
287
+ // `_setupContextOptions`: `navigationTimeout || 0`), and TimeoutSettings
288
+ // resolves that 0 before it ever falls through to `actionTimeout`. So today
289
+ // every `goto`, `waitForURL` and `waitForLoadState` call that does not pass its
290
+ // own `timeout` is bounded only by the 12-minute test timeout.
291
+ //
292
+ // That is the hang primitive: `waitForLoadState('networkidle')` waits for 500ms
293
+ // of network silence that never arrives while a backend restarts and clients
294
+ // retry, and the suite has 86 of those calls. Bounding navigation converts a
295
+ // 12-minute stall into a 2-minute failure with a stack trace, without touching
296
+ // the per-test budget that genuinely slow flows rely on.
297
+ //
298
+ // A call that passes its own `timeout` always wins, so nothing bounded today
299
+ // becomes stricter; 120s matches the most generous explicit navigation timeout
300
+ // the suite already uses.
301
+ const NAVIGATION_TIMEOUT_MS =
302
+ numericEnv('C8E2E_NAVIGATION_TIMEOUT_MS') ?? 120 * 1000;
303
+
227
304
  const timeout = () => {
228
305
  if (process.env.MINOR_VERSION?.includes('SM-8.7')) {
229
306
  // OpenSearch indexes more slowly than Elasticsearch — give SM-8.7 the
@@ -268,6 +345,8 @@ export default defineConfig({
268
345
  // API specs into a browser project that has none of their environment.
269
346
  testIgnore: /[\\/]tests[\\/]api[\\/]/,
270
347
  timeout: timeout(),
348
+ globalTimeout: globalTimeout(),
349
+ maxFailures: maxFailures(),
271
350
  workers: workerCount(),
272
351
  retries: 1,
273
352
  fullyParallel: false,
@@ -275,6 +354,7 @@ export default defineConfig({
275
354
  use: {
276
355
  baseURL: getBaseURL(),
277
356
  actionTimeout: 10000,
357
+ navigationTimeout: NAVIGATION_TIMEOUT_MS,
278
358
  // Stage 5: trace on-first-retry. With retries=1, a passing-on-retry
279
359
  // test (i.e., a flake) leaves a trace from the first attempt — exactly
280
360
  // the cases worth debugging. Green runs pay no trace cost.
@@ -15,13 +15,13 @@
15
15
  <zeebe:input source="username" target="authentication.username" />
16
16
  <zeebe:input source="password" target="authentication.password" />
17
17
  <zeebe:input source="GET" target="method" />
18
- <zeebe:input source="https://camunda.proxy.beeceptor.com/pre-prod/basic-auth-test" target="url" />
18
+ <zeebe:input source="https://dummyjson.com/http/200/Awesome!" target="url" />
19
19
  <zeebe:input source="20" target="connectionTimeoutInSeconds" />
20
20
  <zeebe:input source="20" target="readTimeoutInSeconds" />
21
21
  </zeebe:ioMapping>
22
22
  <zeebe:taskHeaders>
23
23
  <zeebe:header key="resultVariable" value="result" />
24
- <zeebe:header key="resultExpression" value="={message:response.body.status}" />
24
+ <zeebe:header key="resultExpression" value="={message:response.body.message}" />
25
25
  <zeebe:header key="errorExpression" />
26
26
  <zeebe:header key="retryBackoff" value="PT0S" />
27
27
  </zeebe:taskHeaders>
@@ -1041,13 +1041,13 @@
1041
1041
  <zeebe:properties>
1042
1042
  <zeebe:property name="inbound.type" value="io.camunda:http-polling:1" />
1043
1043
  <zeebe:property name="authentication.type" value="oauth-client-credentials-flow" />
1044
- <zeebe:property name="authentication.oauthTokenEndpoint" value="https://camunda.proxy.beeceptor.com/pre-prod/oauth/getToken" />
1045
- <zeebe:property name="authentication.clientId" value="clientID" />
1046
- <zeebe:property name="authentication.clientSecret" value="clientSecret" />
1047
- <zeebe:property name="authentication.clientAuthentication" value="basicAuthHeader" />
1048
- <zeebe:property name="authentication.scopes" value="read:clients" />
1044
+ <zeebe:property name="authentication.oauthTokenEndpoint" value="=tokenEndpoint" />
1045
+ <zeebe:property name="authentication.clientId" value="=zeebeClientId" />
1046
+ <zeebe:property name="authentication.clientSecret" value="=zeebeSecret" />
1047
+ <zeebe:property name="authentication.clientAuthentication" value="credentialsBody" />
1048
+ <zeebe:property name="authentication.scopes" />
1049
1049
  <zeebe:property name="method" value="GET" />
1050
- <zeebe:property name="url" value="https://camunda.proxy.beeceptor.com/pre-prod/oauth/response" />
1050
+ <zeebe:property name="url" value="https://dummyjson.com/http/200/Awesome!" />
1051
1051
  <zeebe:property name="httpRequestInterval" value="PT15S" />
1052
1052
  <zeebe:property name="processPollingInterval" value="PT5S" />
1053
1053
  <zeebe:property name="connectionTimeoutInSeconds" value="20" />
@@ -12,12 +12,12 @@
12
12
  <zeebe:input source="bearer" target="authentication.type" />
13
13
  <zeebe:input source="thisisabearertoken" target="authentication.token" />
14
14
  <zeebe:input source="POST" target="method" />
15
- <zeebe:input source="https://camunda.proxy.beeceptor.com/pre-prod/bearer-auth-test" target="url" />
15
+ <zeebe:input source="https://dummyjson.com/http/200/Awesome!" target="url" />
16
16
  <zeebe:input source="20" target="connectionTimeoutInSeconds" />
17
17
  <zeebe:input source="20" target="readTimeoutInSeconds" />
18
18
  </zeebe:ioMapping>
19
19
  <zeebe:taskHeaders>
20
- <zeebe:header key="resultExpression" value="={message:response.body.status}" />
20
+ <zeebe:header key="resultExpression" value="={message:response.body.message}" />
21
21
  <zeebe:header key="retryBackoff" value="PT0S" />
22
22
  </zeebe:taskHeaders>
23
23
  </bpmn:extensionElements>
@@ -11,7 +11,7 @@
11
11
  <zeebe:ioMapping>
12
12
  <zeebe:input source="noAuth" target="authentication.type" />
13
13
  <zeebe:input source="GET" target="method" />
14
- <zeebe:input source="https://camunda.proxy.beeceptor.com/pre-prod/no-auth-test" target="url" />
14
+ <zeebe:input source="https://dummyjson.com/http/200/Awesome!" target="url" />
15
15
  <zeebe:input source="20" target="connectionTimeoutInSeconds" />
16
16
  <zeebe:input source="20" target="readTimeoutInSeconds" />
17
17
  </zeebe:ioMapping>