Files
sass-mohfarawati/tests/unit/media-validation.test.ts
T
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

65 lines
2.2 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { mediaFieldInputSchema } from "@/lib/media-validation";
const base = { assetId: "", url: "", label: "", kind: "IMAGE" as const };
describe("mediaFieldInputSchema", () => {
it("accepts a valid library selection", () => {
const parsed = mediaFieldInputSchema.parse({ ...base, mode: "library", assetId: "asset_1" });
expect(parsed.mode).toBe("library");
expect(parsed.assetId).toBe("asset_1");
});
it("requires an assetId in library mode", () => {
expect(() => mediaFieldInputSchema.parse({ ...base, mode: "library" })).toThrow(/media asset/i);
});
it("accepts a valid external url", () => {
const parsed = mediaFieldInputSchema.parse({ ...base, mode: "external", url: "https://cdn/x.png" });
expect(parsed.url).toBe("https://cdn/x.png");
});
it("accepts a root-relative external url", () => {
const parsed = mediaFieldInputSchema.parse({ ...base, mode: "external", url: "/uploads/media/x.png" });
expect(parsed.url).toBe("/uploads/media/x.png");
});
it("requires a url in external mode", () => {
expect(() => mediaFieldInputSchema.parse({ ...base, mode: "external" })).toThrow(/URL/i);
});
it("rejects malformed urls", () => {
expect(() =>
mediaFieldInputSchema.parse({ ...base, mode: "external", url: "not-a-url" }),
).toThrow(/absolute URL or start with/i);
});
it("accepts upload mode without asset or url", () => {
const parsed = mediaFieldInputSchema.parse({ ...base, mode: "upload" });
expect(parsed.mode).toBe("upload");
});
it("rejects an unknown mode", () => {
expect(() => mediaFieldInputSchema.parse({ ...base, mode: "sideload" })).toThrow();
});
it("rejects an invalid media kind", () => {
expect(() =>
mediaFieldInputSchema.parse({ ...base, mode: "upload", kind: "VIDEO" }),
).toThrow();
});
it("trims text fields and defaults optionals to empty strings", () => {
const parsed = mediaFieldInputSchema.parse({
mode: "library",
assetId: " asset_9 ",
label: " Logo ",
kind: "IMAGE",
});
expect(parsed.assetId).toBe("asset_9");
expect(parsed.label).toBe("Logo");
expect(parsed.url).toBe("");
});
});