import { describe, expect, it } from "vitest"; import { buildDisputeDetailLocation, getBapReturnLocation, } from "../client/src/lib/bapNavigation"; describe("navigation Factures litiges", () => { it("ouvre le détail avec un contexte explicite de retour Litiges", () => { expect(buildDisputeDetailLocation(42)).toBe( "/invoices/42?returnTo=disputes" ); expect(getBapReturnLocation("?returnTo=disputes")).toBe( "/invoices-disputes" ); }); it("conserve une recherche fournisseur, numéro ou commentaire avec caractères spéciaux", () => { const location = buildDisputeDetailLocation( 18, "Facture été & livraison\nà revoir" ); const search = location.slice(location.indexOf("?")); expect(new URLSearchParams(search).get("q")).toBe( "Facture été & livraison\nà revoir" ); expect(getBapReturnLocation(search)).toBe( "/invoices-disputes?q=Facture+%C3%A9t%C3%A9+%26+livraison%0A%C3%A0+revoir" ); }); it("ignore les paramètres étrangers au contexte Litiges", () => { expect( getBapReturnLocation( "returnTo=disputes&q=retard&status=exported&year=2026&redirect=https%3A%2F%2Fexample.com" ) ).toBe("/invoices-disputes?q=retard"); }); it("ne propage pas une recherche vide", () => { expect(getBapReturnLocation("?returnTo=disputes&q=")).toBe( "/invoices-disputes" ); }); it("refuse les destinations de retour arbitraires", () => { expect(getBapReturnLocation("?returnTo=https%3A%2F%2Fexample.com")).toBe( "/invoices" ); expect(getBapReturnLocation("?returnTo=%2Finvoices-disputes")).toBe( "/invoices" ); expect(getBapReturnLocation("")).toBe("/invoices"); }); it("conserve le retour historique aux factures BAP", () => { expect( getBapReturnLocation( "?returnTo=bap&q=fournisseur&year=2026&month=05&sort=invoiceDate&dir=asc" ) ).toBe( "/invoices-bap?q=fournisseur&year=2026&month=05&sort=invoiceDate&dir=asc" ); }); });