| 
									
										
										
										
											2023-01-20 15:31:04 +01:00
										 |  |  | import { Dayjs } from 'dayjs' | 
					
						
							|  |  |  | import dayjs from '../../../src/common/dayjs' | 
					
						
							| 
									
										
										
										
											2022-11-27 16:14:56 +01:00
										 |  |  | import { DateRange, Reservation } from '../../../src/common/reservation' | 
					
						
							| 
									
										
										
										
											2021-11-24 00:00:22 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-27 13:11:09 +01:00
										 |  |  | describe('Reservation', () => { | 
					
						
							|  |  |  |   test('will create correct possible dates', () => { | 
					
						
							| 
									
										
										
										
											2021-11-28 13:06:52 +01:00
										 |  |  |     const startDate = dayjs().hour(12).minute(0).second(0).millisecond(0) | 
					
						
							|  |  |  |     const endDate = startDate.add(1, 'hour') | 
					
						
							| 
									
										
										
										
											2021-11-24 00:00:22 +01:00
										 |  |  |     const dateRange: DateRange = { | 
					
						
							|  |  |  |       start: startDate, | 
					
						
							|  |  |  |       end: endDate, | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2022-10-23 11:55:47 +02:00
										 |  |  |     const res = new Reservation( | 
					
						
							|  |  |  |       { username: 'collin', password: 'password' }, | 
					
						
							|  |  |  |       dateRange, | 
					
						
							|  |  |  |       { | 
					
						
							|  |  |  |         id: 'collin', | 
					
						
							|  |  |  |         name: 'collin', | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-24 00:00:22 +01:00
										 |  |  |     expect(res.possibleDates).toHaveLength(5) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-20 15:31:04 +01:00
										 |  |  |     console.log(res.possibleDates[0].format()) | 
					
						
							| 
									
										
										
										
											2021-11-24 00:00:22 +01:00
										 |  |  |     expect(res.possibleDates[0]).toEqual(startDate) | 
					
						
							| 
									
										
										
										
											2021-11-27 13:11:09 +01:00
										 |  |  |     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 }, | 
					
						
							| 
									
										
										
										
											2022-10-23 11:55:47 +02:00
										 |  |  |   ])( | 
					
						
							|  |  |  |     '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) | 
					
						
							| 
									
										
										
										
											2023-01-20 15:31:04 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-23 11:55:47 +02:00
										 |  |  |   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) | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   ) | 
					
						
							|  |  |  | }) |