import { describe, expect, it } from "vitest"; import { getAllSourceCodes, getDefaultFetchUrl, } from "../adapters/bestiary-index-adapter.js"; describe("getAllSourceCodes", () => { it("returns all keys from the index sources object", () => { const codes = getAllSourceCodes(); expect(codes.length).toBeGreaterThan(0); expect(Array.isArray(codes)).toBe(true); for (const code of codes) { expect(typeof code).toBe("string"); } }); }); describe("getDefaultFetchUrl", () => { it("returns the default URL when no baseUrl is provided", () => { const url = getDefaultFetchUrl("XMM"); expect(url).toBe( "https://raw.githubusercontent.com/5etools-mirror-3/5etools-src/main/data/bestiary/bestiary-xmm.json", ); }); it("constructs URL from baseUrl with trailing slash", () => { const url = getDefaultFetchUrl("PHB", "https://example.com/data/"); expect(url).toBe("https://example.com/data/bestiary-phb.json"); }); it("normalizes baseUrl without trailing slash", () => { const url = getDefaultFetchUrl("PHB", "https://example.com/data"); expect(url).toBe("https://example.com/data/bestiary-phb.json"); }); it("lowercases the source code in the filename", () => { const url = getDefaultFetchUrl("MM", "https://example.com/"); expect(url).toBe("https://example.com/bestiary-mm.json"); }); });