import { test, expect } from "@playwright/test"; /** * Admin-Gating (Workstream 6, Querschnittsstandard 1–3, default-deny dreifach). * * NICHT in der Sandbox ausführbar (kein Server/DB) — deferred. Wird über einen * laufenden Server ausgeführt. Erwartet: * - anonym: jede /admin/*-Seite -> Redirect auf /login. * - wehr_admin / wehr_read: jede /admin/*-Seite -> 403 (forbidden()). * - platform_admin: /admin erreichbar. * * Negativ-Probe: Entfernen von `requirePlatformAdmin()` aus (admin)/layout.tsx * muss diese Suite rot machen. */ const ADMIN_PAGES = [ "/admin", "/admin/merkmale", "/admin/merkmale/proposals", "/admin/vorlagen", "/admin/geraete-kategorien", "/admin/wehren", "/admin/wehren/neu", "/admin/audit", ]; test.describe("Admin: anonym -> Redirect auf /login", () => { test.use({ storageState: { cookies: [], origins: [] } }); for (const path of ADMIN_PAGES) { test(`anonymer Aufruf von ${path} leitet auf /login um`, async ({ page, }) => { await page.goto(path); await expect(page).toHaveURL(/\/login/); }); } }); // Diese Projekte setzen einen storageState eines wehr_admin/wehr_read-Kontos // voraus (Test-Workstream stellt die Fixtures bereit). Hier dokumentiert als // erwartetes Verhalten; das tatsächliche Konto wird über --project gewählt. test.describe("Admin: falsche Rolle -> 403", () => { test.skip( !process.env.E2E_WEHR_ADMIN_STATE, "benötigt wehr_admin-Fixture (Test-Workstream)", ); test.use({ storageState: process.env.E2E_WEHR_ADMIN_STATE ?? { cookies: [], origins: [] }, }); for (const path of ADMIN_PAGES) { test(`wehr_admin-Aufruf von ${path} -> 403`, async ({ page }) => { const res = await page.goto(path); expect(res?.status()).toBe(403); }); } }); test.describe("Admin: platform_admin -> erreichbar", () => { test.skip( !process.env.E2E_PLATFORM_ADMIN_STATE, "benötigt platform_admin-Fixture (Test-Workstream)", ); test.use({ storageState: process.env.E2E_PLATFORM_ADMIN_STATE ?? { cookies: [], origins: [] }, }); test("/admin ist als platform_admin erreichbar", async ({ page }) => { await page.goto("/admin"); await expect( page.getByRole("heading", { name: "Administration" }), ).toBeVisible(); }); });