import { beforeEach, describe, expect, it, vi } from "vitest"; describe("telegram audit", () => { beforeEach(() => { vi.unstubAllGlobals(); }); it("collects unmentioned numeric group ids and flags wildcard", async () => { const { collectTelegramUnmentionedGroupIds } = await import("./audit.js"); const res = collectTelegramUnmentionedGroupIds({ "*": { requireMention: false }, "-1001": { requireMention: false }, "@group": { requireMention: false }, "-1002": { requireMention: true }, "-1003": { requireMention: false, enabled: false }, }); expect(res.hasWildcardUnmentionedGroups).toBe(true); expect(res.groupIds).toEqual(["-1001"]); expect(res.unresolvedGroups).toBe(1); }); it("audits membership via getChatMember", async () => { const { auditTelegramGroupMembership } = await import("./audit.js"); vi.stubGlobal( "fetch", vi.fn().mockResolvedValueOnce( new Response(JSON.stringify({ ok: true, result: { status: "member" } }), { status: 200, headers: { "Content-Type": "application/json" }, }), ), ); const res = await auditTelegramGroupMembership({ token: "t", botId: 123, groupIds: ["-1001"], timeoutMs: 5000, }); expect(res.ok).toBe(true); expect(res.groups[0]?.chatId).toBe("-1001"); expect(res.groups[0]?.status).toBe("member"); }); it("reports bot not in group when status is left", async () => { const { auditTelegramGroupMembership } = await import("./audit.js"); vi.stubGlobal( "fetch", vi.fn().mockResolvedValueOnce( new Response(JSON.stringify({ ok: true, result: { status: "left" } }), { status: 200, headers: { "Content-Type": "application/json" }, }), ), ); const res = await auditTelegramGroupMembership({ token: "t", botId: 123, groupIds: ["-1001"], timeoutMs: 5000, }); expect(res.ok).toBe(false); expect(res.groups[0]?.ok).toBe(false); expect(res.groups[0]?.status).toBe("left"); }); });