import { describe, expect, it } from 'vitest' import { createPerformancePayloadSchema, createStagePayloadSchema, performanceSchema, } from '@/schemas/timetable' describe('createPerformancePayloadSchema', () => { it('accepts a complete payload', () => { const result = createPerformancePayloadSchema.safeParse({ engagement_id: 'e1', event_id: 'ev1', stage_id: 's1', start_at: '2026-07-10 18:00:00', end_at: '2026-07-10 19:00:00', lane: 0, notes: null, }) expect(result.success).toBe(true) }) it('rejects missing engagement_id', () => { const result = createPerformancePayloadSchema.safeParse({ engagement_id: '', event_id: 'ev1', stage_id: null, start_at: '2026-07-10 18:00:00', end_at: '2026-07-10 19:00:00', }) expect(result.success).toBe(false) }) it('rejects end <= start', () => { const result = createPerformancePayloadSchema.safeParse({ engagement_id: 'e1', event_id: 'ev1', stage_id: null, start_at: '2026-07-10 19:00:00', end_at: '2026-07-10 18:00:00', }) expect(result.success).toBe(false) }) it('rejects lane > 9', () => { const result = createPerformancePayloadSchema.safeParse({ engagement_id: 'e1', event_id: 'ev1', stage_id: null, start_at: '2026-07-10 18:00:00', end_at: '2026-07-10 19:00:00', lane: 99, }) expect(result.success).toBe(false) }) }) describe('createStagePayloadSchema', () => { it('accepts uppercase + lowercase hex', () => { expect(createStagePayloadSchema.safeParse({ name: 'A', color: '#aabbcc' }).success).toBe(true) expect(createStagePayloadSchema.safeParse({ name: 'A', color: '#AABBCC' }).success).toBe(true) }) it('rejects shorthand hex', () => { expect(createStagePayloadSchema.safeParse({ name: 'A', color: '#abc' }).success).toBe(false) }) it('rejects empty name', () => { expect(createStagePayloadSchema.safeParse({ name: '', color: '#aabbcc' }).success).toBe(false) }) }) describe('performanceSchema', () => { it('parses a minimal performance', () => { const result = performanceSchema.safeParse({ id: 'p1', engagement_id: 'e1', event_id: 'ev1', stage_id: null, lane: 0, lane_resolved: 0, start_at: null, end_at: null, version: 0, notes: null, warnings: [], created_at: null, updated_at: null, deleted_at: null, }) expect(result.success).toBe(true) }) it('rejects unknown warning value', () => { const result = performanceSchema.safeParse({ id: 'p1', engagement_id: 'e1', event_id: 'ev1', stage_id: null, lane: 0, lane_resolved: 0, start_at: null, end_at: null, version: 0, notes: null, warnings: ['nonsense'], created_at: null, updated_at: null, deleted_at: null, }) expect(result.success).toBe(false) }) })