Files
Patrick Plate 776149e7d3 test: add full-stack Playwright integration test infrastructure
Sprint 12 Phase 2: Real integration tests with seed DB
- R__seed_test_data.sql (Flyway repeatable, 7 members, strains, batches, docs, board, events)
- TestResetController (profile-gated per-test DB reset)
- docker-compose.test.yml (self-contained, tmpfs Postgres)
- Dockerfile.playwright (v1.60.0, pre-installed deps)
- 13 integration spec files, 70+ test cases (@smoke + @full)
- seed-constants.ts, selectors.ts, api-client.ts test helpers
2026-06-18 14:43:16 +02:00

53 lines
1.2 KiB
TypeScript

import path from "path"
import { defineConfig } from "@playwright/test"
const authFile = path.join(__dirname, "e2e", ".auth", "admin.json")
export default defineConfig({
testDir: "./e2e",
fullyParallel: false,
retries: 0,
timeout: 90_000,
use: {
baseURL: process.env.BASE_URL || "http://localhost:3000",
screenshot: "on",
trace: "on-first-retry",
navigationTimeout: 60_000,
actionTimeout: 30_000,
},
projects: [
{
name: "setup",
testMatch: /global-setup\.ts/,
},
{
name: "authenticated",
testMatch: /authenticated-admin|visual-regression|accessibility/,
dependencies: ["setup"],
use: {
storageState: authFile,
browserName: "chromium",
},
},
{
name: "unauthenticated",
testMatch:
/functional-flows|full-check|user-story-tests|system-test|staff-management|screenshot-tour|authenticated-tour/,
use: { browserName: "chromium" },
},
{
name: "integration",
testMatch: /integration\//,
dependencies: ["setup"],
use: {
storageState: authFile,
browserName: "chromium",
},
timeout: 90_000,
expect: { timeout: 15_000 },
},
],
outputDir: "./e2e/test-results",
})