test(e2e): run the SvelteKit SPA Playwright suite in CI

The e2e CI job ran the legacy `scenarios/*` specs against the vanilla `static/`
frontend that upstream has since removed, so it could never pass. Point CI at
this repo's SvelteKit SPA suite (tests/e2e/spa) and wire up what it needs:

- CI: build the release binary with `--features plugins` (the admin Plugins-tab
  specs exercise the WASM runtime) and run `npm run test:coverage`, building the
  instrumented SPA with COVERAGE=1 VITE_E2E=1 so the server serves the
  data-testid-instrumented build the specs drive.
- Coverage harness: target 127.0.0.1 instead of `localhost` (which resolves to
  ::1 first on CI runners while the server binds IPv4, so readiness never
  connected) and poll `/ready` for webServer readiness; tee start-server-spa.sh
  output to a log surfaced by an always-run CI step for diagnostics.
- Files page: restore a persistent breadcrumb home link (buildCrumbs returns
  only the path folders, so there was no "go home" affordance), and fix the
  `?file=` deep-link race where the viewer→URL effect stripped the param before
  the listing loaded — a bookmarked preview link now opens the viewer.

All 101 spa specs pass locally.
This commit is contained in:
Bradley Nelson
2026-06-22 10:34:47 -06:00
parent 0a906341e1
commit 02335c0680
6 changed files with 73 additions and 34 deletions
+2 -2
View File
@@ -31,7 +31,7 @@ export default defineConfig({
globalTeardown: require.resolve('./global-teardown'),
use: {
baseURL: 'http://localhost:8088',
baseURL: 'http://127.0.0.1:8088',
trace: 'on-first-retry',
headless: true,
screenshot: 'only-on-failure',
@@ -50,7 +50,7 @@ export default defineConfig({
command: process.env.BUILD_TARGET
? `bash "${startScript}" "${workspace}/target/${process.env.BUILD_TARGET}/oxicloud"`
: `bash "${startScript}" cargo run --features plugins`,
url: 'http://localhost:8088',
url: 'http://127.0.0.1:8088/ready',
timeout: 600_000,
reuseExistingServer: false,
cwd: '../..',