Initial commit

This commit is contained in:
fraqtal
2026-07-12 08:15:46 +00:00
commit ee0fec0691
1397 changed files with 127242 additions and 0 deletions

View File

@@ -0,0 +1,85 @@
import { describe, expect, it } from "vitest";
import { articleSchema, articleStatusSchema, type Article } from "./article";
describe("articleSchema", () => {
it("accepts a minimal valid article with default status", () => {
const result = articleSchema.parse({
id: "abc",
title: "Hello",
slug: "hello",
content: { type: "doc", children: [] },
authorId: "u1",
createdAt: new Date(),
updatedAt: new Date(),
});
expect(result.status).toBe("draft");
});
it("accepts unknown rich-text content", () => {
const result = articleSchema.parse({
id: "abc",
title: "Hello",
slug: "hello",
content: "any string is also fine",
authorId: "u1",
createdAt: new Date(),
updatedAt: new Date(),
});
expect(result.content).toBe("any string is also fine");
});
it("rejects empty title", () => {
expect(() =>
articleSchema.parse({
id: "a",
title: "",
slug: "s",
content: null,
authorId: "u",
createdAt: new Date(),
updatedAt: new Date(),
}),
).toThrow();
});
it("rejects title over 255 chars", () => {
expect(() =>
articleSchema.parse({
id: "a",
title: "x".repeat(256),
slug: "s",
content: null,
authorId: "u",
createdAt: new Date(),
updatedAt: new Date(),
}),
).toThrow();
});
});
describe("articleStatusSchema", () => {
it("accepts 'draft' and 'published'", () => {
expect(articleStatusSchema.parse("draft")).toBe("draft");
expect(articleStatusSchema.parse("published")).toBe("published");
});
it("rejects unknown status", () => {
expect(() => articleStatusSchema.parse("archived")).toThrow();
});
});
describe("Article type", () => {
it("widens content to unknown", () => {
const _example: Article = {
id: "x",
title: "t",
slug: "s",
content: { whatever: true },
status: "draft",
authorId: "u",
createdAt: new Date(),
updatedAt: new Date(),
};
expect(_example).toBeDefined();
});
});