// @vitest-environment node import { describe, expect, it } from 'vitest' import { createCardSchema, updateCardSchema } from './card-schemas' describe('createCardSchema', () => { it('accepte une entrée valide et normalise les champs', () => { const result = createCardSchema.parse({ question: ' Question ? ', response: 'Réponse', theme: ' javascript ', tags: ['scope'], }) expect(result.question).toBe('Question ?') expect(result.theme).toBe('javascript') }) it('accepte une entrée sans tags', () => { expect( createCardSchema.parse({ question: 'Q', response: 'R', theme: 'git' }).tags, ).toBeUndefined() }) it('rejette une question vide', () => { expect(() => createCardSchema.parse({ question: ' ', response: 'R', theme: 'git' })).toThrow() }) it('rejette un thème manquant', () => { expect(() => createCardSchema.parse({ question: 'Q', response: 'R' })).toThrow() }) it('normalise les tags (trim + minuscules) et supprime les doublons', () => { const result = createCardSchema.parse({ question: 'Q', response: 'R', theme: 'git', tags: [' Git ', 'git', 'HOOK', 'hook'], }) expect(result.tags).toEqual(['git', 'hook']) }) it('rejette plus de 3 tags', () => { expect(() => createCardSchema.parse({ question: 'Q', response: 'R', theme: 'git', tags: ['a', 'b', 'c', 'd'], }), ).toThrow() }) it('rejette un tag vide ou trop long', () => { expect(() => createCardSchema.parse({ question: 'Q', response: 'R', theme: 'git', tags: [' '] }), ).toThrow() expect(() => createCardSchema.parse({ question: 'Q', response: 'R', theme: 'git', tags: ['x'.repeat(31)], }), ).toThrow() }) }) describe('updateCardSchema', () => { it('accepte une mise à jour partielle', () => { const result = updateCardSchema.parse({ response: 'Nouvelle réponse' }) expect(result).toEqual({ response: 'Nouvelle réponse' }) }) it('rejette un champ vide lors d une mise à jour', () => { expect(() => updateCardSchema.parse({ theme: '' })).toThrow() }) })