From f162fcaadc56be45675cb1030f5dacbce402630d Mon Sep 17 00:00:00 2001 From: Djalim Simaila Date: Mon, 27 Apr 2026 18:56:04 +0200 Subject: [PATCH] feat: add role_write permission and update e2e tests Add role_write permission to permissions table and update migrations. Update e2e tests to use DB integration and seed permissions. Add seedPermissions helper. --- .../migrations/0001_seed_permissions.sql | 3 +- .../0002_update_permission_names.sql | 3 +- tests/e2e/permissions_test.ts | 38 ++++++++++++++----- tests/helpers/db_integration.ts | 6 +++ 4 files changed, 38 insertions(+), 12 deletions(-) diff --git a/databases/migrations/0001_seed_permissions.sql b/databases/migrations/0001_seed_permissions.sql index 6ea1572..922f6fa 100644 --- a/databases/migrations/0001_seed_permissions.sql +++ b/databases/migrations/0001_seed_permissions.sql @@ -7,4 +7,5 @@ INSERT INTO "permissions" ("id", "nom") VALUES ('module_read', 'Consulter les modules et enseignements'), ('module_write', 'Gérer les modules et enseignements'), ('user_read', 'Consulter les utilisateurs et leurs rôles'), - ('user_write', 'Gérer les utilisateurs et leurs rôles'); + ('user_write', 'Gérer les utilisateurs et leurs rôles'), + ('role_write', 'Gérer les rôles et leurs permissions'); diff --git a/databases/migrations/0002_update_permission_names.sql b/databases/migrations/0002_update_permission_names.sql index 4e1b1d0..d598c10 100644 --- a/databases/migrations/0002_update_permission_names.sql +++ b/databases/migrations/0002_update_permission_names.sql @@ -9,5 +9,6 @@ INSERT INTO "permissions" ("id", "nom") VALUES ('module_read', 'Consulter les modules et enseignements'), ('module_write', 'Gérer les modules et enseignements'), ('user_read', 'Consulter les utilisateurs et leurs rôles'), - ('user_write', 'Gérer les utilisateurs et leurs rôles') + ('user_write', 'Gérer les utilisateurs et leurs rôles'), + ('role_write', 'Gérer les rôles et leurs permissions') ON CONFLICT ("id") DO UPDATE SET "nom" = EXCLUDED."nom"; diff --git a/tests/e2e/permissions_test.ts b/tests/e2e/permissions_test.ts index 158c82a..8dff05d 100644 --- a/tests/e2e/permissions_test.ts +++ b/tests/e2e/permissions_test.ts @@ -1,24 +1,40 @@ // #115 - E2E tests for GET /permissions -// Handler statique (pas de DB), test direct du handler import { assertEquals, assertExists } from "@std/assert"; import { makeEmployeeContext, makeGetRequest } from "../helpers/handler.ts"; +import { + seedPermissions, + truncateAll, +} from "../helpers/db_integration.ts"; import { handler as permissionsHandler } from "$apps/admin/api/permissions.ts"; +const PERMISSIONS = [ + { id: "note_read", nom: "Consulter les notes des étudiants" }, + { id: "note_write", nom: "Saisir et modifier les notes" }, + { id: "student_read", nom: "Consulter la liste des étudiants" }, + { id: "student_write", nom: "Gérer les étudiants (ajout, modification, suppression)" }, + { id: "module_read", nom: "Consulter les modules et enseignements" }, + { id: "module_write", nom: "Gérer les modules et enseignements" }, + { id: "user_read", nom: "Consulter les utilisateurs et leurs rôles" }, + { id: "user_write", nom: "Gérer les utilisateurs et leurs rôles" }, + { id: "role_write", nom: "Gérer les rôles et leurs permissions" }, +]; + Deno.test({ name: "e2e permissions: GET /permissions returns all 9 permissions", - fn() { - const res = permissionsHandler.GET!( + async fn() { + await truncateAll(); + await seedPermissions(PERMISSIONS); + const res = await permissionsHandler.GET!( makeGetRequest("/permissions"), makeEmployeeContext(), ); assertEquals(res.status, 200); - return res.text().then((text) => { - const data = JSON.parse(text); - assertEquals(data.length, 9); - assertExists(data.find((p: { id: string }) => p.id === "student_read")); - assertExists(data.find((p: { id: string }) => p.id === "role_write")); - }); + const text = await res.text(); + const data = JSON.parse(text); + assertEquals(data.length, 9); + assertExists(data.find((p: { id: string }) => p.id === "student_read")); + assertExists(data.find((p: { id: string }) => p.id === "role_write")); }, sanitizeResources: false, sanitizeOps: false, @@ -27,7 +43,9 @@ Deno.test({ Deno.test({ name: "e2e permissions: GET /permissions - all entries have id and nom", async fn() { - const res = permissionsHandler.GET!( + await truncateAll(); + await seedPermissions(PERMISSIONS); + const res = await permissionsHandler.GET!( makeGetRequest("/permissions"), makeEmployeeContext(), ); diff --git a/tests/helpers/db_integration.ts b/tests/helpers/db_integration.ts index 4b91b25..2a571bf 100644 --- a/tests/helpers/db_integration.ts +++ b/tests/helpers/db_integration.ts @@ -111,3 +111,9 @@ export async function seedAjustements( ): Promise { return await testDb.insert(schema.ajustements).values(rows).returning(); } + +export async function seedPermissions( + rows: { id: string; nom: string }[], +): Promise { + return await testDb.insert(schema.permissions).values(rows).returning(); +}