def test_middle_of_period_unavailable_one_place_missing(self): reservation = RoomReservation.objects.create( subject=self.room3, size=1, start=datetime(2001, 1, 8), end=datetime(2001, 1, 15) ) # this reservation will not collide as it has size one, leaving 2 places available reservation = RoomReservation.objects.create( subject=self.room3, size=2, start=datetime(2001, 1, 1), end=datetime(2001, 1, 8) ) start = datetime(2000, 12, 01) end = datetime(2001, 01, 31) data = { 'start': start, 'end': end, 'required_duration': timedelta(7), 'required_size': 2, 'subject': self.room3, } searcher = FindPeriod() self.assertEqual( searcher.search(**data), [ (start, reservation.start), (reservation.end, end) ] )
def test_period_unavailable(self): day = lambda day: datetime(2001, 1, day) reserve = lambda start, end, size: RoomReservation.objects.create( subject=self.room3, size=size, start=start, end=end ) reserve(day(1), day(4), 3) reserve(day(4), day(7), 1) reserve(day(6), day(11), 1) reserve(day(8), day(15), 2) reserve(day(22), day(29), 2) start = datetime(2001, 01, 01) end = datetime(2001, 01, 31) data = { 'start': start, 'end': end, 'required_duration': timedelta(8), 'required_size': 2, 'subject': self.room3 } searcher = FindPeriod() self.assertEqual( searcher.search(**data), [] )
def test_begin_of_period_unavailable(self): reservation_start = datetime(2001, 1, 1) reservation_end = datetime(2001, 1, 8) preliminary_reservation_start = datetime(2001, 1, 8) preliminary_reservation_end = datetime(2001, 1, 14) invalid_preliminary_reservation_start = datetime(2001, 1, 14) invalid_preliminary_reservation_end = datetime(2001, 1, 20) self.room1.reserve( size=1, start=reservation_start, end=reservation_end ) self.room1.reserve( size=1, start=preliminary_reservation_start, end=preliminary_reservation_end, valid_until=datetime(2100, 10, 10) ) self.room1.reserve( size=1, start=invalid_preliminary_reservation_start, end=invalid_preliminary_reservation_end, valid_until=datetime(1900, 10, 10) ) start = datetime(2001, 01, 01) end = datetime(2001, 01, 31) data = { 'start': start, 'end': end, 'required_duration': timedelta(7), 'required_size': 1, 'subject': self.room1, } searcher = FindPeriod() self.assertEqual( searcher.search(**data), [(preliminary_reservation_end, end)] )
def test_begin_of_period_unavailable(self): reservation = RoomReservation.objects.create( subject=self.room1, size=1, start=datetime(2001, 1, 1), end=datetime(2001, 1, 8) ) start = datetime(2001, 01, 01) end = datetime(2001, 01, 31) data = { 'start': start, 'end': end, 'required_duration': timedelta(7), 'required_size': 1, 'subject': self.room1, } searcher = FindPeriod() self.assertEqual( searcher.search(**data), [(reservation.end, end)] )
def test_whole_period_available_but_with_concurrent_reservation(self): RoomReservation.objects.create( subject=self.room2, size=1, start=datetime(2001, 1, 1), end=datetime(2001, 1, 8) ) start = datetime(2001, 01, 01) end = datetime(2001, 01, 31) data = { 'start': start, 'end': end, 'required_duration': timedelta(7), 'required_size': 1, 'subject': self.room2, } searcher = FindPeriod() self.assertEqual( searcher.search(**data), [ (start, end) ] )