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