Files
Pickup-Config/src/hooks/usePickupConfig.test.js
2025-11-10 09:39:00 +01:00

73 lines
1.9 KiB
JavaScript

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(<TestHarness />);
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();
});
});