import { createFakeFetch } from "../../../utils/fetch-utils"; import { HttpResponse } from "@/utils/net/http-response"; import { CURSEFORGE_ETERNAL_API_URL, CurseForgeEternalApiClient } from "@/platforms/curseforge/curseforge-eternal-api-client"; const DB = Object.freeze([ { id: 2, slug: "mod-id-2" }, { id: 1, slug: "mod-id" }, ]); const ETERNAL_FETCH = createFakeFetch({ baseUrl: CURSEFORGE_ETERNAL_API_URL, requiredHeaders: ["X-Api-Key"], GET: { "^\\/mods\\/search\\?(?:gameId=432&)?slug=([^&]*)": ([slug]) => { const mods = DB.filter(x => x.slug.includes(slug)); return { data: mods }; }, "^\\/mods\\/(\\d+)": ([id]) => { const mod = DB.find(x => x.id === +id); return mod ? { data: mod } : HttpResponse.json({ success: false }, { status: 404 }); }, }, }); describe("CurseForgeEternalApiClient", () => { describe("getProject", () => { test("returns a project with the specified slug", async () => { const api = new CurseForgeEternalApiClient({ fetch: ETERNAL_FETCH }); expect(await api.getProject("mod-id")).toHaveProperty("slug", "mod-id"); expect(await api.getProject("mod-id-2")).toHaveProperty("slug", "mod-id-2"); }); test("returns a project with the specified id", async () => { const api = new CurseForgeEternalApiClient({ fetch: ETERNAL_FETCH }); expect(await api.getProject(1)).toHaveProperty("id", 1); expect(await api.getProject("1")).toHaveProperty("id", 1); expect(await api.getProject(2)).toHaveProperty("id", 2); expect(await api.getProject("2")).toHaveProperty("id", 2); }); test("returns undefined if project with the given slug doesn't exist", async () => { const api = new CurseForgeEternalApiClient({ fetch: ETERNAL_FETCH }); expect(await api.getProject("mod-id-3")).toBeUndefined(); expect(await api.getProject("mod-id-4")).toBeUndefined(); }); test("returns undefined if project with the given id doesn't exist", async () => { const api = new CurseForgeEternalApiClient({ fetch: ETERNAL_FETCH }); expect(await api.getProject(3)).toBeUndefined(); expect(await api.getProject("3")).toBeUndefined(); }); }); });