93 lines
3.0 KiB
TypeScript
93 lines
3.0 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
|
|
import {
|
|
buildDefaultSiteSettings,
|
|
parseSiteSettingsValue,
|
|
} from "../lib/site-settings";
|
|
|
|
describe("site settings helpers", () => {
|
|
it("builds defaults from the fallback site name", () => {
|
|
const settings = buildDefaultSiteSettings("Studio Moh");
|
|
|
|
expect(settings.defaultLocale).toBe("de");
|
|
expect(settings.brand.primaryColor).toBe("#dc5a35");
|
|
expect(settings.locales.ar.siteName).toBe("Studio Moh");
|
|
expect(settings.locales.ar.titleTemplate).toBe("{pageTitle} | {siteName}");
|
|
expect(settings.locales.en.siteDescription).toBe("Multilingual Next.js base project");
|
|
expect(settings.locales.de.subhead).toBe("");
|
|
});
|
|
|
|
it("merges stored values with safe defaults", () => {
|
|
const settings = parseSiteSettingsValue(
|
|
JSON.stringify({
|
|
defaultLocale: "ar",
|
|
brand: {
|
|
primaryColor: "#112233",
|
|
},
|
|
locales: {
|
|
en: {
|
|
siteName: "Brand EN",
|
|
titleTemplate: "{pageTitle} - {siteName}",
|
|
siteDescription: "English description",
|
|
},
|
|
de: {
|
|
siteName: "Brand DE",
|
|
titleTemplate: "{pageTitle} | {siteName} | Freelancer",
|
|
subhead: "German subhead",
|
|
},
|
|
},
|
|
}),
|
|
"Fallback Name",
|
|
);
|
|
|
|
expect(settings.defaultLocale).toBe("ar");
|
|
expect(settings.brand.primaryColor).toBe("#112233");
|
|
expect(settings.locales.en.siteName).toBe("Brand EN");
|
|
expect(settings.locales.en.titleTemplate).toBe("{pageTitle} - {siteName}");
|
|
expect(settings.locales.en.siteDescription).toBe("English description");
|
|
expect(settings.locales.en.subhead).toBe("");
|
|
expect(settings.locales.ar.siteName).toBe("Fallback Name");
|
|
expect(settings.locales.ar.titleTemplate).toBe("{pageTitle} | {siteName}");
|
|
expect(settings.locales.de.siteDescription).toBe("Multilingual Next.js base project");
|
|
expect(settings.locales.de.titleTemplate).toBe("{pageTitle} | {siteName} | Freelancer");
|
|
expect(settings.locales.de.subhead).toBe("German subhead");
|
|
});
|
|
|
|
it("falls back when stored json is invalid", () => {
|
|
const settings = parseSiteSettingsValue("{invalid-json", "Fallback Name");
|
|
|
|
expect(settings).toEqual(buildDefaultSiteSettings("Fallback Name"));
|
|
});
|
|
|
|
it("ignores legacy top-level title template values", () => {
|
|
const settings = parseSiteSettingsValue(
|
|
JSON.stringify({
|
|
titleTemplate: "{pageTitle} | moh-sass | Legacy",
|
|
locales: {
|
|
ar: {
|
|
siteName: "اسم الموقع",
|
|
},
|
|
},
|
|
}),
|
|
"Fallback Name",
|
|
);
|
|
|
|
expect(settings.locales.ar.titleTemplate).toBe("{pageTitle} | {siteName}");
|
|
});
|
|
|
|
it("falls back for invalid default locale and invalid primary color", () => {
|
|
const settings = parseSiteSettingsValue(
|
|
JSON.stringify({
|
|
defaultLocale: "fr",
|
|
brand: {
|
|
primaryColor: "red",
|
|
},
|
|
}),
|
|
"Fallback Name",
|
|
);
|
|
|
|
expect(settings.defaultLocale).toBe("de");
|
|
expect(settings.brand.primaryColor).toBe("#dc5a35");
|
|
});
|
|
});
|