@camunda/e2e-test-suite 0.0.617 → 0.0.619
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/README.md +26 -3
- package/dist/pages/8.7/ConsoleOrganizationPage.js +20 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -586,12 +586,35 @@ Before marking a PR as ready for review:
|
|
|
586
586
|
- [ ] Change scope is appropriate — large multi-version changes are split into separate PRs
|
|
587
587
|
- [ ] A relevant test workflow has been run and **passed**
|
|
588
588
|
- [ ] The workflow run URL is pasted in the PR description
|
|
589
|
-
- [ ]
|
|
589
|
+
- [ ] If new tests were added: add the `testrail-test-case` label after the test run passes to auto-enrich TestRail cases (see [TestRail Integration](#testrail-integration)); update Confluence if applicable
|
|
590
590
|
|
|
591
591
|
### TestRail Integration
|
|
592
592
|
|
|
593
|
-
|
|
593
|
+
Test case documentation in TestRail is **automatically synced** from spec files. When a PR adds or modifies test cases, the sync workflow uses AI (GitHub Copilot) to generate human-readable step descriptions directly from the Playwright test code.
|
|
594
594
|
|
|
595
|
-
|
|
595
|
+
#### How to trigger the sync
|
|
596
|
+
|
|
597
|
+
**Option A — Label after a passing test run (recommended)**
|
|
598
|
+
|
|
599
|
+
1. Run the relevant test workflow and confirm it passes.
|
|
600
|
+
2. Add the `testrail-test-case` label to the PR.
|
|
601
|
+
3. The [Sync TestRail Cases](https://github.com/camunda/c8-cross-component-e2e-tests/actions/workflows/sync-testrail-cases.yml) workflow fires automatically, detects the changed spec files, and enriches the matching TestRail cases with AI-generated steps.
|
|
602
|
+
|
|
603
|
+
> Re-triggering is easy: remove the label and add it again.
|
|
604
|
+
|
|
605
|
+
**Option B — Manual dispatch**
|
|
606
|
+
|
|
607
|
+
Go to [Actions → Sync TestRail Cases → Run workflow](https://github.com/camunda/c8-cross-component-e2e-tests/actions/workflows/sync-testrail-cases.yml) and provide the version and spec file path manually. Useful for one-off enrichment without opening a PR.
|
|
608
|
+
|
|
609
|
+
#### What the sync does
|
|
610
|
+
|
|
611
|
+
- Finds the matching TestRail case by automation ID (set by the JUnit reporter) or normalised title.
|
|
612
|
+
- Skips cases that already have steps on the correct template.
|
|
613
|
+
- Re-enriches cases that are on the wrong TestRail template (fixes template + steps in one pass).
|
|
614
|
+
- Calls the GitHub Copilot API to produce Action + Expected Result step rows from the raw Playwright code.
|
|
615
|
+
|
|
616
|
+
#### Access
|
|
617
|
+
|
|
618
|
+
If you do not have access to TestRail, contact the Test Automation Team to request access.
|
|
596
619
|
|
|
597
620
|
Thank you for using the C8 Cross-Component End-to-End Test Suite for Camunda C8 full product stack e2e testing. Happy testing! If you have any questions or need assistance, feel free to reach out to the maintainers for support.
|
|
@@ -332,7 +332,19 @@ class ConsoleOrganizationPage {
|
|
|
332
332
|
}
|
|
333
333
|
async clickAuthorizations() {
|
|
334
334
|
await (0, test_1.expect)(this.authorizations).toBeVisible({ timeout: 60000 });
|
|
335
|
-
|
|
335
|
+
// The Authorizations tab click sometimes doesn't actually switch the
|
|
336
|
+
// panel — the click registers but Carbon stays on Details and the
|
|
337
|
+
// downstream row assertions then poll forever against the wrong tab.
|
|
338
|
+
// Verify aria-selected after the click and retry with force if needed.
|
|
339
|
+
for (let i = 0; i < 3; i++) {
|
|
340
|
+
await this.authorizations.click({ force: i > 0 });
|
|
341
|
+
const selected = await this.authorizations
|
|
342
|
+
.getAttribute('aria-selected')
|
|
343
|
+
.catch(() => null);
|
|
344
|
+
if (selected === 'true')
|
|
345
|
+
return;
|
|
346
|
+
await this.page.waitForTimeout(1000);
|
|
347
|
+
}
|
|
336
348
|
}
|
|
337
349
|
async authorizedResourceAssertion(processId, maxRetries = 20, timeout = 60000) {
|
|
338
350
|
const url = this.page.url();
|
|
@@ -354,7 +366,12 @@ class ConsoleOrganizationPage {
|
|
|
354
366
|
}
|
|
355
367
|
}
|
|
356
368
|
}
|
|
357
|
-
async authorizedResourcesAssertion(processIds, maxRetries =
|
|
369
|
+
async authorizedResourcesAssertion(processIds, maxRetries = 10, perCheckTimeout = 30000) {
|
|
370
|
+
// Was 30 × (30s + 30s) ≈ 30 min budget — far too long, and 30 attempts
|
|
371
|
+
// hides whether the failure is really "still propagating" or "stuck on
|
|
372
|
+
// the wrong tab forever". 10 × (30s check + 10s sleep) ≈ ~6.5 min total
|
|
373
|
+
// gives RBA backend plenty of time to propagate while failing fast on
|
|
374
|
+
// genuine UI-side regressions.
|
|
358
375
|
const url = this.page.url();
|
|
359
376
|
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
360
377
|
try {
|
|
@@ -368,7 +385,7 @@ class ConsoleOrganizationPage {
|
|
|
368
385
|
catch (error) {
|
|
369
386
|
if (attempt < maxRetries - 1) {
|
|
370
387
|
console.warn(`Attempt ${attempt + 1} failed. Error: ${error}. Retrying...`);
|
|
371
|
-
await (0, sleep_1.sleep)(
|
|
388
|
+
await (0, sleep_1.sleep)(10000);
|
|
372
389
|
}
|
|
373
390
|
else {
|
|
374
391
|
throw new Error(`Assertion failed after ${maxRetries} attempts. Last error: ${error}`);
|