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