This commit is contained in:
1 parent
03841c6e3d
commit
036a8c0e1e
32 files changed
+1805
-89
No files matched your search
@@ -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);
|
||||
|
||||
Reference in new issue
Block a user