test: tests unitaires Vitest — format, version-utils, rate-limit

- Installe vitest@4 + @vitest/coverage-v8 (40 tests, 0 échec)
- lib/__tests__/format.test.js        : 14 tests (formatKonstitisyon, formatDate, hasRestrictedChar)
- lib/__tests__/version-utils.test.js : 17 tests (filterVersions par texte/auteur/date, getFilterStats)
- lib/__tests__/rate-limit.test.js    : 9 tests avec fake timers (limite, reset, retryAfter, keys indépendantes)
- vitest.config.mjs : environnement node, imports explicites (pas de globals)
- package.json : scripts test / test:watch / test:coverage + override XO pour les fichiers de test

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-14 06:30:10 +04:00
parent 170c3c5e90
commit 7b831d5bc4
7 changed files with 12342 additions and 3 deletions
+147
View File
@@ -0,0 +1,147 @@
import {describe, it, expect} from 'vitest'
import {filterVersions, getFilterStats} from '../version-utils.js'
// Usine à versions pour les tests
const makeVersion = (id, overrides = {}) => ({
id,
name: `Version ${id}`,
date_created: '2024-03-15T10:00:00Z',
user_created: `user-${id}-suffix`,
delta: {contenu: `Contenu de la version ${id}`},
...overrides,
})
describe('filterVersions', () => {
it('renvoie un tableau vide si versions est vide', () => {
expect(filterVersions([], '', {})).toEqual([])
})
it('renvoie un tableau vide si versions est null', () => {
expect(filterVersions(null, '', {})).toEqual([])
})
it('renvoie toutes les versions sans filtre ni recherche', () => {
const versions = [makeVersion(1), makeVersion(2)]
expect(filterVersions(versions, '', {})).toHaveLength(2)
})
describe('recherche textuelle (searchTerm)', () => {
it('filtre par contenu', () => {
const versions = [
makeVersion(1, {delta: {contenu: 'liberté égalité fraternité'}}),
makeVersion(2, {delta: {contenu: 'droits fondamentaux'}}),
]
const result = filterVersions(versions, 'liberté', {})
expect(result).toHaveLength(1)
expect(result[0].id).toBe(1)
})
it('filtre par nom de version', () => {
const versions = [
makeVersion(1, {name: 'Proposition Dupont'}),
makeVersion(2, {name: 'Version Martin'}),
]
const result = filterVersions(versions, 'dupont', {})
expect(result).toHaveLength(1)
expect(result[0].id).toBe(1)
})
it('filtre par auteur (préfixe du user_created)', () => {
const versions = [
makeVersion(1, {user_created: 'alice-uuid'}),
makeVersion(2, {user_created: 'bob-uuid'}),
]
const result = filterVersions(versions, 'alice', {})
expect(result).toHaveLength(1)
expect(result[0].id).toBe(1)
})
it('est insensible à la casse', () => {
const versions = [makeVersion(1, {name: 'Proposition Alpha'})]
expect(filterVersions(versions, 'ALPHA', {})).toHaveLength(1)
})
it('renvoie vide si aucune correspondance', () => {
const versions = [makeVersion(1), makeVersion(2)]
expect(filterVersions(versions, 'zzz-inexistant', {})).toHaveLength(0)
})
})
describe('filtre par auteur (filters.author)', () => {
it('ne retient que les versions de l\'auteur indiqué', () => {
const versions = [
makeVersion(1, {user_created: 'alice-uuid'}),
makeVersion(2, {user_created: 'bob-uuid'}),
]
const result = filterVersions(versions, '', {author: 'alice'})
expect(result).toHaveLength(1)
expect(result[0].id).toBe(1)
})
it('renvoie vide si aucune version de cet auteur', () => {
const versions = [makeVersion(1, {user_created: 'alice-uuid'})]
expect(filterVersions(versions, '', {author: 'bob'})).toHaveLength(0)
})
})
describe('filtre par plage de dates', () => {
const versions = [
makeVersion(1, {date_created: '2024-01-10T00:00:00Z'}),
makeVersion(2, {date_created: '2024-03-15T00:00:00Z'}),
makeVersion(3, {date_created: '2024-06-20T00:00:00Z'}),
]
it('filtre les versions antérieures à dateFrom', () => {
const result = filterVersions(versions, '', {dateFrom: '2024-03-01'})
expect(result.map(v => v.id)).toEqual([2, 3])
})
it('filtre les versions postérieures à dateTo', () => {
const result = filterVersions(versions, '', {dateTo: '2024-04-01'})
expect(result.map(v => v.id)).toEqual([1, 2])
})
it('combine dateFrom et dateTo', () => {
const result = filterVersions(versions, '', {dateFrom: '2024-02-01', dateTo: '2024-05-01'})
expect(result.map(v => v.id)).toEqual([2])
})
})
})
describe('getFilterStats', () => {
it('calcule les totaux correctement', () => {
const original = [makeVersion(1), makeVersion(2), makeVersion(3)]
const filtered = [makeVersion(1)]
expect(getFilterStats(original, filtered)).toEqual({
total: 3,
filtered: 1,
hidden: 2,
})
})
it('renvoie hidden: 0 quand rien n\'est filtré', () => {
const versions = [makeVersion(1), makeVersion(2)]
expect(getFilterStats(versions, versions)).toEqual({
total: 2,
filtered: 2,
hidden: 0,
})
})
it('gère les tableaux vides', () => {
expect(getFilterStats([], [])).toEqual({total: 0, filtered: 0, hidden: 0})
})
})