Co-authored-by: 王春跃 <80630709+openperf@users.noreply.github.com> Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>
65 lines
2.1 KiB
TypeScript
65 lines
2.1 KiB
TypeScript
import { describe, it, expect } from "vitest";
|
||
import { parseFeishuMessageEvent } from "./bot.js";
|
||
|
||
// Helper to build a minimal FeishuMessageEvent for testing
|
||
function makeEvent(
|
||
chatType: "p2p" | "group",
|
||
mentions?: Array<{ key: string; name: string; id: { open_id?: string } }>,
|
||
) {
|
||
return {
|
||
sender: {
|
||
sender_id: { user_id: "u1", open_id: "ou_sender" },
|
||
},
|
||
message: {
|
||
message_id: "msg_1",
|
||
chat_id: "oc_chat1",
|
||
chat_type: chatType,
|
||
message_type: "text",
|
||
content: JSON.stringify({ text: "hello" }),
|
||
mentions,
|
||
},
|
||
};
|
||
}
|
||
|
||
describe("parseFeishuMessageEvent – mentionedBot", () => {
|
||
const BOT_OPEN_ID = "ou_bot_123";
|
||
|
||
it("returns mentionedBot=false when there are no mentions", () => {
|
||
const event = makeEvent("group", []);
|
||
const ctx = parseFeishuMessageEvent(event as any, BOT_OPEN_ID);
|
||
expect(ctx.mentionedBot).toBe(false);
|
||
});
|
||
|
||
it("returns mentionedBot=true when bot is mentioned", () => {
|
||
const event = makeEvent("group", [
|
||
{ key: "@_user_1", name: "Bot", id: { open_id: BOT_OPEN_ID } },
|
||
]);
|
||
const ctx = parseFeishuMessageEvent(event as any, BOT_OPEN_ID);
|
||
expect(ctx.mentionedBot).toBe(true);
|
||
});
|
||
|
||
it("returns mentionedBot=false when only other users are mentioned", () => {
|
||
const event = makeEvent("group", [
|
||
{ key: "@_user_1", name: "Alice", id: { open_id: "ou_alice" } },
|
||
]);
|
||
const ctx = parseFeishuMessageEvent(event as any, BOT_OPEN_ID);
|
||
expect(ctx.mentionedBot).toBe(false);
|
||
});
|
||
|
||
it("returns mentionedBot=false when botOpenId is undefined (unknown bot)", () => {
|
||
const event = makeEvent("group", [
|
||
{ key: "@_user_1", name: "Alice", id: { open_id: "ou_alice" } },
|
||
]);
|
||
const ctx = parseFeishuMessageEvent(event as any, undefined);
|
||
expect(ctx.mentionedBot).toBe(false);
|
||
});
|
||
|
||
it("returns mentionedBot=false when botOpenId is empty string (probe failed)", () => {
|
||
const event = makeEvent("group", [
|
||
{ key: "@_user_1", name: "Alice", id: { open_id: "ou_alice" } },
|
||
]);
|
||
const ctx = parseFeishuMessageEvent(event as any, "");
|
||
expect(ctx.mentionedBot).toBe(false);
|
||
});
|
||
});
|