Files
Epicnabbo-Catalogus-Updated…/src/lib/services/site-settings.test.ts
T

57 lines
1.8 KiB
TypeScript

import { beforeEach, describe, expect, it, vi } from "vitest";
const { selectFrom } = vi.hoisted(() => ({ selectFrom: vi.fn() }));
vi.mock("@/lib/db", () => ({
db: {
select: () => ({
from: () => Promise.resolve(selectFrom()),
}),
insert: () => ({
values: () => ({
onDuplicateKeyUpdate: () => Promise.resolve(),
}),
}),
},
WebsiteSetting: { key: "WebsiteSetting.key", value: "WebsiteSetting.value" },
}));
import { siteSettings } from "./site-settings";
beforeEach(async () => {
selectFrom.mockReset();
await siteSettings.reload();
});
describe("siteSettings", () => {
it("returns a value by key", async () => {
selectFrom.mockResolvedValue([{ key: "hotel_name", value: "AtomHotel" }]);
expect(await siteSettings.get("hotel_name")).toBe("AtomHotel");
});
it("returns the fallback when key is missing", async () => {
selectFrom.mockResolvedValue([]);
expect(await siteSettings.get("missing", "fallback")).toBe("fallback");
expect(await siteSettings.get("missing")).toBeNull();
});
it("coerces '1'/'0' string booleans", async () => {
selectFrom.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 () => {
selectFrom.mockResolvedValue([{ key: "hotel_name", value: "AtomHotel" }]);
await siteSettings.get("hotel_name");
await siteSettings.getBool("hotel_name");
expect(selectFrom).toHaveBeenCalledTimes(1);
await siteSettings.reload();
await siteSettings.get("hotel_name");
expect(selectFrom).toHaveBeenCalledTimes(2);
});
});