import { test, expect } from "@playwright/test"; /** * Scoping & Gating des Wehr-Bereichs (Workstream 7, Querschnittsstandard 1–3, * default-deny dreifach). * * NICHT in der Sandbox ausführbar (kein Server/DB) — deferred. Erwartet: * - anonym: jede /verwaltung/*-Seite -> Redirect auf /login. * - wehr_read: jede /verwaltung/*-Seite -> 403 (forbidden()). * - wehr_admin: erreichbar; fremdes Fahrzeug/Gerät -> 404 (notFound). * * Negativ-Probe: Entfernen von `requireWehrAdmin()` aus (app)/verwaltung/ * layout.tsx ODER aus einer Server-Action muss diese Suite rot machen. */ const VERWALTUNG_PAGES = [ "/verwaltung/profil", "/verwaltung/fahrzeuge", "/verwaltung/fahrzeuge/neu", "/verwaltung/geraete", "/verwaltung/geraete/neu", "/verwaltung/benutzer", ]; test.describe("Verwaltung: anonym -> Redirect auf /login", () => { test.use({ storageState: { cookies: [], origins: [] } }); for (const path of VERWALTUNG_PAGES) { test(`anonymer Aufruf von ${path} leitet auf /login um`, async ({ page, }) => { await page.goto(path); await expect(page).toHaveURL(/\/login/); }); } }); test.describe("Verwaltung: wehr_read -> 403", () => { test.skip( !process.env.E2E_WEHR_READ_STATE, "benötigt wehr_read-Fixture (Test-Workstream)", ); test.use({ storageState: process.env.E2E_WEHR_READ_STATE ?? { cookies: [], origins: [] }, }); for (const path of VERWALTUNG_PAGES) { test(`wehr_read-Aufruf von ${path} -> 403`, async ({ page }) => { const res = await page.goto(path); expect(res?.status()).toBe(403); }); } }); test.describe("Verwaltung: fremde Wehr -> 404 (Scoping)", () => { test.skip( !process.env.E2E_WEHR_ADMIN_STATE || !process.env.E2E_FOREIGN_VEHICLE_ID, "benötigt wehr_admin-Fixture + fremde Fahrzeug-ID (Test-Workstream)", ); test.use({ storageState: process.env.E2E_WEHR_ADMIN_STATE ?? { cookies: [], origins: [] }, }); test("Aufruf eines fremden Fahrzeugs liefert 404", async ({ page }) => { const res = await page.goto( `/verwaltung/fahrzeuge/${process.env.E2E_FOREIGN_VEHICLE_ID}`, ); expect(res?.status()).toBe(404); }); });