This commit is contained in:
nessar committed 2026-10-07 00:28:29 +02:00
1 parent 03841c6e3d
commit 036a8c0e1e
32 files changed
+1805 -89

No files matched your search

+106
View File
@@ -31,6 +31,112 @@ describe('UserInputService', () => {
expect(service).toBeTruthy();
});
it('adds, removes and replaces saved declarations without changing balances or calculating', () => {
const balances = service.vacationNumberSignal();
expect(service.declaredDaysSignal()).toEqual([]);
service.toggleDeclaredDay('2024-01-02', 'cp');
expect(new UserInputService().declaredDaysSignal()).toEqual([
{ date: '2024-01-02', type: 'cp' },
]);
service.toggleDeclaredDay('2024-01-02', 'cp');
expect(new UserInputService().declaredDaysSignal()).toEqual([]);
service.toggleDeclaredDay('2024-01-02', 'rtt');
service.toggleDeclaredDay('2024-01-02', 'other');
expect(new UserInputService().declaredDaysSignal()).toEqual([
{ date: '2024-01-02', type: 'other' },
]);
expect(service.vacationNumberSignal()).toBe(balances);
expect(service.computeTriggerSignal()).toBe(0);
expect(localStorage.getItem('leaveBalances')).toBeNull();
});
it('rejects weekends, French national holidays and malformed calendar dates', () => {
for (const date of [
'2024-01-06',
'2024-01-07',
'2024-05-08',
'2024-05-09',
'2024-02-30',
'not-a-date',
]) {
service.toggleDeclaredDay(date, 'cp');
}
expect(service.declaredDaysSignal()).toEqual([]);
expect(localStorage.getItem('declaredNonWorkingDays')).toBeNull();
service.toggleDeclaredDay('2024-05-10', 'other');
expect(new UserInputService().declaredDaysSignal()).toEqual([
{ date: '2024-05-10', type: 'other' },
]);
});
it('toggles each date in a batch once and preserves unrelated declarations', () => {
service.toggleDeclaredDay('2024-04-19', 'other');
service.toggleDeclaredDay('2024-04-25', 'rtt');
const balances = service.vacationNumberSignal();
const save = vi.spyOn(Storage.prototype, 'setItem');
service.toggleDeclaredDays(
['2024-04-22', '2024-04-23', '2024-04-24', '2024-04-25', '2024-04-26'],
'cp',
);
expect(new UserInputService().declaredDaysSignal()).toEqual([
{ date: '2024-04-19', type: 'other' },
{ date: '2024-04-22', type: 'cp' },
{ date: '2024-04-23', type: 'cp' },
{ date: '2024-04-24', type: 'cp' },
{ date: '2024-04-25', type: 'cp' },
{ date: '2024-04-26', type: 'cp' },
]);
expect(save).toHaveBeenCalledOnce();
service.toggleDeclaredDays(
[
'2024-04-25',
'2024-04-26',
'2024-04-27',
'2024-04-28',
'2024-04-29',
'2024-04-30',
'2024-05-01',
'2024-04-29',
'invalid',
],
'cp',
);
expect(new UserInputService().declaredDaysSignal()).toEqual([
{ date: '2024-04-19', type: 'other' },
{ date: '2024-04-22', type: 'cp' },
{ date: '2024-04-23', type: 'cp' },
{ date: '2024-04-24', type: 'cp' },
{ date: '2024-04-29', type: 'cp' },
{ date: '2024-04-30', type: 'cp' },
]);
expect(save).toHaveBeenCalledTimes(2);
service.toggleDeclaredDays(['2024-04-29', '2024-04-30'], null);
expect(new UserInputService().declaredDaysSignal()).toEqual([
{ date: '2024-04-19', type: 'other' },
{ date: '2024-04-22', type: 'cp' },
{ date: '2024-04-23', type: 'cp' },
{ date: '2024-04-24', type: 'cp' },
]);
expect(save).toHaveBeenCalledTimes(3);
expect(service.vacationNumberSignal()).toBe(balances);
expect(service.computeTriggerSignal()).toBe(0);
});
it('restores an empty list when saved declarations are unreadable', () => {
const warn = vi.spyOn(console, 'warn').mockImplementation(() => undefined);
for (const saved of [
'{',
'null',
'[{"date":"2024-05-08","type":"cp"}]',
'[{"date":"2024-01-02","type":"any"}]',
]) {
localStorage.setItem('declaredNonWorkingDays', saved);
expect(new UserInputService().declaredDaysSignal()).toEqual([]);
expect(localStorage.getItem('declaredNonWorkingDays')).toBeNull();
}
expect(warn).toHaveBeenCalled();
});
it('should initialize with vacation days array', () => {
const vacations = service.vacationNumberSignal();
expect(Array.isArray(vacations)).toBe(true);