autobaan/tests/common/reservation.test.ts

69 lines
2.2 KiB
TypeScript
Raw Normal View History

import dayjs, { Dayjs } from 'dayjs'
import { DateRange, Reservation } from '../../src/common/reservation'
describe('Reservation', () => {
test('will create correct possible dates', () => {
const startDate = dayjs().hour(12).minute(0).second(0).millisecond(0)
const endDate = startDate.add(1, 'hour')
const dateRange: DateRange = {
start: startDate,
end: endDate,
}
const res = new Reservation(
{ username: 'collin', password: 'password' },
dateRange,
{
id: 'collin',
name: 'collin',
}
)
expect(res.possibleDates).toHaveLength(5)
expect(res.possibleDates[0]).toEqual(startDate)
expect(res.possibleDates[1]).toEqual(startDate.add(15, 'minute'))
expect(res.possibleDates[2]).toEqual(startDate.add(30, 'minute'))
expect(res.possibleDates[3]).toEqual(startDate.add(45, 'minute'))
expect(res.possibleDates[4]).toEqual(startDate.add(60, 'minute'))
})
test.each([
{ reservationDate: dayjs().add(7, 'days'), expected: true },
{ reservationDate: dayjs().add(1, 'days'), expected: true },
{ reservationDate: dayjs().add(8, 'days'), expected: false },
])(
'will properly mark reservation availability according to date',
({ reservationDate, expected }) => {
const res = new Reservation(
{ username: 'collin', password: 'collin' },
{ start: reservationDate, end: reservationDate },
{ id: 'collin', name: 'collin' }
)
expect(res.isAvailableForReservation()).toBe(expected)
}
)
const zeroTime = (date: Dayjs): Dayjs =>
date.hour(0).minute(0).second(0).millisecond(0)
test.each([
{
date: dayjs().add(8, 'days'),
expected: zeroTime(dayjs().add(1, 'days')),
},
{
date: dayjs().add(31, 'days'),
expected: zeroTime(dayjs().add(24, 'days')),
},
])(
'should return value indicating if reservation is possible now',
({ date, expected }) => {
const res = new Reservation(
{ username: 'collin', password: 'collin' },
{ start: date, end: date },
{ id: 'collin', name: 'collin' }
)
expect(res.getAllowedReservationDate()).toStrictEqual(expected)
}
)
})