import { describe, expect, it } from "vitest"; import { contactSchema, cleanText } from "@/lib/validation"; const valid = { name: " Marie Tremblay ", email: "Marie@Exemple.COM", organization: "", subject: "Recherche de subventions", message: "Bonjour, nous aimerions discuter d'un projet de financement pour notre organisme.", consent: true, website: "", }; describe("validation du formulaire de contact", () => { it("normalise et accepte une soumission valide", () => { const r = contactSchema.safeParse(valid); expect(r.success).toBe(true); if (r.success) { expect(r.data.name).toBe("Marie Tremblay"); expect(r.data.email).toBe("marie@exemple.com"); } }); it("refuse l'injection d'en-têtes dans le sujet", () => { const r = contactSchema.safeParse({ ...valid, subject: "Sujet\r\nBcc: spam@exemple.com" }); expect(r.success).toBe(false); }); it("exige le consentement", () => { expect(contactSchema.safeParse({ ...valid, consent: false }).success).toBe(false); }); it("refuse un message trop court ou trop long", () => { expect(contactSchema.safeParse({ ...valid, message: "court" }).success).toBe(false); expect(contactSchema.safeParse({ ...valid, message: "x".repeat(4001) }).success).toBe(false); }); it("détecte le honeypot rempli", () => { const r = contactSchema.safeParse({ ...valid, website: "http://spam" }); expect(r.success).toBe(false); if (!r.success) expect(r.error.issues.some((i) => i.path[0] === "website")).toBe(true); }); it("retire les caractères de contrôle", () => { expect(cleanText("abc\u0000\u0007def ghi")).toBe("abcdef ghi"); }); });