import { describe, expect, test } from "bun:test"; import { CLE_EVENEMENT_EN_ATTENTE, deposerEvenement, serialiserPourFormulaire, } from "./extension/transfert.js"; function evenement(surcharges: Record = {}) { return { uid: "uid-1", titre: "Atelier", description: "Venez nombreux", lieu: "Salle des fêtes", debut: new Date("2026-07-10T16:00:00Z"), fin: new Date("2026-07-10T18:00:00Z"), categories: ["soumis"], journeeEntiere: false, ...surcharges, }; } // Storage factice (Chicago) : capture ce qui est écrit, pas de mock lourd. function storageFactice() { const ecrit: Record = {}; return { ecrit, set: async (objet: Record) => Object.assign(ecrit, objet), }; } describe("serialiserPourFormulaire", () => { test("debut et fin deviennent des chaînes ISO", () => { const payload = serialiserPourFormulaire(evenement()); expect(payload.debut).toBe("2026-07-10T16:00:00.000Z"); expect(payload.fin).toBe("2026-07-10T18:00:00.000Z"); }); test("un lieu vide reste vide (pas de défaut café — D4)", () => { const payload = serialiserPourFormulaire(evenement({ lieu: "" })); expect(payload.lieu).toBe(""); }); test("porte tous les champs du contrat Event", () => { const payload = serialiserPourFormulaire(evenement()); expect(payload).toEqual({ uid: "uid-1", titre: "Atelier", description: "Venez nombreux", lieu: "Salle des fêtes", debut: "2026-07-10T16:00:00.000Z", fin: "2026-07-10T18:00:00.000Z", categories: ["soumis"], journeeEntiere: false, }); }); test("aller-retour : le content script peut réhydrater debut", () => { const ev = evenement(); const payload = serialiserPourFormulaire(ev); expect(new Date(payload.debut).getTime()).toBe(ev.debut.getTime()); }); }); describe("deposerEvenement", () => { test("écrit sous la clé evenement-en-attente", async () => { const storage = storageFactice(); await deposerEvenement(storage, evenement()); expect(storage.ecrit[CLE_EVENEMENT_EN_ATTENTE]).toMatchObject({ uid: "uid-1" }); }); test("un second dépôt écrase le premier (slot unique — D2)", async () => { const storage = storageFactice(); await deposerEvenement(storage, evenement({ uid: "premier" })); await deposerEvenement(storage, evenement({ uid: "second" })); expect(Object.keys(storage.ecrit)).toEqual([CLE_EVENEMENT_EN_ATTENTE]); expect(storage.ecrit[CLE_EVENEMENT_EN_ATTENTE]).toMatchObject({ uid: "second" }); }); });