import { afterEach, describe, expect, it, vi } from "vitest"; import { GET } from "@/app/api/game/[id]/route"; afterEach(() => { vi.unstubAllGlobals(); vi.restoreAllMocks(); }); function contextWith(id: string) { return { params: Promise.resolve({ id }) }; } function requestWith(url: string) { return new Request(url); } describe("GET /api/game/[id]", () => { it("returns 400 for non-numeric ids", async () => { const response = await GET( requestWith("https://fristy.dev/api/game/abc"), contextWith("abc"), ); expect(response.status).toBe(400); expect(response.headers.get("Access-Control-Allow-Origin")).toBe("https://fristy.dev"); }); it("returns 404 when no profile resolves", async () => { vi.stubGlobal( "fetch", vi.fn(async () => ({ ok: false, status: 404 })), ); const response = await GET( requestWith("https://fristy.dev/api/game/123"), contextWith("123"), ); expect(response.status).toBe(404); }); it("returns 502 when upstream networking fails", async () => { vi.stubGlobal( "fetch", vi.fn(async () => { throw new Error("down"); }), ); const response = await GET( requestWith("https://fristy.dev/api/game/123"), contextWith("123"), ); expect(response.status).toBe(502); expect(response.headers.get("Access-Control-Allow-Origin")).toBe("https://fristy.dev"); }); });