fix(e2e): fail fast when a portal never reaches Keycloak, and bound the run (refs #161)
Two defects behind #161's opaque 36-minute verify-stack job. **A login that never gets its form ate the test timeout.** `fill()` auto-waits until the *test* timeout (90s), not the 15s expect timeout, so a portal that serves its page but never bootstraps — its config.json fetch or the OIDC discovery behind `authorize()` failed, and main.ts only console.errors — spent 90 seconds to report `locator.fill: Test timeout of 90000ms exceeded`: the symptom, not the cause. That is catalogus.spec's 1.8 minutes in the issue. Both Keycloak forms are now asserted visible first, with a 20s budget and a message naming the step that never happened. Verified against a real blank-bootstrap portal (a beheer image served with a config.json that is not JSON): fails in 20.2s with "the Keycloak login form never appeared — the portal did not reach Keycloak (check its config.json fetch and the OIDC discovery …)". **A wedged suite consumed the job.** Nothing bounded the run, so CI killed the job — and with it the `if: always()` steps that would have explained the failure: neither the per-spec summary nor the container-log dump ran (both show 0-second failures at the kill in run 739's metadata). `globalTimeout` makes Playwright stop and *report* instead, so the JSON report is written and those steps still run. 12 minutes over a ~1-minute suite: a backstop, not a budget. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -15,6 +15,12 @@ export default defineConfig({
|
||||
timeout: 90_000,
|
||||
expect: { timeout: 15_000 },
|
||||
retries: 1,
|
||||
// Bound the whole run, not just each test (#161). A wedged suite used to run until CI killed the
|
||||
// job — which also killed the `if: always()` steps that would have said why: the per-spec summary
|
||||
// and the container-log dump never ran, leaving a 36-minute job whose entire surviving output was
|
||||
// one ✘ line. On `globalTimeout` Playwright stops and *reports*, so the JSON report is written and
|
||||
// those steps still run. Generous over the ~1-minute suite: this is a backstop, not a budget.
|
||||
globalTimeout: 12 * 60_000,
|
||||
// Run the specs serially. Each spec drives a full `channel: 'chromium'` browser, and the e2e
|
||||
// shares an 8 GB runner with the entire compose stack (OpenZaak, NRC, Keycloak, Flowable, 4×
|
||||
// Postgres, every service + 3 portals). Two parallel browsers exhaust memory and the renderer is
|
||||
|
||||
Reference in New Issue
Block a user