import { describe, expect, it } from "vitest"; import { calculateInvoiceQualityScore } from "@shared/invoiceQuality"; const defaultRequiredFields = [ { fieldName: "supplierName", isRequired: 1 }, { fieldName: "invoiceNumber", isRequired: 1 }, { fieldName: "invoiceDate", isRequired: 1 }, { fieldName: "totalAmount", isRequired: 1 }, { fieldName: "deliveryNoteNumber", isRequired: 0 }, ]; describe("calculateInvoiceQualityScore", () => { it("passe à 100 % lorsque tous les champs obligatoires sont complétés manuellement", () => { expect(calculateInvoiceQualityScore({ supplierName: "Microsoft France", invoiceNumber: "FAC-2026-001", invoiceDate: new Date("2026-09-30"), totalAmount: "0.00", }, defaultRequiredFields)).toBe(100); }); it("recalcule proportionnellement lorsque seuls certains champs obligatoires sont remplis", () => { expect(calculateInvoiceQualityScore({ supplierName: "Microsoft France", invoiceNumber: "FAC-2026-001", invoiceDate: new Date("2026-09-30"), totalAmount: " ", }, defaultRequiredFields)).toBe(75); }); it("utilise la configuration personnalisée des champs obligatoires", () => { const configuration = [ { fieldName: "recipientName", isRequired: 1 }, { fieldName: "supplierName", isRequired: 0 }, ]; expect(calculateInvoiceQualityScore({ recipientName: "ITINOVA", supplierName: "", }, configuration)).toBe(100); }); it("utilise les champs obligatoires par défaut lorsqu’aucune configuration n’existe encore", () => { expect(calculateInvoiceQualityScore({ supplierName: "Fournisseur", invoiceNumber: "F-1", invoiceDate: new Date("2026-09-30"), totalAmount: "120.00", }, [])).toBe(100); }); it("retourne 100 % lorsque le compte a explicitement rendu tous ses champs optionnels", () => { expect(calculateInvoiceQualityScore({}, [ { fieldName: "supplierName", isRequired: 0 }, ])).toBe(100); }); });