test(schedule): cover dst transition logic
This commit is contained in:
@@ -99,6 +99,74 @@ describe('Schedule Utilities', () => {
|
|||||||
const schedule = generateSchedule([medication], baseDate);
|
const schedule = generateSchedule([medication], baseDate);
|
||||||
expect(schedule).toEqual([]);
|
expect(schedule).toEqual([]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('DST boundaries', () => {
|
||||||
|
test('maintains morning doses during spring forward transition', () => {
|
||||||
|
const medication = createMockMedication({
|
||||||
|
frequency: Frequency.Daily,
|
||||||
|
startTime: '08:00',
|
||||||
|
});
|
||||||
|
|
||||||
|
const beforeTransition = generateSchedule(
|
||||||
|
[medication],
|
||||||
|
new Date('2024-03-09T12:00:00.000Z')
|
||||||
|
);
|
||||||
|
const duringTransition = generateSchedule(
|
||||||
|
[medication],
|
||||||
|
new Date('2024-03-10T12:00:00.000Z')
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(beforeTransition).toHaveLength(1);
|
||||||
|
expect(duringTransition).toHaveLength(1);
|
||||||
|
const diffHours =
|
||||||
|
(duringTransition[0].scheduledTime.getTime() -
|
||||||
|
beforeTransition[0].scheduledTime.getTime()) /
|
||||||
|
3600000;
|
||||||
|
expect(diffHours).toBe(23);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('shifts to next valid slot when scheduled time is skipped by DST', () => {
|
||||||
|
const medication = createMockMedication({
|
||||||
|
frequency: Frequency.Daily,
|
||||||
|
startTime: '02:30',
|
||||||
|
});
|
||||||
|
|
||||||
|
const schedule = generateSchedule(
|
||||||
|
[medication],
|
||||||
|
new Date('2024-03-10T12:00:00.000Z')
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(schedule).toHaveLength(1);
|
||||||
|
expect(schedule[0].scheduledTime.getHours()).toBe(3);
|
||||||
|
expect(schedule[0].scheduledTime.getMinutes()).toBe(30);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('extends interval by one hour during fall back transition', () => {
|
||||||
|
const medication = createMockMedication({
|
||||||
|
frequency: Frequency.Daily,
|
||||||
|
startTime: '08:00',
|
||||||
|
});
|
||||||
|
|
||||||
|
const beforeTransition = generateSchedule(
|
||||||
|
[medication],
|
||||||
|
new Date('2024-11-02T12:00:00.000Z')
|
||||||
|
);
|
||||||
|
const duringTransition = generateSchedule(
|
||||||
|
[medication],
|
||||||
|
new Date('2024-11-03T12:00:00.000Z')
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(beforeTransition).toHaveLength(1);
|
||||||
|
expect(duringTransition).toHaveLength(1);
|
||||||
|
const diffHours =
|
||||||
|
(duringTransition[0].scheduledTime.getTime() -
|
||||||
|
beforeTransition[0].scheduledTime.getTime()) /
|
||||||
|
3600000;
|
||||||
|
expect(diffHours).toBe(25);
|
||||||
|
expect(duringTransition[0].scheduledTime.getHours()).toBe(8);
|
||||||
|
expect(duringTransition[0].scheduledTime.getMinutes()).toBe(0);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('generateReminderSchedule', () => {
|
describe('generateReminderSchedule', () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user