// #113 - Integration tests for /modules endpoints import { assertEquals, assertExists, assertRejects } from "@std/assert"; import { seedModules, testDb, truncateAll } from "../helpers/db_integration.ts"; import { modules } from "$root/databases/schema.ts"; import { eq } from "npm:drizzle-orm@0.45.2"; Deno.test({ name: "integration modules: list all modules", async fn() { await truncateAll(); await seedModules([{ id: "MATH101", nom: "Mathématiques" }, { id: "INFO101", nom: "Informatique", }]); const rows = await testDb.select().from(modules); assertEquals(rows.length, 2); }, sanitizeResources: false, sanitizeOps: false, }); Deno.test({ name: "integration modules: create and retrieve by id", async fn() { await truncateAll(); const [created] = await testDb.insert(modules).values({ id: "PHYS101", nom: "Physique", }).returning(); assertExists(created); assertEquals(created.id, "PHYS101"); const row = await testDb .select() .from(modules) .where(eq(modules.id, "PHYS101")) .then((r) => r[0] ?? null); assertExists(row); }, sanitizeResources: false, sanitizeOps: false, }); Deno.test({ name: "integration modules: get by id returns null when not found", async fn() { await truncateAll(); const row = await testDb .select() .from(modules) .where(eq(modules.id, "NONEXISTENT")) .then((r) => r[0] ?? null); assertEquals(row, null); }, sanitizeResources: false, sanitizeOps: false, }); Deno.test({ name: "integration modules: duplicate id insert fails", async fn() { await truncateAll(); await seedModules([{ id: "MATH101", nom: "Mathématiques" }]); await assertRejects(() => testDb.insert(modules).values({ id: "MATH101", nom: "Doublon" }) ); }, sanitizeResources: false, sanitizeOps: false, }); Deno.test({ name: "integration modules: update nom", async fn() { await truncateAll(); await seedModules([{ id: "ELEC201", nom: "Électronique" }]); const [updated] = await testDb .update(modules) .set({ nom: "Électronique numérique" }) .where(eq(modules.id, "ELEC201")) .returning(); assertEquals(updated.nom, "Électronique numérique"); }, sanitizeResources: false, sanitizeOps: false, }); Deno.test({ name: "integration modules: delete removes the module", async fn() { await truncateAll(); await seedModules([{ id: "BIO101", nom: "Biologie" }]); await testDb.delete(modules).where(eq(modules.id, "BIO101")); const row = await testDb .select() .from(modules) .where(eq(modules.id, "BIO101")) .then((r) => r[0] ?? null); assertEquals(row, null); }, sanitizeResources: false, sanitizeOps: false, });