import getSlots from "@lib/slots"; import { expect, it } from "@jest/globals"; import MockDate from "mockdate"; import 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); });