mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-08 10:31:24 +00:00
81 lines
2.4 KiB
TypeScript
81 lines
2.4 KiB
TypeScript
import { describe, expect, it, vi } from "vitest";
|
|
import type { OpenClawConfig } from "../../../config/config.js";
|
|
import { telegramOutbound } from "./telegram.js";
|
|
|
|
describe("telegramOutbound.sendPayload", () => {
|
|
it("sends text payload with buttons", async () => {
|
|
const sendTelegram = vi.fn(async () => ({ messageId: "m1", chatId: "c1" }));
|
|
|
|
const result = await telegramOutbound.sendPayload?.({
|
|
cfg: {} as OpenClawConfig,
|
|
to: "telegram:123",
|
|
text: "ignored",
|
|
payload: {
|
|
text: "Hello",
|
|
channelData: {
|
|
telegram: {
|
|
buttons: [[{ text: "Option", callback_data: "/option" }]],
|
|
},
|
|
},
|
|
},
|
|
deps: { sendTelegram },
|
|
});
|
|
|
|
expect(sendTelegram).toHaveBeenCalledTimes(1);
|
|
expect(sendTelegram).toHaveBeenCalledWith(
|
|
"telegram:123",
|
|
"Hello",
|
|
expect.objectContaining({
|
|
buttons: [[{ text: "Option", callback_data: "/option" }]],
|
|
textMode: "html",
|
|
}),
|
|
);
|
|
expect(result).toEqual({ channel: "telegram", messageId: "m1", chatId: "c1" });
|
|
});
|
|
|
|
it("sends media payloads and attaches buttons only to first", async () => {
|
|
const sendTelegram = vi
|
|
.fn()
|
|
.mockResolvedValueOnce({ messageId: "m1", chatId: "c1" })
|
|
.mockResolvedValueOnce({ messageId: "m2", chatId: "c1" });
|
|
|
|
const result = await telegramOutbound.sendPayload?.({
|
|
cfg: {} as OpenClawConfig,
|
|
to: "telegram:123",
|
|
text: "ignored",
|
|
payload: {
|
|
text: "Caption",
|
|
mediaUrls: ["https://example.com/a.png", "https://example.com/b.png"],
|
|
channelData: {
|
|
telegram: {
|
|
buttons: [[{ text: "Go", callback_data: "/go" }]],
|
|
},
|
|
},
|
|
},
|
|
deps: { sendTelegram },
|
|
});
|
|
|
|
expect(sendTelegram).toHaveBeenCalledTimes(2);
|
|
expect(sendTelegram).toHaveBeenNthCalledWith(
|
|
1,
|
|
"telegram:123",
|
|
"Caption",
|
|
expect.objectContaining({
|
|
mediaUrl: "https://example.com/a.png",
|
|
buttons: [[{ text: "Go", callback_data: "/go" }]],
|
|
}),
|
|
);
|
|
const secondOpts = sendTelegram.mock.calls[1]?.[2] as { buttons?: unknown } | undefined;
|
|
expect(sendTelegram).toHaveBeenNthCalledWith(
|
|
2,
|
|
"telegram:123",
|
|
"",
|
|
expect.objectContaining({
|
|
mediaUrl: "https://example.com/b.png",
|
|
}),
|
|
);
|
|
expect(secondOpts?.buttons).toBeUndefined();
|
|
expect(result).toEqual({ channel: "telegram", messageId: "m2", chatId: "c1" });
|
|
});
|
|
});
|