Files
Moh e2e06be86e test: add comprehensive automated test coverage
- Vitest multi-project setup (unit / integration / component)
- Real-Postgres integration harness via in-process PGlite (TEST_DATABASE_URL
  override), migrations applied per worker; production code untouched
- Unit: routing, locale, validation/Zod schemas, metadata, mail, site-theme,
  marquee, media, portfolio helpers, plus architecture-rule tests
- Integration: Prisma data layer, API routes, and all server actions
- Component: UI primitives and form components (jsdom + Testing Library)
- 371 tests passing
2026-08-06 02:27:20 +02:00

61 lines
2.4 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { buildSiteIconResponse, buildSiteIconUrls } from "@/lib/site-icons";
describe("buildSiteIconUrls", () => {
it("uses the default version when none is provided", () => {
const urls = buildSiteIconUrls({ siteName: "Studio" });
expect(urls.version).toBe("default");
expect(urls.faviconHref).toBe("/favicon.ico?v=default");
expect(urls.appleIconHref).toBe("/apple-icon.png?v=default");
expect(urls.manifestHref).toBe("/manifest.webmanifest?v=default");
expect(urls.faviconAssetUrl).toBeNull();
});
it("applies a provided favicon version to internal icon hrefs", () => {
const urls = buildSiteIconUrls({ siteName: "Studio", faviconVersion: "v1" });
expect(urls.faviconHref).toBe("/favicon.ico?v=v1");
expect(urls.appleIconHref).toBe("/apple-icon.png?v=v1");
});
it("versions a relative favicon asset url", () => {
const urls = buildSiteIconUrls({
siteName: "Studio",
faviconVersion: "v2",
faviconUrl: "/uploads/media/site-settings/favicon.svg",
});
expect(urls.faviconAssetUrl).toBe("/uploads/media/site-settings/favicon.svg?v=v2");
});
it("versions an absolute favicon asset url", () => {
const urls = buildSiteIconUrls({
siteName: "Studio",
faviconVersion: "v3",
faviconUrl: "https://cdn.example.com/favicon.png",
});
expect(urls.faviconAssetUrl).toBe("https://cdn.example.com/favicon.png?v=v3");
});
it("falls back to a default site name when empty", () => {
expect(buildSiteIconUrls({ siteName: " " }).siteName).toBe("Moh");
});
});
describe("buildSiteIconResponse", () => {
it("returns a transparent png for a null icon url", async () => {
const response = await buildSiteIconResponse(null);
expect(response.status).toBe(200);
expect(response.headers.get("Content-Type")).toBe("image/png");
expect(response.headers.get("Cache-Control")).toBe("no-store, max-age=0");
const bytes = new Uint8Array(await response.arrayBuffer());
// PNG magic number
expect(Array.from(bytes.slice(0, 4))).toEqual([0x89, 0x50, 0x4e, 0x47]);
});
it("returns the transparent fallback for unmanaged paths", async () => {
const response = await buildSiteIconResponse("https://example.com/external.png");
expect(response.status).toBe(200);
expect(response.headers.get("Content-Type")).toBe("image/png");
});
});