feat(tags): gestion des tags dans le formulaire carte (max 3, suggestions, normalisation)
- schéma zod : tags normalisés (trim + minuscules + dédupe), 3 max par carte - couche générique : findTags (MySQL + Mongo), service tags() - API GET /api/tags + cardsApi.tags() pour les suggestions - formulaire : saisie + ajout (Entrée/bouton), suggestions des tags existants, chips supprimables, compteur n/3, blocage au-delà de 3 - tests : schémas, repositories, service, route, api-client, formulaire
This commit is contained in:
1 parent
31283ada26
commit
67569e2d16
18 files changed
+334
-8
No files matched your search
@@ -27,6 +27,41 @@ describe('createCardSchema', () => {
|
||||
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', () => {
|
||||
|
||||
Reference in new issue
Block a user