openclaw/extensions/telegram/src/api-fetch.test.ts

58 lines
1.5 KiB
TypeScript

import { describe, expect, it, vi } from "vitest";
import { fetchTelegramChatId } from "./api-fetch.js";
describe("fetchTelegramChatId", () => {
const cases = [
{
name: "returns stringified id when Telegram getChat succeeds",
fetchImpl: vi.fn(async () => ({
ok: true,
json: async () => ({ ok: true, result: { id: 12345 } }),
})),
expected: "12345",
},
{
name: "returns null when response is not ok",
fetchImpl: vi.fn(async () => ({
ok: false,
json: async () => ({}),
})),
expected: null,
},
{
name: "returns null on transport failures",
fetchImpl: vi.fn(async () => {
throw new Error("network failed");
}),
expected: null,
},
] as const;
for (const testCase of cases) {
it(testCase.name, async () => {
vi.stubGlobal("fetch", testCase.fetchImpl);
const id = await fetchTelegramChatId({
token: "abc",
chatId: "@user",
});
expect(id).toBe(testCase.expected);
});
}
it("calls Telegram getChat endpoint", async () => {
const fetchMock = vi.fn(async () => ({
ok: true,
json: async () => ({ ok: true, result: { id: 12345 } }),
}));
vi.stubGlobal("fetch", fetchMock);
await fetchTelegramChatId({ token: "abc", chatId: "@user" });
expect(fetchMock).toHaveBeenCalledWith(
"https://api.telegram.org/botabc/getChat?chat_id=%40user",
undefined,
);
});
});