import React from 'react'; import { act, render } from '@testing-library/react'; import usePickupConfig from './usePickupConfig'; describe('usePickupConfig', () => { const advanceTimers = async (ms = 0) => { await act(async () => { jest.advanceTimersByTime(ms); await Promise.resolve(); }); }; const renderHook = () => { let latest; const TestHarness = () => { latest = usePickupConfig(); return null; }; render(); return () => latest; }; beforeEach(() => { jest.useFakeTimers(); }); afterEach(() => { jest.useRealTimers(); }); test('fetchConfig loads sorted configuration', async () => { const getHook = renderHook(); await advanceTimers(600); const hook = getHook(); expect(hook.loading).toBe(false); expect(hook.config[0].label).toBe('Aldi Biblisweg'); expect(hook.config[hook.config.length - 1].label).toBe('Penny Baden-Oos'); }); test('mutators update entries as expected', async () => { const getHook = renderHook(); await advanceTimers(600); await act(async () => { getHook().toggleActive(0); getHook().toggleProfileCheck(0); getHook().toggleOnlyNotify(0); }); let updated = getHook().config[0]; expect(updated.active).toBe(true); expect(updated.checkProfileId).toBe(false); expect(updated.onlyNotify).toBe(true); await act(async () => { getHook().changeWeekday(0, 'Montag'); }); updated = getHook().config[0]; expect(updated.desiredWeekday).toBe('Montag'); expect(updated.desiredDateRange).toBeUndefined(); await act(async () => { getHook().updateDateRange(updated.id, new Date('2025-01-01'), new Date('2025-01-03')); }); updated = getHook().config[0]; expect(updated.desiredDateRange).toEqual({ start: '2025-01-01', end: '2025-01-03' }); expect(updated.desiredWeekday).toBeUndefined(); }); });