// E2E tests for /ues endpoints — handler + real DB import { assertEquals, assertExists } from "@std/assert"; import { makeEmployeeContext, makeGetRequest, makeJsonRequest, } from "../helpers/handler.ts"; import { seedUes, truncateAll } from "../helpers/db_integration.ts"; import { handler as uesHandler } from "$apps/notes/api/ues.ts"; import { handler as ueHandler } from "$apps/notes/api/ues/[idUE].ts"; // --- GET /ues --- Deno.test({ name: "e2e ues: GET /ues returns all UEs", async fn() { await truncateAll(); await seedUes([{ nom: "UE Informatique" }, { nom: "UE Mathématiques" }]); const res = await uesHandler.GET!( makeGetRequest("/ues"), makeEmployeeContext(), ); assertEquals(res.status, 200); const body = await res.json(); assertEquals(body.length, 2); }, sanitizeResources: false, sanitizeOps: false, }); Deno.test({ name: "e2e ues: GET /ues returns empty when no UEs", async fn() { await truncateAll(); const res = await uesHandler.GET!( makeGetRequest("/ues"), makeEmployeeContext(), ); assertEquals(res.status, 200); const body = await res.json(); assertEquals(body.length, 0); }, sanitizeResources: false, sanitizeOps: false, }); // --- POST /ues --- Deno.test({ name: "e2e ues: POST /ues creates UE (201)", async fn() { await truncateAll(); const res = await uesHandler.POST!( makeJsonRequest("/ues", "POST", { nom: "UE Physique" }), makeEmployeeContext(), ); assertEquals(res.status, 201); const body = await res.json(); assertExists(body.id); assertEquals(body.nom, "UE Physique"); }, sanitizeResources: false, sanitizeOps: false, }); Deno.test({ name: "e2e ues: POST /ues 400 on missing nom", async fn() { await truncateAll(); const res = await uesHandler.POST!( makeJsonRequest("/ues", "POST", {}), makeEmployeeContext(), ); assertEquals(res.status, 400); }, sanitizeResources: false, sanitizeOps: false, }); // --- GET /ues/:id --- Deno.test({ name: "e2e ues: GET /ues/:id returns UE", async fn() { await truncateAll(); const [ue] = await seedUes([{ nom: "UE Chimie" }]); const res = await ueHandler.GET!( makeGetRequest(`/ues/${ue.id}`), makeEmployeeContext({ idUE: String(ue.id) }), ); assertEquals(res.status, 200); const body = await res.json(); assertEquals(body.nom, "UE Chimie"); }, sanitizeResources: false, sanitizeOps: false, }); Deno.test({ name: "e2e ues: GET /ues/:id 404 when not found", async fn() { await truncateAll(); const res = await ueHandler.GET!( makeGetRequest("/ues/99999"), makeEmployeeContext({ idUE: "99999" }), ); assertEquals(res.status, 404); }, sanitizeResources: false, sanitizeOps: false, }); // --- PUT /ues/:id --- Deno.test({ name: "e2e ues: PUT /ues/:id updates nom", async fn() { await truncateAll(); const [ue] = await seedUes([{ nom: "UE Biologie" }]); const res = await ueHandler.PUT!( makeJsonRequest(`/ues/${ue.id}`, "PUT", { nom: "UE Biologie moléculaire", }), makeEmployeeContext({ idUE: String(ue.id) }), ); assertEquals(res.status, 200); const body = await res.json(); assertEquals(body.nom, "UE Biologie moléculaire"); }, sanitizeResources: false, sanitizeOps: false, }); Deno.test({ name: "e2e ues: PUT /ues/:id 404 when not found", async fn() { await truncateAll(); const res = await ueHandler.PUT!( makeJsonRequest("/ues/99999", "PUT", { nom: "X" }), makeEmployeeContext({ idUE: "99999" }), ); assertEquals(res.status, 404); }, sanitizeResources: false, sanitizeOps: false, }); // --- DELETE /ues/:id --- Deno.test({ name: "e2e ues: DELETE /ues/:id returns 204", async fn() { await truncateAll(); const [ue] = await seedUes([{ nom: "UE à supprimer" }]); const res = await ueHandler.DELETE!( makeGetRequest(`/ues/${ue.id}`), makeEmployeeContext({ idUE: String(ue.id) }), ); assertEquals(res.status, 204); }, sanitizeResources: false, sanitizeOps: false, }); Deno.test({ name: "e2e ues: DELETE /ues/:id 404 when not found", async fn() { await truncateAll(); const res = await ueHandler.DELETE!( makeGetRequest("/ues/99999"), makeEmployeeContext({ idUE: "99999" }), ); assertEquals(res.status, 404); }, sanitizeResources: false, sanitizeOps: false, });