Files
clawdbot/extensions/msteams/src/inbound.test.ts
2026-01-16 02:59:43 +00:00

68 lines
2.1 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
normalizeMSTeamsConversationId,
parseMSTeamsActivityTimestamp,
stripMSTeamsMentionTags,
wasMSTeamsBotMentioned,
} from "./inbound.js";
describe("msteams inbound", () => {
describe("stripMSTeamsMentionTags", () => {
it("removes <at>...</at> tags and trims", () => {
expect(stripMSTeamsMentionTags("<at>Bot</at> hi")).toBe("hi");
expect(stripMSTeamsMentionTags("hi <at>Bot</at>")).toBe("hi");
});
it("removes <at ...> tags with attributes", () => {
expect(stripMSTeamsMentionTags('<at id="1">Bot</at> hi')).toBe("hi");
expect(stripMSTeamsMentionTags('hi <at itemid="2">Bot</at>')).toBe("hi");
});
});
describe("normalizeMSTeamsConversationId", () => {
it("strips the ;messageid suffix", () => {
expect(normalizeMSTeamsConversationId("19:abc@thread.tacv2;messageid=deadbeef")).toBe(
"19:abc@thread.tacv2",
);
});
});
describe("parseMSTeamsActivityTimestamp", () => {
it("returns undefined for empty/invalid values", () => {
expect(parseMSTeamsActivityTimestamp(undefined)).toBeUndefined();
expect(parseMSTeamsActivityTimestamp("not-a-date")).toBeUndefined();
});
it("parses string timestamps", () => {
const ts = parseMSTeamsActivityTimestamp("2024-01-01T00:00:00.000Z");
expect(ts?.toISOString()).toBe("2024-01-01T00:00:00.000Z");
});
it("passes through Date instances", () => {
const d = new Date("2024-01-01T00:00:00.000Z");
expect(parseMSTeamsActivityTimestamp(d)).toBe(d);
});
});
describe("wasMSTeamsBotMentioned", () => {
it("returns true when a mention entity matches recipient.id", () => {
expect(
wasMSTeamsBotMentioned({
recipient: { id: "bot" },
entities: [{ type: "mention", mentioned: { id: "bot" } }],
}),
).toBe(true);
});
it("returns false when there is no matching mention", () => {
expect(
wasMSTeamsBotMentioned({
recipient: { id: "bot" },
entities: [{ type: "mention", mentioned: { id: "other" } }],
}),
).toBe(false);
});
});
});