feat(e2e): Playwright critical-path suite + CI job#14
Merged
Conversation
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.
#/<script>→ parameters (regression test for the Router 4currentRoute.valuebug)conf/Already paid off 🎯
The suite caught a real vite 8 (Rolldown) regression: materialize's
anime.min.jsresolves its Closure runtime global via$jscomp.getGlobal(this)— Rolldown rewrites top-levelthistoundefined, crashing the app at boot on every page. Fixed with a targeted vite transform.Test plan
🤖 Generated with Claude Code