- Remove .prettierrc (dead config, Biome replaces Prettier) - Rename lighthouserc.json to lighthouserc.cjs with module.exports for ESM compat - Add logger.warn to empty catch blocks in auth, register, site-settings, prisma-cache, redis, security, rate-limit - Unify ActionResult type: action-helper.ts uses 'ok' consistent with safe-action-shared.ts - Add noUnusedLocals + noUnusedParameters to tsconfig + fix 25 pre-existing unused vars - Replace barrel export src/types/index.ts with direct @/types/common imports - Make trustHost conditional (development only) in auth.ts - Add pre-flight URL validation to update-Nitrov3.sh to catch image.library.url misconfigurations - Improve NITRO_IMAGE_LIBRARY_URL content validation in pre-flight & post-compute checks
101 lines
2.3 KiB
TypeScript
101 lines
2.3 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
|
|
import { createEventSchema, eventTypeSchema } from "./event";
|
|
|
|
describe("eventTypeSchema", () => {
|
|
it("accepts valid type", () => {
|
|
const result = eventTypeSchema.safeParse({
|
|
name: "Concert",
|
|
slug: "concert",
|
|
});
|
|
expect(result.success).toBe(true);
|
|
if (result.success) {
|
|
expect(result.data.color).toBe("#3b82f6");
|
|
expect(result.data.isActive).toBe(1);
|
|
}
|
|
});
|
|
|
|
it("rejects empty name", () => {
|
|
expect(eventTypeSchema.safeParse({ name: "", slug: "test" }).success).toBe(
|
|
false,
|
|
);
|
|
expect(eventTypeSchema.safeParse({ slug: "test" }).success).toBe(false);
|
|
});
|
|
|
|
it("rejects slug with uppercase", () => {
|
|
const result = eventTypeSchema.safeParse({
|
|
name: "Test",
|
|
slug: "TestEvent",
|
|
});
|
|
expect(result.success).toBe(false);
|
|
expect(result.error?.issues[0].message).toBe(
|
|
"Slug must be lowercase with hyphens",
|
|
);
|
|
});
|
|
|
|
it("rejects slug with spaces", () => {
|
|
expect(
|
|
eventTypeSchema.safeParse({
|
|
name: "Test",
|
|
slug: "test event",
|
|
}).success,
|
|
).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe("createEventSchema", () => {
|
|
it("accepts valid event", () => {
|
|
const result = createEventSchema.safeParse({
|
|
title: "My Event",
|
|
description: "Fun times",
|
|
typeId: 1,
|
|
startsAt: "2025-07-25T10:00:00Z",
|
|
});
|
|
expect(result.success).toBe(true);
|
|
});
|
|
|
|
it("rejects missing description", () => {
|
|
const result = createEventSchema.safeParse({
|
|
title: "No description event",
|
|
typeId: 1,
|
|
startsAt: "2025-07-25T10:00:00Z",
|
|
});
|
|
expect(result.success).toBe(false);
|
|
});
|
|
|
|
it("rejects missing title", () => {
|
|
expect(
|
|
createEventSchema.safeParse({
|
|
title: "",
|
|
description: "Has desc",
|
|
typeId: 1,
|
|
startsAt: "2025-07-25T10:00:00Z",
|
|
}).success,
|
|
).toBe(false);
|
|
});
|
|
|
|
it("defaults status to draft", () => {
|
|
const result = createEventSchema.safeParse({
|
|
title: "Draft Event",
|
|
description: "Not published yet",
|
|
typeId: 1,
|
|
startsAt: "2025-07-25T10:00:00Z",
|
|
});
|
|
if (result.success) {
|
|
expect(result.data.status).toBe("draft");
|
|
}
|
|
});
|
|
|
|
it("defaults isRecurring to 0", () => {
|
|
const result = createEventSchema.safeParse({
|
|
title: "Single Event",
|
|
description: "One time",
|
|
typeId: 1,
|
|
startsAt: "2025-07-25T10:00:00Z",
|
|
});
|
|
if (result.success) {
|
|
expect(result.data.isRecurring).toBe(0);
|
|
}
|
|
});
|
|
});
|