import { describe, expect, it } from "vitest"; import { normalizeAgentMentionToken } from "../services/issues.ts"; describe("normalizeAgentMentionToken", () => { it("decodes hex numeric entities such as space ( )", () => { expect(normalizeAgentMentionToken("Baba ")).toBe("Baba"); }); it("decodes decimal numeric entities", () => { expect(normalizeAgentMentionToken("Baba ")).toBe("Baba"); }); it("decodes common named whitespace entities", () => { expect(normalizeAgentMentionToken("Baba ")).toBe("Baba"); }); // Mid-token entity (review asked for this shape); we decode &→&, not strip to "Baba" (that broke M&M). it("decodes a named entity in the middle of the token", () => { expect(normalizeAgentMentionToken("Ba&ba")).toBe("Ba&ba"); }); it("decodes & so agent names with ampersands still match", () => { expect(normalizeAgentMentionToken("M&M")).toBe("M&M"); }); it("decodes additional named entities used in rich text (e.g. ©)", () => { expect(normalizeAgentMentionToken("Agent©Name")).toBe("Agent©Name"); }); it("leaves unknown semicolon-terminated named references unchanged", () => { expect(normalizeAgentMentionToken("Baba¬arealentity;")).toBe("Baba¬arealentity;"); }); it("returns plain names unchanged", () => { expect(normalizeAgentMentionToken("Baba")).toBe("Baba"); }); it("trims after decoding entities", () => { expect(normalizeAgentMentionToken("Baba ")).toBe("Baba"); }); });