58 lines
2.0 KiB
TypeScript
58 lines
2.0 KiB
TypeScript
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);
|
||
});
|
||
});
|