import { describe, it, expect, afterEach } from "vitest"; import { getSiteUrl, getBaseUrl } from "./url"; import { siteConfig } from "./site-config"; const original = process.env.NEXT_PUBLIC_SITE_URL; afterEach(() => { if (original === undefined) delete process.env.NEXT_PUBLIC_SITE_URL; else process.env.NEXT_PUBLIC_SITE_URL = original; }); describe("getSiteUrl", () => { it("nutzt NEXT_PUBLIC_SITE_URL, wenn gesetzt", () => { process.env.NEXT_PUBLIC_SITE_URL = "https://shop.beispiel.de"; expect(getSiteUrl()).toBe("https://shop.beispiel.de"); }); it("entfernt abschliessende Schraegstriche, damit keine doppelten entstehen", () => { process.env.NEXT_PUBLIC_SITE_URL = "https://shop.beispiel.de//"; // Zusammengesetzt ergaebe das sonst "https://shop.beispiel.de//shop" — // fuer Google eine andere URL als die kanonische Variante. expect(`${getSiteUrl()}/shop`).toBe("https://shop.beispiel.de/shop"); }); it("faellt auf die konfigurierte Domain zurueck statt auf localhost", () => { delete process.env.NEXT_PUBLIC_SITE_URL; // Eine vergessene Umgebungsvariable darf nicht dazu fuehren, dass // "http://localhost:3000" in einer oeffentlichen Sitemap landet. expect(getSiteUrl()).toBe(`https://${siteConfig.domain}`); }); it("ignoriert einen Wert, der nur aus Leerzeichen besteht", () => { process.env.NEXT_PUBLIC_SITE_URL = " "; expect(getSiteUrl()).toBe(`https://${siteConfig.domain}`); }); it("liefert unter getBaseUrl denselben Wert — E-Mails und SEO duerfen nicht auseinanderlaufen", () => { process.env.NEXT_PUBLIC_SITE_URL = "https://shop.beispiel.de"; expect(getBaseUrl()).toBe(getSiteUrl()); }); });