// #115 - Unit tests for GET /permissions import { assertEquals, assertExists } from "@std/assert"; import { mockFetch, restoreFetch } from "../helpers/api_mock.ts"; interface Permission { id: string; nom: string; } const EXPECTED_PERMISSIONS: Permission[] = [ { id: "student_read", nom: "Consulter les élèves" }, { id: "student_write", nom: "Gérer les élèves" }, { id: "note_read", nom: "Consulter les notes" }, { id: "note_write", nom: "Gérer les notes" }, { id: "module_read", nom: "Consulter les modules" }, { id: "module_write", nom: "Gérer les modules" }, { id: "user_read", nom: "Consulter les utilisateurs" }, { id: "user_write", nom: "Gérer les utilisateurs" }, { id: "role_write", nom: "Gérer les rôles" }, ]; Deno.test("permissions: known permission ids", () => { const ids = EXPECTED_PERMISSIONS.map((p) => p.id); assertEquals(ids.includes("student_read"), true); assertEquals(ids.includes("student_write"), true); assertEquals(ids.includes("note_read"), true); assertEquals(ids.includes("role_write"), true); assertEquals(ids.length, 9); }); Deno.test("permissions: all permissions have string id and nom", () => { for (const p of EXPECTED_PERMISSIONS) { assertEquals(typeof p.id, "string"); assertEquals(typeof p.nom, "string"); } }); Deno.test("mock API: GET /permissions returns all permissions", async () => { mockFetch({ "/permissions": EXPECTED_PERMISSIONS }); try { const res = await fetch("http://localhost/api/permissions"); assertEquals(res.status, 200); const data: Permission[] = await res.json(); assertEquals(data.length, 9); assertExists(data.find((p) => p.id === "student_read")); assertExists(data.find((p) => p.id === "role_write")); } finally { restoreFetch(); } }); Deno.test("mock API: GET /permissions - each permission has id and nom", async () => { mockFetch({ "/permissions": EXPECTED_PERMISSIONS }); try { const res = await fetch("http://localhost/api/permissions"); const data: Permission[] = await res.json(); for (const p of data) { assertExists(p.id); assertExists(p.nom); } } finally { restoreFetch(); } });