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}) }) })