import { afterEach, describe, expect, it, vi } from "vitest"; import { fetchJson } from "@/lib/client-fetch"; afterEach(() => { vi.unstubAllGlobals(); }); describe("fetchJson", () => { it("returns parsed JSON on success", async () => { vi.stubGlobal( "fetch", vi.fn(async () => ({ ok: true, json: async () => ({ a: 1 }) }) as Response), ); await expect(fetchJson<{ a: number }>("https://example.com")).resolves.toEqual({ a: 1 }); }); it("returns null on HTTP error", async () => { vi.stubGlobal( "fetch", vi.fn(async () => ({ ok: false, status: 500 }) as Response), ); await expect(fetchJson("https://example.com")).resolves.toBeNull(); }); it("returns null on network failure", async () => { vi.stubGlobal( "fetch", vi.fn(async () => { throw new Error("down"); }), ); await expect(fetchJson("https://example.com")).resolves.toBeNull(); }); });