import { describe, expect, it } from "vitest";
import { problemMessage } from "./problem";

describe("problemMessage", () => {
  it("rend le detail du Problem Details quand l'api en donne un", () => {
    expect(
      problemMessage(
        410,
        JSON.stringify({
          status: 410,
          title: "Gone",
          detail: "Fichier d'erreurs expiré : les fichiers d'import sont purgés à 30 jours",
        }),
      ),
    ).toBe("Fichier d'erreurs expiré : les fichiers d'import sont purgés à 30 jours");
  });

  it("distingue « expiré » (410) de « jamais produit » (404) quand le detail manque", () => {
    expect(problemMessage(410, "")).toContain("expiré");
    expect(problemMessage(404, "")).toBe("Ressource introuvable.");
  });

  it("retombe sur le title quand le detail est absent ou vide", () => {
    expect(problemMessage(422, JSON.stringify({ title: "Validation error" }))).toBe(
      "Validation error",
    );
    expect(problemMessage(422, JSON.stringify({ title: "Validation error", detail: "" }))).toBe(
      "Validation error",
    );
  });

  it("tolère un corps non JSON (page d'erreur d'un proxy)", () => {
    expect(problemMessage(413, "<html>Payload Too Large</html>")).toBe("Fichier trop volumineux.");
  });

  it("nomme le code HTTP pour un statut sans repli connu", () => {
    expect(problemMessage(503, "")).toBe("La requête a échoué (HTTP 503).");
  });
});
