import { describe, it, expect } from "vitest"; import { extractImportantMessages } from "./importantMessages.js"; describe("extractImportantMessages", () => { it("classe les erreurs APT (E:, dpkg) en error", () => { const raw = [ "E: Unable to locate package toto", "dpkg: error processing package nginx (--configure):", "Inst libc6 [2.36] (2.37 Debian:13)", ].join("\n"); const msgs = extractImportantMessages(raw, "apt"); expect(msgs.filter((m) => m.severity === "error").length).toBe(2); expect(msgs.every((m) => m.category === "error")).toBe(true); }); it("classe W: et erreurs GPG en warning", () => { const raw = [ "W: GPG error: http://deb.debian.org ... NO_PUBKEY 1234ABCD", "W: Target Packages is configured multiple times", ].join("\n"); const msgs = extractImportantMessages(raw, "apt"); expect(msgs.length).toBe(2); expect(msgs.every((m) => m.severity === "warning")).toBe(true); }); it("détecte les annonces de dépréciation / changement majeur", () => { const raw = "Note: package foo is deprecated and will be removed in the next release"; const msgs = extractImportantMessages(raw, "apt"); expect(msgs.some((m) => m.category === "future_major_change")).toBe(true); }); it("nettoie les secrets éventuels dans les URLs", () => { const raw = "E: Failed to fetch https://user:pass@repo.example/x"; const msgs = extractImportantMessages(raw, "apt"); expect(msgs[0]!.message).not.toContain("user:pass"); }); it("ignore les lignes normales", () => { const raw = "Reading package lists...\nBuilding dependency tree..."; expect(extractImportantMessages(raw, "apt")).toHaveLength(0); }); });