Files
sass-mohfarawati/tests/metadata.test.ts
T
2026-03-07 18:48:01 +01:00

86 lines
2.7 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { buildDefaultSiteSettings } from "../lib/site-settings";
import {
applyTitleTemplateFn,
buildAppMetadataFromConfig,
buildLocalizedMetadataFromConfig,
} from "../lib/metadata";
describe("metadata helpers", () => {
it("applies the configured title template", () => {
expect(applyTitleTemplateFn("About", "{pageTitle} | {siteName}", "Studio Moh")).toBe(
"About | Studio Moh",
);
expect(applyTitleTemplateFn("About", "Studio Moh", "Studio Moh")).toBe("About | Studio Moh");
});
it("builds root metadata with dynamic icons and social preview", () => {
const settings = buildDefaultSiteSettings("Studio Moh");
const metadata = buildAppMetadataFromConfig(settings, {
favicon: {
assetId: "fav",
url: "/uploads/media/site-settings/favicon.svg",
},
defaultOgImage: {
assetId: "og",
url: "/uploads/media/site-settings/default-og.png",
},
});
expect(metadata.title).toBe("Studio Moh");
expect(metadata.icons).toEqual({
icon: ["/uploads/media/site-settings/favicon.svg"],
shortcut: ["/uploads/media/site-settings/favicon.svg"],
apple: ["/uploads/media/site-settings/favicon.svg"],
});
expect(metadata.twitter).toMatchObject({
card: "summary_large_image",
});
});
it("falls back to localized site description and omits icons when unset", () => {
const settings = buildDefaultSiteSettings("Studio Moh");
settings.locales.en.siteDescription = "English fallback description";
settings.locales.en.titleTemplate = "{pageTitle} | {siteName} | Freelancer";
const metadata = buildLocalizedMetadataFromConfig({
settings,
bindings: {
favicon: null,
defaultOgImage: null,
},
locale: "en",
pathname: "/about",
title: "About",
});
expect(metadata.title).toBe("About | Studio Moh | Freelancer");
expect(metadata.description).toBe("English fallback description");
expect(metadata.openGraph?.siteName).toBe("Studio Moh");
expect(metadata.twitter).toMatchObject({
card: "summary",
});
});
it("can skip the title template for the homepage", () => {
const settings = buildDefaultSiteSettings("Studio Moh");
settings.locales.ar.siteName = "اسم الموقع";
settings.locales.ar.titleTemplate = "{pageTitle} | {siteName}";
const metadata = buildLocalizedMetadataFromConfig({
settings,
bindings: {
favicon: null,
defaultOgImage: null,
},
locale: "ar",
pathname: "/",
title: "اسم الموقع",
description: "وصف",
applyTitleTemplate: false,
});
expect(metadata.title).toBe("اسم الموقع");
});
});