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); }); });