Next.js 16, Prisma 7, Tailwind 4 und Vitest/Playwright, Konfiguration aus Laufzettel übernommen, weil dort derselbe Stack erprobt ist. Die Farben der Branding-Vorgabe stehen als Tokens in globals.css, das helle Theme setzt dieselben Namen neu. Amber und Rot sind dort abgedunkelt, sonst reicht der Kontrast nicht – ein Test prüft beide Themes gegen 4,5:1. Anmeldung mit lokalem Benutzer, Rolle je Anfrage aus der Datenbank, Audit-Log per Trigger nur anhängbar. Geprüft im gebauten Stand auf 1440 px und 390 px. Closes #001 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
27 lines
902 B
TypeScript
27 lines
902 B
TypeScript
import { defineConfig, devices } from "@playwright/test";
|
||
|
||
/**
|
||
* Ende-zu-Ende-Abläufe – immer gegen den **gebauten** Stand (`pnpm build && pnpm start`), weil
|
||
* `next dev` hier nicht verlässlich hydriert und ein Screenshot dann nichts beweist.
|
||
*/
|
||
const APP_URL = process.env["E2E_APP_URL"] ?? "http://127.0.0.1:3310";
|
||
|
||
export default defineConfig({
|
||
testDir: "./tests/e2e",
|
||
fullyParallel: false,
|
||
workers: 1,
|
||
forbidOnly: Boolean(process.env["CI"]),
|
||
reporter: "list",
|
||
use: {
|
||
baseURL: APP_URL,
|
||
trace: "retain-on-failure",
|
||
locale: "de-DE",
|
||
timezoneId: "Europe/Berlin",
|
||
},
|
||
projects: [
|
||
{ name: "desktop", use: { ...devices["Desktop Chrome"], viewport: { width: 1440, height: 900 } } },
|
||
// 390 px ist die Abnahmebreite fürs Handy (kein horizontales Scrollen).
|
||
{ name: "handy", use: { ...devices["Pixel 7"], viewport: { width: 390, height: 844 } } },
|
||
],
|
||
});
|