Files
system_update/server/services/importantMessages.test.ts
T
gilles a93a43e1c8 feat(messages): extraction des messages importants APT (tâche 5 backlog)
- extractImportantMessages (TDD) : E:/dpkg error → error, W:/GPG → warning,
  déprecations/EOL → future_major_change ; nettoyage des secrets dans les URLs
- recordImportantMessages : dédup par (machine, source, message) non acquitté →
  maj lastSeenAt, sinon insert (firstSeen/lastSeen) dans important_messages
- branché dans refreshMachine (sortie APT) avec snapshotId
- routes GET /machines/:id/messages + POST .../:msgId/ack
- UI : carte « Messages importants » (badge sévérité + ack) dans le panneau détail

tsc 0 · 118 tests · build OK.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-06 19:30:07 +02:00

43 lines
1.7 KiB
TypeScript

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);
});
});