1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
import { describe, it, expect } from 'vitest';
import { groupByCategory } from './group-by-category';
type Item = { id: number; name: string; categoryName: string | null };
type Cat = { id: number; name: string };
describe('groupByCategory', () => {
const categories: Cat[] = [
{ id: 1, name: 'Laitier' },
{ id: 2, name: 'Fruits' },
{ id: 3, name: 'Boulangerie' },
];
it('groups items by category, ordered by category order', () => {
const items: Item[] = [
{ id: 1, name: 'banane', categoryName: 'Fruits' },
{ id: 2, name: 'lait', categoryName: 'Laitier' },
{ id: 3, name: 'pomme', categoryName: 'Fruits' },
];
const result = groupByCategory(items, categories);
expect(result.map(([cat]) => cat)).toEqual(['Laitier', 'Fruits']);
expect(result[0][1].map((i) => i.name)).toEqual(['lait']);
expect(result[1][1].map((i) => i.name)).toEqual(['banane', 'pomme']);
});
it('prepends a non-catégorisé group for items without a category', () => {
const items: Item[] = [
{ id: 1, name: 'miel', categoryName: null },
{ id: 2, name: 'lait', categoryName: 'Laitier' },
];
const result = groupByCategory(items, categories);
expect(result.map(([cat]) => cat)).toEqual(['Non catégorisé', 'Laitier']);
});
it('omits categories without any item', () => {
const items: Item[] = [{ id: 1, name: 'lait', categoryName: 'Laitier' }];
const result = groupByCategory(items, categories);
expect(result.map(([cat]) => cat)).toEqual(['Laitier']);
});
it('returns no groups for empty items', () => {
expect(groupByCategory([], categories)).toEqual([]);
});
});
|