import getSlots from '@lib/slots'; import {it, expect} from '@jest/globals'; import MockDate from 'mockdate'; import dayjs, {Dayjs} from 'dayjs'; import utc from 'dayjs/plugin/utc'; import timezone from 'dayjs/plugin/timezone'; dayjs.extend(utc); dayjs.extend(timezone); MockDate.set('2021-06-20T11:59:59Z'); it('can fit 24 hourly slots for an empty day', async () => { // 24h in a day. expect(getSlots({ inviteeDate: dayjs().add(1, 'day'), frequency: 60, workingHours: [ { days: [...Array(7).keys()], startTime: 0, endTime: 1440 } ], organizerTimeZone: 'Europe/London' })).toHaveLength(24); }); it('only shows future booking slots on the same day', async () => { // The mock date is 1s to midday, so 12 slots should be open given 0 booking notice. expect(getSlots({ inviteeDate: dayjs(), frequency: 60, workingHours: [ { days: [...Array(7).keys()], startTime: 0, endTime: 1440 } ], organizerTimeZone: 'GMT' })).toHaveLength(12); }); it('can cut off dates that due to invitee timezone differences fall on the next day', async () => { expect(getSlots({ inviteeDate: dayjs().tz('Europe/Amsterdam').startOf('day'), // time translation +01:00 frequency: 60, workingHours: [ { days: [0], startTime: 1380, endTime: 1440 } ], organizerTimeZone: 'Europe/London' })).toHaveLength(0); }); it('can cut off dates that due to invitee timezone differences fall on the previous day', async () => { expect(getSlots({ inviteeDate: dayjs().startOf('day'), // time translation -01:00 frequency: 60, workingHours: [ { days: [0], startTime: 0, endTime: 60 } ], organizerTimeZone: 'Europe/London' })).toHaveLength(0); });