import { describe, expect, it } from "vitest"; import { readFileSync } from "node:fs"; import { resolve } from "node:path"; const readRouter = () => readFileSync(resolve(__dirname, "./router/index.ts"), "utf8"); describe("admin project route permissions", () => { it("allows project admin pages through matrix-authorized PMs instead of all project roles", () => { const source = readRouter(); expect(source).toContain('adminProjectPermission: { module: "project_members", action: "read" }'); expect(source).toContain('adminProjectPermission: { module: "project_members", action: "write" }'); expect(source).toContain('adminProjectPermission: { module: "sites", action: "read" }'); expect(source).toContain('adminProjectPermission: { module: "audit_export", action: "read" }'); expect(source).toContain("meta: { title: TEXT.menu.projectManagement }"); expect(source).toContain('if (role !== "PM") return false;'); expect(source).toContain("roles?.[role]?.[permission.module]?.[permission.action]"); }); it("keeps login landing independent from PM management backend access", () => { const source = readRouter(); expect(source).not.toContain("findPmAdminLandingPath"); expect(source).not.toContain("pmAdminLandingModules"); expect(source).toContain(' : studyStore.currentStudy\n ? "/project/overview"\n : "/workbench",'); }); });