import { describe, expect, it } from "bun:test"; import { restoreRichHtml } from "../src/lib/rich-text"; const mapping = { PERSON_01: { original: "Max Mustermann", type: "PERSON" }, ORG_01: { original: "Müller & Söhne", type: "ORG" }, }; describe("formatierte Textwiederherstellung", () => { it("behält Formatierung bei und maskiert Originale HTML-sicher", () => { const html = "

Hallo PERSON_01 bei ORG_01.

"; expect( restoreRichHtml( html, "Hallo PERSON_01 bei ORG_01.", "Hallo Max Mustermann bei Müller & Söhne.", mapping, ), ).toBe( "

Hallo Max Mustermann bei Müller & Söhne.

", ); }); it("ändert weder Attribute noch unsichtbare Inhalte", () => { const html = '
PERSON_01
'; expect(restoreRichHtml(html, "PERSON_01", "Max Mustermann", mapping)).toBe( '
Max Mustermann
', ); }); it("übernimmt kodierte Sitzungsplatzhalter", () => { const html = "<PERSON_01>"; expect( restoreRichHtml( html, "", "Max Mustermann", mapping, undefined, true, ), ).toBe("Max Mustermann"); }); it("verwirft nicht passende oder über mehrere Textknoten verteilte HTML-Daten", () => { expect( restoreRichHtml( "PERSON_01", "anderer Text", "Max Mustermann", mapping, ), ).toBeUndefined(); expect( restoreRichHtml( "PERSON_01", "PERSON_01", "Max Mustermann", mapping, ), ).toBeUndefined(); }); it("beachtet projektbezogene Ersetzung innerhalb zusammengesetzter Begriffe", () => { const html = "abcPERSON_01xyz"; expect( restoreRichHtml( html, "abcPERSON_01xyz", "abcMax Mustermannxyz", mapping, { PERSON_01: "anywhere" }, ), ).toBe("abcMax Mustermannxyz"); }); });