feat(settings): manage public header banner in admin
This commit is contained in:
92
packages/db/src/settings.test.ts
Normal file
92
packages/db/src/settings.test.ts
Normal file
@@ -0,0 +1,92 @@
|
||||
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",
|
||||
},
|
||||
})
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user