import { beforeEach, describe, expect, it, vi } from "vitest"; const { findMany } = vi.hoisted(() => ({ findMany: vi.fn() })); vi.mock("@/lib/prisma", () => ({ prisma: { websiteSetting: { findMany } }, })); import { siteSettings } from "./site-settings"; beforeEach(() => { findMany.mockReset(); siteSettings.reload(); }); describe("siteSettings", () => { it("returns a value by key", async () => { findMany.mockResolvedValue([{ key: "hotel_name", value: "AtomHotel" }]); expect(await siteSettings.get("hotel_name")).toBe("AtomHotel"); }); it("returns the fallback when key is missing", async () => { findMany.mockResolvedValue([]); expect(await siteSettings.get("missing", "fallback")).toBe("fallback"); expect(await siteSettings.get("missing")).toBeNull(); }); it("coerces '1'/'0' string booleans", async () => { findMany.mockResolvedValue([ { key: "maintenance_enabled", value: "1" }, { key: "radio_enabled", value: "0" }, ]); expect(await siteSettings.getBool("maintenance_enabled")).toBe(true); expect(await siteSettings.getBool("radio_enabled")).toBe(false); expect(await siteSettings.getBool("missing", true)).toBe(true); }); it("fetches once and caches until reload", async () => { findMany.mockResolvedValue([{ key: "hotel_name", value: "AtomHotel" }]); await siteSettings.get("hotel_name"); await siteSettings.getBool("hotel_name"); expect(findMany).toHaveBeenCalledTimes(1); siteSettings.reload(); await siteSettings.get("hotel_name"); expect(findMany).toHaveBeenCalledTimes(2); }); });