import { afterEach, describe, expect, it, vi } from "vitest"; import { getDiscordAppInfo } from "@/lib/game/discord-app"; afterEach(() => { vi.unstubAllGlobals(); }); function okRpc(overrides = {}) { return { ok: true, json: async () => ({ id: "123", name: "Game", ...overrides }), } as Response; } describe("getDiscordAppInfo", () => { it("returns null for non-numeric ids without fetching", async () => { const fetchMock = vi.fn(); vi.stubGlobal("fetch", fetchMock); await expect(getDiscordAppInfo("abc")).resolves.toBeNull(); expect(fetchMock).not.toHaveBeenCalled(); }); it("maps a successful RPC response", async () => { vi.stubGlobal( "fetch", vi.fn(async () => okRpc()), ); const info = await getDiscordAppInfo("123"); expect(info?.gameUrl).toBe("https://discord.com/games/123"); }); it("returns null on HTTP error", async () => { vi.stubGlobal( "fetch", vi.fn(async () => ({ ok: false, status: 404 }) as Response), ); await expect(getDiscordAppInfo("123")).resolves.toBeNull(); }); it("throws on network failure", async () => { vi.stubGlobal( "fetch", vi.fn(async () => { throw new Error("down"); }), ); await expect(getDiscordAppInfo("123")).rejects.toThrow("discord rpc unreachable"); }); });