import { pruneStaleFoodChoices } from '../service'; import { LunchChoices, RestaurantDayMenuMap } from '../../../types/gen/types.gen'; // Pomocná fabrika menu s daným počtem jídel pro TECHTOWER. const menusWithTechTowerFoods = (count: number): RestaurantDayMenuMap => ({ TECHTOWER: { lastUpdate: 0, closed: false, food: Array.from({ length: count }, (_, i) => ({ name: `Jídlo ${i}` })), }, } as unknown as RestaurantDayMenuMap); describe('pruneStaleFoodChoices', () => { test('odebere index jídla, který v aktuálním menu již neexistuje', () => { const choices: LunchChoices = { TECHTOWER: { alice: { selectedFoods: [0, 9] } }, }; const mutated = pruneStaleFoodChoices(choices, menusWithTechTowerFoods(5)); expect(mutated).toBe(true); expect(choices.TECHTOWER!.alice.selectedFoods).toEqual([0]); }); test('nechá platné indexy beze změny a vrátí false', () => { const choices: LunchChoices = { TECHTOWER: { alice: { selectedFoods: [0, 4] } }, }; const mutated = pruneStaleFoodChoices(choices, menusWithTechTowerFoods(5)); expect(mutated).toBe(false); expect(choices.TECHTOWER!.alice.selectedFoods).toEqual([0, 4]); }); test('u prázdného menu (zavřeno / neúspěšné načtení) volby nemaže', () => { const choices: LunchChoices = { TECHTOWER: { alice: { selectedFoods: [3] } }, }; const mutated = pruneStaleFoodChoices(choices, menusWithTechTowerFoods(0)); expect(mutated).toBe(false); expect(choices.TECHTOWER!.alice.selectedFoods).toEqual([3]); }); test('očistí volby více uživatelů najednou', () => { const choices: LunchChoices = { TECHTOWER: { alice: { selectedFoods: [7] }, bob: { selectedFoods: [1, 2] }, }, }; const mutated = pruneStaleFoodChoices(choices, menusWithTechTowerFoods(5)); expect(mutated).toBe(true); expect(choices.TECHTOWER!.alice.selectedFoods).toEqual([]); expect(choices.TECHTOWER!.bob.selectedFoods).toEqual([1, 2]); }); });