From 9b4ee116e62c210e9e3ce2f5dd1b7614243808da Mon Sep 17 00:00:00 2001 From: William Valentin Date: Tue, 23 Sep 2025 10:39:35 -0700 Subject: [PATCH] test(schedule): cover dst transition logic --- utils/__tests__/schedule.test.ts | 68 ++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/utils/__tests__/schedule.test.ts b/utils/__tests__/schedule.test.ts index 81fdb47..fd1eade 100644 --- a/utils/__tests__/schedule.test.ts +++ b/utils/__tests__/schedule.test.ts @@ -99,6 +99,74 @@ describe('Schedule Utilities', () => { const schedule = generateSchedule([medication], baseDate); 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', () => {