import { defineConfig, devices } from "@playwright/test"; /** * End-to-End-Tests. * * Voraussetzung: der Stack läuft (docker compose up -d) und die Datenbank ist * migriert und geseedet. Der Entwicklungsserver wird bei Bedarf selbst * gestartet — ein bereits laufender wird wiederverwendet. */ const BASIS_URL = process.env.E2E_BASIS_URL ?? "http://localhost:3100"; export default defineConfig({ testDir: "./tests/e2e", fullyParallel: true, forbidOnly: Boolean(process.env.CI), retries: process.env.CI ? 2 : 0, workers: process.env.CI ? 1 : undefined, reporter: process.env.CI ? [["list"], ["html", { open: "never" }]] : [["list"]], timeout: 30_000, expect: { timeout: 10_000 }, use: { baseURL: BASIS_URL, trace: "on-first-retry", screenshot: "only-on-failure", video: "retain-on-failure", // Die Oberfläche ist durchgängig deutsch — auch der Browser soll es sein. locale: "de-DE", timezoneId: "Europe/Berlin", }, projects: [ { name: "chromium", use: { ...devices["Desktop Chrome"] } }, // Am Terminal im Gerätehaus steht ein Touchgerät — deshalb mitgetestet. // Bewusst mit Chromium statt WebKit: das Terminal läuft auf einem // Android-Tablet im Kiosk-Browser, nicht auf einem iPad. { name: "tablet", use: { ...devices["Galaxy Tab S4 landscape"], browserName: "chromium" }, }, ], webServer: { command: "npm run dev", url: BASIS_URL, reuseExistingServer: !process.env.CI, timeout: 120_000, }, });