Files
FireAdministration/playwright.config.ts
T
Florian WildeandClaude Opus 5 91954c402b Phase 3: Einsatz- und Uebungserfassung
Schnellerfassung im Alarmfall, sechs Zeitstempel mit Ausrueckzeit, Anfahrt
und Hilfsfrist, Staerke nach FwDV 3, Personalvorschlag mit
Qualifikationsstand, Einsatzbericht als PDF, Jahresexport fuer die Gemeinde,
Statistik und Uebungen mit Anwesenheitsliste.

Dazu das Einsatzportal fuer Fremdwehren: ein signierter Link ohne Anmeldung,
zeitlich und mengenbegrenzt, der Stichwort, Ort, Zeiten und Lagemeldungen
zeigt und Meldungen mit Foto annimmt. Es sind die ersten oeffentlich
erreichbaren Endpunkte in FLORIAN.

Acht neue Tabellen, alle mit organisationId und Row Level Security. Ein
freigegebener Einsatzbericht ist unveraenderlich; ein Datenbanktrigger setzt
das durch. Koordinaten liegen doppelt — als Dezimalgrad und als
PostGIS-Punkt, zusammengehalten von einem Trigger.

57 neue Tests (32 Unit, 14 gegen eine echte Datenbank, 11 E2E).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-03 13:50:58 +02:00

63 lines
2.2 KiB
TypeScript

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,
/**
* Bewusst wenige Worker: "next dev" übersetzt jede Route erst beim ersten
* Aufruf. Zu viele gleichzeitige Erstaufrufe lassen den Server so lange
* kompilieren, dass die Navigation ins Zeitlimit läuft — und das sieht dann
* nach einem Fehler in der Anwendung aus, ist aber keiner.
*/
workers: process.env.CI ? 1 : 4,
reporter: process.env.CI ? [["list"], ["html", { open: "never" }]] : [["list"]],
/** Großzügig, aus demselben Grund. Gegen einen Produktionsbuild reicht ein Bruchteil. */
timeout: 90_000,
/**
* Ab Phase 3 großzügiger: mit fünfzig Routen dauert die erste Übersetzung
* einer bisher unbesuchten Seite unter Last auch mal zwanzig Sekunden. Das
* sind Wartezeiten des Entwicklungsservers, keine der Anwendung — vorher
* schlugen dadurch gelegentlich Tests fehl, die einzeln laufen und grün sind.
*/
expect: { timeout: 25_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: 180_000,
},
});