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([]); }); });