import { describe, expect, it } from "vitest"; import { buildSeoChecklist, summarizeSeoChecklist } from "@/lib/seo-report"; import { buildDefaultSeoSettings } from "@/lib/seo-settings"; import { buildDefaultSiteSettings, getDefaultSiteSettingsMediaBindings } from "@/lib/site-settings"; function run(overrides: Partial[0]> = {}) { return buildSeoChecklist({ seo: buildDefaultSeoSettings(), settings: buildDefaultSiteSettings(), bindings: getDefaultSiteSettingsMediaBindings(), maintenanceEnabled: false, publishedProjectCount: 2, sitemapEntryCount: 12, siteUrl: "https://mohfarawati.de", ...overrides, }); } describe("buildSeoChecklist", () => { it("flags maintenance mode as an indexing error", () => { const check = run({ maintenanceEnabled: true }).find((entry) => entry.id === "indexing"); expect(check?.status).toBe("error"); expect(check?.detail).toMatch(/Wartungsmodus/); }); it("flags disabled indexing and passes when enabled", () => { const seo = { ...buildDefaultSeoSettings(), allowIndexing: false }; expect(run({ seo }).find((entry) => entry.id === "indexing")?.status).toBe("error"); expect(run().find((entry) => entry.id === "indexing")?.status).toBe("ok"); }); it("warns about localhost as public url", () => { expect(run({ siteUrl: "http://localhost:3014" }).find((entry) => entry.id === "site-url")?.status).toBe("warn"); }); it("grades description length per locale", () => { const settings = buildDefaultSiteSettings(); settings.locales.de.siteDescription = ""; settings.locales.en.siteDescription = "x".repeat(80); const checks = run({ settings }); expect(checks.find((entry) => entry.id === "description-de")?.status).toBe("error"); expect(checks.find((entry) => entry.id === "description-en")?.status).toBe("ok"); expect(checks.find((entry) => entry.id === "description-ar")?.status).toBe("warn"); }); it("summarizes counts", () => { const summary = summarizeSeoChecklist(run()); expect(summary.ok + summary.warn + summary.error).toBe(run().length); }); });