import { beforeEach, describe, expect, it, vi } from "vitest" const { mockDb } = vi.hoisted(() => ({ mockDb: { systemSetting: { findUnique: vi.fn(), upsert: vi.fn(), }, }, })) vi.mock("./client", () => ({ db: mockDb, })) import { getPublicHeaderBanner, getPublicHeaderBannerConfig, isAdminSelfRegistrationEnabled, setPublicHeaderBannerConfig, } from "./settings" describe("settings service", () => { const previousEnv = process.env.CMS_ADMIN_SELF_REGISTRATION_ENABLED beforeEach(() => { mockDb.systemSetting.findUnique.mockReset() mockDb.systemSetting.upsert.mockReset() process.env.CMS_ADMIN_SELF_REGISTRATION_ENABLED = previousEnv }) it("falls back to env flag when registration setting is missing", async () => { process.env.CMS_ADMIN_SELF_REGISTRATION_ENABLED = "true" mockDb.systemSetting.findUnique.mockResolvedValue(null) const enabled = await isAdminSelfRegistrationEnabled() expect(enabled).toBe(true) }) it("reads active public header banner payload", async () => { mockDb.systemSetting.findUnique.mockResolvedValue({ value: JSON.stringify({ enabled: true, message: "Commissions open", ctaLabel: "Book now", ctaHref: "/contact", }), }) const banner = await getPublicHeaderBanner() expect(banner).toEqual({ message: "Commissions open", ctaLabel: "Book now", ctaHref: "/contact", }) }) it("returns a disabled default config for invalid data", async () => { mockDb.systemSetting.findUnique.mockResolvedValue({ value: "not-json", }) const config = await getPublicHeaderBannerConfig() expect(config).toEqual({ enabled: false, message: "", ctaLabel: null, ctaHref: null, }) }) it("writes banner config to system settings", async () => { mockDb.systemSetting.upsert.mockResolvedValue({}) await setPublicHeaderBannerConfig({ enabled: true, message: "Holiday schedule", ctaLabel: "Details", ctaHref: "/news", }) expect(mockDb.systemSetting.upsert).toHaveBeenCalledTimes(1) expect(mockDb.systemSetting.upsert.mock.calls[0]?.[0]).toMatchObject({ where: { key: "public.header_banner", }, }) }) })