@camunda/e2e-test-suite 0.0.719 → 0.0.721

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.
@@ -14,6 +14,7 @@ declare class IdpCreatePage {
14
14
  readonly unstructured_addExtractionFieldButton: Locator;
15
15
  readonly unstructured_extractionModelDropdown: Locator;
16
16
  readonly unstructured_extractDocumentButton: Locator;
17
+ readonly unstructured_overrideTestCaseButton: Locator;
17
18
  readonly unstructured_saveAsTestCaseButton: Locator;
18
19
  readonly unstructured_testCaseSavedNotification: Locator;
19
20
  readonly unstructured_validateExtractionTab: Locator;
@@ -18,6 +18,7 @@ class IdpCreatePage {
18
18
  unstructured_addExtractionFieldButton;
19
19
  unstructured_extractionModelDropdown;
20
20
  unstructured_extractDocumentButton;
21
+ unstructured_overrideTestCaseButton;
21
22
  unstructured_saveAsTestCaseButton;
22
23
  unstructured_testCaseSavedNotification;
23
24
  unstructured_validateExtractionTab;
@@ -79,6 +80,9 @@ class IdpCreatePage {
79
80
  this.unstructured_extractDocumentButton = page.getByRole('button', {
80
81
  name: 'Extract document',
81
82
  });
83
+ this.unstructured_overrideTestCaseButton = page.getByRole('button', {
84
+ name: 'Override test case',
85
+ });
82
86
  this.unstructured_saveAsTestCaseButton = page.getByRole('button', {
83
87
  name: 'Save as test case',
84
88
  });
@@ -194,16 +198,43 @@ class IdpCreatePage {
194
198
  }
195
199
  }
196
200
  async clickExtractDocumentButton() {
201
+ // The unstructured extraction runs an AI model (e.g. AWS Bedrock Claude
202
+ // Sonnet 4) whose backend has been observed to stall in the "Extracting..."
203
+ // state or surface a transient failure, leaving "Save as test case"
204
+ // disabled. Re-trigger the extraction up to maxRetries times so a one-off
205
+ // backend blip self-heals while a sustained outage still surfaces red.
197
206
  await (0, test_1.expect)(this.unstructured_extractDocumentButton).toBeVisible({
198
207
  timeout: 90000,
199
208
  });
200
- await this.unstructured_extractDocumentButton.click({ timeout: 60000 });
201
- await (0, test_1.expect)(this.unstructured_saveAsTestCaseButton).toBeEnabled({
202
- timeout: 180000,
203
- });
204
- await (0, test_1.expect)(this.unstructured_saveAsTestCaseButton).toBeEnabled({
205
- timeout: 120000,
206
- });
209
+ const maxRetries = 3;
210
+ for (let attempt = 0; attempt < maxRetries; attempt++) {
211
+ await (0, test_1.expect)(this.unstructured_extractDocumentButton).toBeEnabled({
212
+ timeout: 120000,
213
+ });
214
+ await this.unstructured_extractDocumentButton.click({ timeout: 60000 });
215
+ const overrideVisible = await this.unstructured_overrideTestCaseButton
216
+ .isVisible()
217
+ .catch(() => false);
218
+ if (overrideVisible) {
219
+ await this.unstructured_overrideTestCaseButton.click({ timeout: 60000 });
220
+ }
221
+ try {
222
+ await (0, test_1.expect)(this.unstructured_saveAsTestCaseButton).toBeEnabled({
223
+ timeout: 150000,
224
+ });
225
+ return;
226
+ }
227
+ catch (error) {
228
+ console.error(`Attempt ${attempt + 1} of unstructured extraction did not ` +
229
+ `enable "Save as test case": ${error}`);
230
+ await this.closeNotificationButton
231
+ .click({ timeout: 5000 })
232
+ .catch(() => { });
233
+ }
234
+ }
235
+ throw new Error(`Unstructured extraction did not complete after ${maxRetries} ` +
236
+ `attempts ("Save as test case" never enabled). Check Camunda's IDP ` +
237
+ `backend / upstream AI provider response.`);
207
238
  }
208
239
  async clickSaveAsTestCaseButton() {
209
240
  await this.unstructured_saveAsTestCaseButton.click({ timeout: 60000 });
@@ -0,0 +1,65 @@
1
+ # SaaS Nightly Fix — Workspace Guidance
2
+
3
+ You are debugging and fixing failing **Camunda 8 SaaS** nightly Playwright runs
4
+ for one minor version (8.7, 8.8, 8.9, or 8.10). The authoritative, always-read
5
+ instructions are the **`## SaaS Nightly Fix Agent`** section of this repo's
6
+ `AGENTS.md` — read it before doing anything else. This file is supplementary
7
+ context about the workspace shape.
8
+
9
+ ## What is in this workspace
10
+
11
+ - **`c8-cross-component-e2e-tests/`** — the repo you EDIT. SaaS specs live in
12
+ `tests/8.x/` (bare version, no `SM-`/`c8Run-` prefix), page objects in
13
+ `pages/8.x/`, fixtures in `fixtures/8.x.ts`.
14
+ - **`camunda-docs/`** — read-only reference for intended product behavior and
15
+ upgrade/behavior-change notes.
16
+ - **Possibly one or more product repos** — injected on demand by the dispatcher
17
+ based on which component the failing spec belongs to. You may see
18
+ `camunda-hub/`, `connectors/`, `marketplace-api/`, or `camunda-<version>/`
19
+ (the `camunda/camunda` monorepo). If the repo you need is **not** present, do
20
+ NOT clone it — use `gh search code` / `gh api` instead (below).
21
+
22
+ ## The SaaS environment is gone — fix from artifacts only
23
+
24
+ The SaaS nightly creates a fresh enterprise org, runs the tests, and **deletes
25
+ the org afterwards**. There is no live cluster to re-test against and no
26
+ Teleport/kubectl. You diagnose entirely from the nightly artifacts
27
+ (`json-report`, screenshots, `trace.zip`) — exactly like c8Run, never like SM's
28
+ live-cluster mode. Do not attempt to create an org or run Playwright against a
29
+ live endpoint.
30
+
31
+ ## Cross-repo lookups WITHOUT cloning (cost rule)
32
+
33
+ The product UI repos are large. When the repo you need was not injected, reach
34
+ the source with GitHub search instead of a checkout:
35
+
36
+ ```bash
37
+ # Find the React component that owns a label / test-id / field
38
+ gh search code --repo camunda/camunda-hub "<aria-label or data-testid>" --limit 5 --json path
39
+ gh search code --repo camunda/camunda "<field id or label>" --limit 5 --json path
40
+
41
+ # Pin a regression to a commit on a path
42
+ gh api 'repos/camunda/camunda/commits?path=identity/client/src/.../X.tsx&per_page=10' \
43
+ --jq '.[] | "\(.commit.author.date|.[0:10]) \(.sha[:7]) \(.commit.message|split("\n")[0])"'
44
+ ```
45
+
46
+ Component → repo (also encoded in `scripts/inject-saas-manifest.py`):
47
+
48
+ | Failing spec | Component | Source repo |
49
+ |---|---|---|
50
+ | `web-modeler-user-flows`, `play` | Web Modeler | `camunda/camunda-hub` |
51
+ | `connectors-user-flows`, `aws-connectors-user-flows` | Connectors / marketplace | `camunda/connectors`, `camunda/marketplace-api` |
52
+ | `access-user-role-management`, `idp-user-flows`, `rba-enabled-v2-user-flows` | Identity (8.10+) | `camunda/camunda` (`identity/client/`) |
53
+ | `operate-access-flow`, `hto-user-flows`, `optimize-api-tests`, `cluster-variables`, `agentic-ai-user-flows`, `orchestration-cluster-mcp-server/*` | Orchestration | `camunda/camunda` |
54
+ | `console-user-flows`, `aws-cluster-user-flows`, `saas-migration-path-user-flows`, `navigation`, `login*`, `smoke-tests` | SaaS Console (private) | none — mirror SM/SaaS page-object patterns in this repo |
55
+
56
+ > **Identity trap:** for 8.10+, Identity UI lives in `camunda/camunda`
57
+ > (`identity/client/src/pages/...`), **not** the legacy `camunda/identity`
58
+ > repo. For 8.9 and earlier it is `camunda/identity`. Match the version.
59
+
60
+ ## Deliverable
61
+
62
+ Edit the test code, lint, open a draft PR labelled `failing-test-fix`, and write
63
+ `/tmp/fix-meta.json`. See the `## SaaS Nightly Fix Agent` section of `AGENTS.md`
64
+ for the exact PR/commit conventions and the hard constraints (no `test.skip`,
65
+ minimal diff, the narrow `{"prs":[]}` exit cases).
@@ -0,0 +1,29 @@
1
+ name: camunda-nightlies-saas
2
+ description: "Cross-repo debugging of Camunda 8 SaaS nightly E2E failures"
3
+ purpose: |
4
+ You are a Camunda QA engineer fixing failing SaaS nightly Playwright runs.
5
+ SaaS exercises UI that lives in several external repos (Web Modeler in
6
+ camunda-hub, Identity/Operate/Tasklist/Optimize in camunda/camunda,
7
+ Connectors in camunda/connectors, marketplace search in
8
+ camunda/marketplace-api). You only EDIT test code in this repo
9
+ (tests/, pages/, fixtures/, utils/) and its CI surface — you READ the product
10
+ repos for selector/behavior reference.
11
+
12
+ # Base workspace is intentionally lean: only the E2E repo and docs are cloned
13
+ # up front. The component-specific product repo(s) a given failure needs are
14
+ # injected on demand by scripts/inject-saas-manifest.py before `workspace
15
+ # create`, based on the failing spec filename. Never add the big product repos
16
+ # here unconditionally.
17
+ repos:
18
+ - url: https://github.com/camunda/c8-cross-component-e2e-tests.git
19
+ path: c8-cross-component-e2e-tests
20
+ default_branch: main
21
+ - url: https://github.com/camunda/camunda-docs.git
22
+ path: camunda-docs
23
+ default_branch: main
24
+
25
+ # Derive AGENTS.md and SKILLS.md from repo contents at create time.
26
+ derive:
27
+ agents_from: AGENTS.md
28
+ skills_from: SKILLS.md
29
+ ai_guidance: camunda-nightlies-saas.guidance.md
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camunda/e2e-test-suite",
3
- "version": "0.0.719",
3
+ "version": "0.0.721",
4
4
  "description": "End-to-end test helpers for Camunda 8",
5
5
  "repository": {
6
6
  "type": "git",
@@ -0,0 +1,65 @@
1
+ # SaaS Nightly Fix — Workspace Guidance
2
+
3
+ You are debugging and fixing failing **Camunda 8 SaaS** nightly Playwright runs
4
+ for one minor version (8.7, 8.8, 8.9, or 8.10). The authoritative, always-read
5
+ instructions are the **`## SaaS Nightly Fix Agent`** section of this repo's
6
+ `AGENTS.md` — read it before doing anything else. This file is supplementary
7
+ context about the workspace shape.
8
+
9
+ ## What is in this workspace
10
+
11
+ - **`c8-cross-component-e2e-tests/`** — the repo you EDIT. SaaS specs live in
12
+ `tests/8.x/` (bare version, no `SM-`/`c8Run-` prefix), page objects in
13
+ `pages/8.x/`, fixtures in `fixtures/8.x.ts`.
14
+ - **`camunda-docs/`** — read-only reference for intended product behavior and
15
+ upgrade/behavior-change notes.
16
+ - **Possibly one or more product repos** — injected on demand by the dispatcher
17
+ based on which component the failing spec belongs to. You may see
18
+ `camunda-hub/`, `connectors/`, `marketplace-api/`, or `camunda-<version>/`
19
+ (the `camunda/camunda` monorepo). If the repo you need is **not** present, do
20
+ NOT clone it — use `gh search code` / `gh api` instead (below).
21
+
22
+ ## The SaaS environment is gone — fix from artifacts only
23
+
24
+ The SaaS nightly creates a fresh enterprise org, runs the tests, and **deletes
25
+ the org afterwards**. There is no live cluster to re-test against and no
26
+ Teleport/kubectl. You diagnose entirely from the nightly artifacts
27
+ (`json-report`, screenshots, `trace.zip`) — exactly like c8Run, never like SM's
28
+ live-cluster mode. Do not attempt to create an org or run Playwright against a
29
+ live endpoint.
30
+
31
+ ## Cross-repo lookups WITHOUT cloning (cost rule)
32
+
33
+ The product UI repos are large. When the repo you need was not injected, reach
34
+ the source with GitHub search instead of a checkout:
35
+
36
+ ```bash
37
+ # Find the React component that owns a label / test-id / field
38
+ gh search code --repo camunda/camunda-hub "<aria-label or data-testid>" --limit 5 --json path
39
+ gh search code --repo camunda/camunda "<field id or label>" --limit 5 --json path
40
+
41
+ # Pin a regression to a commit on a path
42
+ gh api 'repos/camunda/camunda/commits?path=identity/client/src/.../X.tsx&per_page=10' \
43
+ --jq '.[] | "\(.commit.author.date|.[0:10]) \(.sha[:7]) \(.commit.message|split("\n")[0])"'
44
+ ```
45
+
46
+ Component → repo (also encoded in `scripts/inject-saas-manifest.py`):
47
+
48
+ | Failing spec | Component | Source repo |
49
+ |---|---|---|
50
+ | `web-modeler-user-flows`, `play` | Web Modeler | `camunda/camunda-hub` |
51
+ | `connectors-user-flows`, `aws-connectors-user-flows` | Connectors / marketplace | `camunda/connectors`, `camunda/marketplace-api` |
52
+ | `access-user-role-management`, `idp-user-flows`, `rba-enabled-v2-user-flows` | Identity (8.10+) | `camunda/camunda` (`identity/client/`) |
53
+ | `operate-access-flow`, `hto-user-flows`, `optimize-api-tests`, `cluster-variables`, `agentic-ai-user-flows`, `orchestration-cluster-mcp-server/*` | Orchestration | `camunda/camunda` |
54
+ | `console-user-flows`, `aws-cluster-user-flows`, `saas-migration-path-user-flows`, `navigation`, `login*`, `smoke-tests` | SaaS Console (private) | none — mirror SM/SaaS page-object patterns in this repo |
55
+
56
+ > **Identity trap:** for 8.10+, Identity UI lives in `camunda/camunda`
57
+ > (`identity/client/src/pages/...`), **not** the legacy `camunda/identity`
58
+ > repo. For 8.9 and earlier it is `camunda/identity`. Match the version.
59
+
60
+ ## Deliverable
61
+
62
+ Edit the test code, lint, open a draft PR labelled `failing-test-fix`, and write
63
+ `/tmp/fix-meta.json`. See the `## SaaS Nightly Fix Agent` section of `AGENTS.md`
64
+ for the exact PR/commit conventions and the hard constraints (no `test.skip`,
65
+ minimal diff, the narrow `{"prs":[]}` exit cases).
@@ -0,0 +1,29 @@
1
+ name: camunda-nightlies-saas
2
+ description: "Cross-repo debugging of Camunda 8 SaaS nightly E2E failures"
3
+ purpose: |
4
+ You are a Camunda QA engineer fixing failing SaaS nightly Playwright runs.
5
+ SaaS exercises UI that lives in several external repos (Web Modeler in
6
+ camunda-hub, Identity/Operate/Tasklist/Optimize in camunda/camunda,
7
+ Connectors in camunda/connectors, marketplace search in
8
+ camunda/marketplace-api). You only EDIT test code in this repo
9
+ (tests/, pages/, fixtures/, utils/) and its CI surface — you READ the product
10
+ repos for selector/behavior reference.
11
+
12
+ # Base workspace is intentionally lean: only the E2E repo and docs are cloned
13
+ # up front. The component-specific product repo(s) a given failure needs are
14
+ # injected on demand by scripts/inject-saas-manifest.py before `workspace
15
+ # create`, based on the failing spec filename. Never add the big product repos
16
+ # here unconditionally.
17
+ repos:
18
+ - url: https://github.com/camunda/c8-cross-component-e2e-tests.git
19
+ path: c8-cross-component-e2e-tests
20
+ default_branch: main
21
+ - url: https://github.com/camunda/camunda-docs.git
22
+ path: camunda-docs
23
+ default_branch: main
24
+
25
+ # Derive AGENTS.md and SKILLS.md from repo contents at create time.
26
+ derive:
27
+ agents_from: AGENTS.md
28
+ skills_from: SKILLS.md
29
+ ai_guidance: camunda-nightlies-saas.guidance.md