57 lines
1.8 KiB
TypeScript
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);
|
|
});
|
|
});
|