148 lines
4.4 KiB
JavaScript
148 lines
4.4 KiB
JavaScript
|
|
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})
|
||
|
|
})
|
||
|
|
})
|