aboutsummaryrefslogtreecommitdiff
path: root/src/lib/shared/group-by-category.test.ts
blob: d9bb3798efb42fa73eb03fe5add6834b685a743d (plain) (blame)
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([]);
	});
});