2026-03-20 16:38:55 +00:00
|
|
|
import { describe, expect, it } from "vitest";
|
|
|
|
|
import { normalizeAgentMentionToken } from "../services/issues.ts";
|
|
|
|
|
|
|
|
|
|
describe("normalizeAgentMentionToken", () => {
|
2026-03-24 10:03:15 +02:00
|
|
|
it("decodes hex numeric entities such as space ( )", () => {
|
2026-03-20 16:38:55 +00:00
|
|
|
expect(normalizeAgentMentionToken("Baba ")).toBe("Baba");
|
|
|
|
|
});
|
|
|
|
|
|
2026-03-24 10:03:15 +02:00
|
|
|
it("decodes decimal numeric entities", () => {
|
2026-03-20 16:38:55 +00:00
|
|
|
expect(normalizeAgentMentionToken("Baba ")).toBe("Baba");
|
|
|
|
|
});
|
|
|
|
|
|
2026-03-24 10:03:15 +02:00
|
|
|
it("decodes common named whitespace entities", () => {
|
2026-03-20 16:38:55 +00:00
|
|
|
expect(normalizeAgentMentionToken("Baba ")).toBe("Baba");
|
|
|
|
|
});
|
|
|
|
|
|
2026-03-24 15:29:28 +02:00
|
|
|
/**
|
|
|
|
|
* Greptile (PR review): cover an entity in the *middle* of a token, not only trailing ` ` / ` `.
|
|
|
|
|
* Earlier implementation *stripped* `&`, turning `Ba&ba` into `Baba` and breaking names like `M&M`.
|
|
|
|
|
* Current behavior decodes `&` → `&`, so the expected value is `Ba&ba`, not `Baba`.
|
|
|
|
|
*/
|
|
|
|
|
it("decodes a named entity mid-token (Ba&ba → Ba&ba, not strip to Baba)", () => {
|
2026-03-24 09:40:55 +02:00
|
|
|
expect(normalizeAgentMentionToken("Ba&ba")).toBe("Ba&ba");
|
2026-03-24 15:22:21 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("decodes & so agent names with ampersands still match", () => {
|
2026-03-24 09:40:55 +02:00
|
|
|
expect(normalizeAgentMentionToken("M&M")).toBe("M&M");
|
|
|
|
|
});
|
|
|
|
|
|
2026-03-24 15:22:21 +02:00
|
|
|
it("decodes additional named entities used in rich text (e.g. ©)", () => {
|
2026-03-24 10:03:15 +02:00
|
|
|
expect(normalizeAgentMentionToken("Agent©Name")).toBe("Agent©Name");
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("leaves unknown semicolon-terminated named references unchanged", () => {
|
|
|
|
|
expect(normalizeAgentMentionToken("Baba¬arealentity;")).toBe("Baba¬arealentity;");
|
|
|
|
|
});
|
|
|
|
|
|
2026-03-20 16:38:55 +00:00
|
|
|
it("returns plain names unchanged", () => {
|
|
|
|
|
expect(normalizeAgentMentionToken("Baba")).toBe("Baba");
|
|
|
|
|
});
|
|
|
|
|
|
2026-03-24 10:03:15 +02:00
|
|
|
it("trims after decoding entities", () => {
|
2026-03-20 16:38:55 +00:00
|
|
|
expect(normalizeAgentMentionToken("Baba  ")).toBe("Baba");
|
|
|
|
|
});
|
|
|
|
|
});
|