UNPKG

@tictuk/item-availability

Version:

Provides functions to check availability

113 lines (99 loc) 3.04 kB
import Item from './item'; import { isAvailableNow, isItemAvailable } from '.'; const noExceptionsAvailability = { weekly: [] }; const emptyAvailability = { weekly: [], exceptions: [], }; const alwaysAvailable = { weekly: [{ minuteOfWeek: 0, durationMins: 1440 * 7 }], exceptions: [], }; const regularItem: Item = { condition: { conditions: [ {}, {}, {}, { type: 'n/a', availability: { weekly: [ { minuteOfWeek: 0, durationMins: 120 }, { minuteOfWeek: 1440, durationMins: 60 }, { minuteOfWeek: 1600, durationMins: 120 }, ], exceptions: [ { start: { year: 2022, month: 12, day: 20, hour: 0, minute: 0, }, end: { year: 2023, month: 1, day: 1, hour: 0, minute: 0, }, available: true, }, { start: { year: 2023, month: 1, day: 1, hour: 0, minute: 0, }, end: { year: 2023, month: 1, day: 10, hour: 0, minute: 0, }, available: false, }, ], }, }, ], }, }; test('Item without exceptions and empty weekly availability is available', () => { expect(isAvailableNow(noExceptionsAvailability)).toBeTruthy(); }); test('Always available item is available now', () => { expect(isAvailableNow(alwaysAvailable)).toBeTruthy(); }); test('Item with empty availability is available now', () => { expect(isAvailableNow(emptyAvailability)).toBeTruthy(); }); test('Item available without exceptions', () => { expect(isItemAvailable(regularItem, new Date(2022, 4, 15, 1))).toBeTruthy(); }); test('Item unavailable without exceptions between weekly groups', () => { expect(isItemAvailable(regularItem, new Date(2022, 4, 19, 4))).toBeFalsy(); }); test('Item unavailable without exceptions after weekly groups', () => { expect(isItemAvailable(regularItem, new Date(2022, 4, 21, 0))).toBeFalsy(); }); test('Item unavailable but overwritten by exception', () => { expect(isItemAvailable(regularItem, new Date(2022, 11, 31, 2))).toBeTruthy(); }); test('Item available but overwritten by exception', () => { expect(isItemAvailable(regularItem, new Date(2023, 0, 1, 1))).toBeFalsy(); }); test('Item unavailable with and without exception', () => { expect(isItemAvailable(regularItem, new Date(2023, 0, 1, 4))).toBeFalsy(); }); test('Item available with and without exception', () => { expect(isItemAvailable(regularItem, new Date(2022, 11, 25, 1))).toBeTruthy(); }); test('Item without an availability object', () => { expect(isItemAvailable({}, new Date())).toBeTruthy(); });