Shared validation source for the DefectForm and /api/defects route (Task 5): trimmed non-empty sectionId/verbatim and a uuid projectId.
30 lines
955 B
TypeScript
30 lines
955 B
TypeScript
import { describe, expect, it } from 'vitest'
|
|
import { type } from 'arktype'
|
|
import { defectInput } from '../shared/schemas/defect'
|
|
|
|
const valid = {
|
|
sectionId: 'a4-flow',
|
|
projectId: '123e4567-e89b-12d3-a456-426614174000',
|
|
verbatim: 'The thing broke',
|
|
}
|
|
|
|
describe('defectInput schema', () => {
|
|
it('accepts a valid defect and trims verbatim', () => {
|
|
const out = defectInput({ ...valid, verbatim: ' hi ' })
|
|
expect(out instanceof type.errors).toBe(false)
|
|
expect((out as typeof valid).verbatim).toBe('hi')
|
|
})
|
|
|
|
it('rejects empty verbatim', () => {
|
|
expect(defectInput({ ...valid, verbatim: '' }) instanceof type.errors).toBe(true)
|
|
})
|
|
|
|
it('rejects whitespace-only verbatim', () => {
|
|
expect(defectInput({ ...valid, verbatim: ' ' }) instanceof type.errors).toBe(true)
|
|
})
|
|
|
|
it('rejects a non-uuid projectId', () => {
|
|
expect(defectInput({ ...valid, projectId: 'not-a-uuid' }) instanceof type.errors).toBe(true)
|
|
})
|
|
})
|