paperclip/server/src/__tests__/normalize-agent-mention-token.test.ts

46 lines
1.7 KiB
TypeScript
Raw Normal View History

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");
});
/**
* 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)", () => {
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&notarealentity;")).toBe("Baba&notarealentity;");
});
it("returns plain names unchanged", () => {
expect(normalizeAgentMentionToken("Baba")).toBe("Baba");
});
it("trims after decoding entities", () => {
expect(normalizeAgentMentionToken("Baba  ")).toBe("Baba");
});
});