Files
galaxy-game/ui/frontend/playwright.config.ts
T
Ilia Denisov 22b0710d04 phase 7: auth flow UI (email-code login + session resume + revocation)
Implements ui/PLAN.md Phase 7 end-to-end:

- /login two-step form (email -> code) over the gateway public REST
  surface; /lobby placeholder issues the first authenticated
  user.account.get and renders the decoded display name.
- SessionStore (Svelte 5 runes) with loading / unsupported / anonymous /
  authenticated states; layout-level route guard, browser-not-supported
  blocker, and a minimal SubscribeEvents revocation watcher that closes
  the active client within 1s on a clean stream end or
  Unauthenticated.
- VITE_GATEWAY_BASE_URL + VITE_GATEWAY_RESPONSE_PUBLIC_KEY config plus
  AuthError taxonomy in api/auth.ts.
- Vitest (auth-api, session-store, login-page) and Playwright e2e
  (auth-flow.spec.ts) on the four configured projects, with a fixture
  Ed25519 keypair forging Connect-Web JSON responses.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-07 15:24:21 +02:00

43 lines
1.5 KiB
TypeScript

import { defineConfig, devices } from "@playwright/test";
import { FIXTURE_PUBLIC_KEY_RAW_BASE64 } from "./tests/e2e/fixtures/gateway-key";
export default defineConfig({
testDir: "tests/e2e",
fullyParallel: true,
forbidOnly: !!process.env.CI,
retries: process.env.CI ? 1 : 0,
reporter: [["list"], ["html", { open: "never" }]],
use: {
baseURL: "http://localhost:5173",
trace: "retain-on-failure",
screenshot: "only-on-failure",
},
projects: [
{ name: "chromium-desktop", use: { ...devices["Desktop Chrome"] } },
{ name: "webkit-desktop", use: { ...devices["Desktop Safari"] } },
// devices["iPhone 13"] picks WebKit by default; the project name
// here claims a Chromium engine on a mobile viewport, so the
// browser is explicitly overridden. WebKit on a desktop viewport
// is already covered by webkit-desktop.
{
name: "chromium-mobile-iphone-13",
use: { ...devices["iPhone 13"], browserName: "chromium" },
},
{ name: "chromium-mobile-pixel-5", use: { ...devices["Pixel 5"] } },
],
webServer: {
command: "pnpm run dev",
url: "http://localhost:5173",
reuseExistingServer: !process.env.CI,
timeout: 120_000,
env: {
// The Phase 7 Playwright spec mocks the gateway and signs
// every response with the deterministic fixture key in
// `tests/e2e/fixtures/gateway-key.ts`. The dev server picks
// up the matching public key here so the in-page
// `GalaxyClient` accepts the forged signatures.
VITE_GATEWAY_RESPONSE_PUBLIC_KEY: FIXTURE_PUBLIC_KEY_RAW_BASE64,
},
},
});