64 lines
2.0 KiB
TypeScript
64 lines
2.0 KiB
TypeScript
import { describe, it, expect, vi } from "vitest";
|
|
import { handleFeishuCardAction, type FeishuCardActionEvent } from "./card-action.js";
|
|
|
|
// Mock resolveFeishuAccount
|
|
vi.mock("./accounts.js", () => ({
|
|
resolveFeishuAccount: vi.fn().mockReturnValue({ accountId: "mock-account" }),
|
|
}));
|
|
|
|
// Mock bot.js to verify handleFeishuMessage call
|
|
vi.mock("./bot.js", () => ({
|
|
handleFeishuMessage: vi.fn(),
|
|
}));
|
|
|
|
import { handleFeishuMessage } from "./bot.js";
|
|
|
|
describe("Feishu Card Action Handler", () => {
|
|
const cfg = {} as any; // Minimal mock
|
|
const runtime = { log: vi.fn(), error: vi.fn() } as any;
|
|
|
|
it("handles card action with text payload", async () => {
|
|
const event: FeishuCardActionEvent = {
|
|
operator: { open_id: "u123", user_id: "uid1", union_id: "un1" },
|
|
token: "tok1",
|
|
action: { value: { text: "/ping" }, tag: "button" },
|
|
context: { open_id: "u123", user_id: "uid1", chat_id: "chat1" },
|
|
};
|
|
|
|
await handleFeishuCardAction({ cfg, event, runtime });
|
|
|
|
expect(handleFeishuMessage).toHaveBeenCalledWith(
|
|
expect.objectContaining({
|
|
event: expect.objectContaining({
|
|
message: expect.objectContaining({
|
|
content: '{"text":"/ping"}',
|
|
chat_id: "chat1",
|
|
}),
|
|
}),
|
|
}),
|
|
);
|
|
});
|
|
|
|
it("handles card action with JSON object payload", async () => {
|
|
const event: FeishuCardActionEvent = {
|
|
operator: { open_id: "u123", user_id: "uid1", union_id: "un1" },
|
|
token: "tok2",
|
|
action: { value: { key: "val" }, tag: "button" },
|
|
context: { open_id: "u123", user_id: "uid1", chat_id: "" },
|
|
};
|
|
|
|
await handleFeishuCardAction({ cfg, event, runtime });
|
|
|
|
expect(handleFeishuMessage).toHaveBeenCalledWith(
|
|
expect.objectContaining({
|
|
event: expect.objectContaining({
|
|
message: expect.objectContaining({
|
|
content: '{"text":"{\\"key\\":\\"val\\"}"}',
|
|
chat_id: "u123", // Fallback to open_id
|
|
}),
|
|
}),
|
|
}),
|
|
);
|
|
});
|
|
});
|