93 lines
2.2 KiB
TypeScript
93 lines
2.2 KiB
TypeScript
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",
|
|
},
|
|
})
|
|
})
|
|
})
|