import type { ClawdbotConfig } from "openclaw/plugin-sdk"; import { beforeEach, describe, expect, it, vi } from "vitest"; import { getMessageFeishu } from "./send.js"; const { mockClientGet, mockCreateFeishuClient, mockResolveFeishuAccount } = vi.hoisted(() => ({ mockClientGet: vi.fn(), mockCreateFeishuClient: vi.fn(), mockResolveFeishuAccount: vi.fn(), })); vi.mock("./client.js", () => ({ createFeishuClient: mockCreateFeishuClient, })); vi.mock("./accounts.js", () => ({ resolveFeishuAccount: mockResolveFeishuAccount, })); describe("getMessageFeishu", () => { beforeEach(() => { vi.clearAllMocks(); mockResolveFeishuAccount.mockReturnValue({ accountId: "default", configured: true, }); mockCreateFeishuClient.mockReturnValue({ im: { message: { get: mockClientGet, }, }, }); }); it("extracts text content from interactive card elements", async () => { mockClientGet.mockResolvedValueOnce({ code: 0, data: { items: [ { message_id: "om_1", chat_id: "oc_1", msg_type: "interactive", body: { content: JSON.stringify({ elements: [ { tag: "markdown", content: "hello markdown" }, { tag: "div", text: { content: "hello div" } }, ], }), }, }, ], }, }); const result = await getMessageFeishu({ cfg: {} as ClawdbotConfig, messageId: "om_1", }); expect(result).toEqual( expect.objectContaining({ messageId: "om_1", chatId: "oc_1", contentType: "interactive", content: "hello markdown\nhello div", }), ); }); });