// #110 - Integration tests for /promotions endpoints import { assertEquals, assertExists } from "@std/assert"; import { seedPromotions, testDb, truncateAll, } from "../helpers/db_integration.ts"; import { promotions } from "$root/databases/schema.ts"; import { eq } from "npm:drizzle-orm@0.45.2"; Deno.test({ name: "integration promotions: list all", async fn() { await truncateAll(); await seedPromotions([ { id: "PEIP1-2024", annee: "2024" }, { id: "PEIP2-2024", annee: "2024" }, ]); const rows = await testDb.select().from(promotions); assertEquals(rows.length, 2); }, sanitizeResources: false, sanitizeOps: false, }); Deno.test({ name: "integration promotions: create and retrieve by id", async fn() { await truncateAll(); const [created] = await testDb .insert(promotions) .values({ id: "INFO3-2025", annee: "2025" }) .returning(); assertExists(created); assertEquals(created.id, "INFO3-2025"); assertEquals(created.annee, "2025"); const row = await testDb .select() .from(promotions) .where(eq(promotions.id, "INFO3-2025")) .then((r) => r[0] ?? null); assertExists(row); }, sanitizeResources: false, sanitizeOps: false, }); Deno.test({ name: "integration promotions: get by id returns null when not found", async fn() { await truncateAll(); const row = await testDb .select() .from(promotions) .where(eq(promotions.id, "NONEXISTENT")) .then((r) => r[0] ?? null); assertEquals(row, null); }, sanitizeResources: false, sanitizeOps: false, }); Deno.test({ name: "integration promotions: update annee", async fn() { await truncateAll(); await seedPromotions([{ id: "INFO3-2023", annee: "2023" }]); const [updated] = await testDb .update(promotions) .set({ annee: "2024" }) .where(eq(promotions.id, "INFO3-2023")) .returning(); assertExists(updated); assertEquals(updated.annee, "2024"); }, sanitizeResources: false, sanitizeOps: false, }); Deno.test({ name: "integration promotions: delete removes the row", async fn() { await truncateAll(); await seedPromotions([{ id: "INFO3-2022", annee: "2022" }]); await testDb.delete(promotions).where(eq(promotions.id, "INFO3-2022")); const row = await testDb .select() .from(promotions) .where(eq(promotions.id, "INFO3-2022")) .then((r) => r[0] ?? null); assertEquals(row, null); }, sanitizeResources: false, sanitizeOps: false, }); Deno.test({ name: "integration promotions: update non-existent returns empty", async fn() { await truncateAll(); const result = await testDb .update(promotions) .set({ annee: "2099" }) .where(eq(promotions.id, "GHOST")) .returning(); assertEquals(result.length, 0); }, sanitizeResources: false, sanitizeOps: false, });