Skip to content

feat(e2e): Playwright critical-path suite + CI job#14

Merged
knep merged 1 commit into
masterfrom
feat/e2e-playwright
Jun 10, 2026
Merged

feat(e2e): Playwright critical-path suite + CI job#14
knep merged 1 commit into
masterfrom
feat/e2e-playwright

Conversation

@knep

@knep knep commented Jun 10, 2026

Copy link
Copy Markdown
Owner

Summary

Safety net required before the Vuetify 4 migration: 8 Playwright tests (chromium) exercising the critical path against the real Python backend serving the production build.

  • Main + admin app boot, group expansion, script selection → parameters
  • Deep link #/<script> → parameters (regression test for the Router 4 currentRoute.value bug)
  • Full execution: real-browser XSRF token flow, websocket streaming → log panel, argument passing
  • materialize FormSelect interaction (parity baseline for the Vuetify combobox migration)
  • Required-parameter validation panel
  • Isolated backend config (port 5099) — never touches a developer's real conf/

Already paid off 🎯

The suite caught a real vite 8 (Rolldown) regression: materialize's anime.min.js resolves its Closure runtime global via $jscomp.getGlobal(this) — Rolldown rewrites top-level this to undefined, crashing the app at boot on every page. Fixed with a targeted vite transform.

Test plan

  • 8/8 e2e green locally ×3 runs (stability)
  • 821 unit tests + build green
  • CI green on this PR (including the new E2E job)

🤖 Generated with Claude Code

Safety net required before the Vuetify migration. 8 tests (chromium) against
the real Python backend serving the production build:

- main app boot, group expansion, script selection -> parameters render
- deep link #/<script> -> parameters (direct regression test for the Vue
  Router 4 currentRoute.value bug)
- full execution: XSRF token mode in a real browser (HttpOnly regression),
  POST /executions/start, websocket streaming -> log panel (logChunks
  deep-watch regression), argument passing (--mode/--message)
- materialize FormSelect dropdown interaction (behaviour-parity baseline for
  the Vuetify combobox migration)
- required-parameter validation blocks execution (validation panel)
- admin app boot, tabs, scripts list + Add button

Infrastructure:
- fully isolated backend config (tests/e2e/fixtures/conf, port 5099,
  cookie_secure=false, XSRF token mode ON) — never touches the developer's
  real conf/; logs/temp under tests/e2e/.run (gitignored)
- tests/e2e/server.sh: creates a dedicated .e2e_venv on demand and starts
  launcher.py with -d/-l/-t; wired as Playwright webServer
- npm run test:e2e (build + test), test:e2e-ui
- CI: new "E2E (Playwright)" job (python 3.13 + node 22 + chromium),
  uploads the HTML report on failure

Already paid off: the suite caught a real vite 8 (Rolldown) regression —
materialize's anime.min.js resolves its Closure runtime global via
$jscomp.getGlobal(this); rollup passed a truthy exports object there, Rolldown
rewrites top-level `this` to undefined, so the app crashed at boot ("Cannot
use 'in' operator to search for 'Array' in undefined") on every page. Fixed
with a targeted vite transform (materialize-anime-global-fix) pointing the
runtime at `window`.

Note: execution specs are order-dependent (finished executions stay attached
server-side for the rest of the suite) — documented in the spec.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@knep knep merged commit 03e45c2 into master Jun 10, 2026
7 checks passed
@knep knep deleted the feat/e2e-playwright branch June 10, 2026 09:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant