import { existsSync, readFileSync } from "node:fs"; import { describe, expect, it } from "vitest"; const ROUTES: Array<[string, string]> = [ ["moderation", "PERMS.MODERATION_VIEW"], ["moderation/actions", "PERMS.MODERATION_EDIT"], ["moderation/cfh", "PERMS.MODERATION_VIEW"], ["moderation/cfh/[id]", "PERMS.MODERATION_VIEW"], ["moderation/team", "PERMS.MODERATION_VIEW"], ["logs/audit", "PERMS.LOGS_VIEW"], ["logs/chat", "PERMS.LOGS_VIEW"], ["logs/commands", "PERMS.LOGS_VIEW"], ["logs/trades", "PERMS.LOGS_VIEW"], ["analytics", "PERMS.ANALYTICS_VIEW"], ["analytics/activity", "PERMS.ANALYTICS_VIEW"], ["analytics/economy", "PERMS.ANALYTICS_VIEW"], ["devops", "PERMS.DEVOPS_VIEW"], ["devops/errors", "PERMS.DEVOPS_VIEW"], ["online", "PERMS.USERS_VIEW"], ]; describe("admin operations route contract", () => { it.each(ROUTES)("provides and guards /admin/%s", (route, permission) => { const path = `src/app/admin/${route}/page.tsx`; expect(existsSync(path), path).toBe(true); expect(readFileSync(path, "utf8"), path).toContain(permission); }); it.each([ ["analytics/export", "PERMS.ANALYTICS_EXPORT"], ["devops/health", "PERMS.DEVOPS_VIEW"], ])("provides and guards /api/admin/%s", (route, permission) => { const path = `src/app/api/admin/${route}/route.ts`; expect(existsSync(path), path).toBe(true); expect(readFileSync(path, "utf8"), path).toContain(permission); }); it("guards moderation mutations separately from page navigation", () => { const source = readFileSync("src/actions/moderation.ts", "utf8"); expect(source).toContain("PERMS.MODERATION_EDIT"); expect(source).toContain("adminAction"); }); });