def test_left_overlap(self): start = self.start + timedelta(days=-1) end = self.start + timedelta(days=1) self.create_conflicting_rental(start, end, 3) availability = Availability(self.start, self.end, self.depot.id) with self.assertNumQueries(2): intervals = availability.get_availability_intervals(self.item) expected = [ Interval(self.start, end, 7), Interval(end, self.end, 10) ] self.assertEqual(intervals, expected)
def test_relevant_state(self): start = self.start + timedelta(days=1) end = self.end + timedelta(days=-1) self.create_conflicting_rental(start, end, 3, Rental.STATE_PENDING) availability = Availability(self.start, self.end, self.depot.id, conflicting_states=[Rental.STATE_PENDING]) with self.assertNumQueries(2): intervals = availability.get_availability_intervals(self.item) expected = [ Interval(self.start, start, 10), Interval(start, end, 7), Interval(end, self.end, 10) ] self.assertEqual(intervals, expected)
def test_exactly_matching_rental_time_frame(self): self.create_conflicting_rental(self.start, self.end, 3) availability = Availability(self.start, self.end, self.depot.id) with self.assertNumQueries(2): intervals = availability.get_availability_intervals(self.item) expected = [Interval(self.start, self.end, 7)] self.assertEqual(intervals, expected)
def test_enclosing_and_enclosed(self): enclosed_start = self.start + timedelta(days=1) enclosed_end = self.end + timedelta(days=-1) self.create_conflicting_rental(enclosed_start, enclosed_end, 3) enclosing_start = self.start + timedelta(days=-1) enclosing_end = self.end + timedelta(days=1) self.create_conflicting_rental(enclosing_start, enclosing_end, 3) availability = Availability(self.start, self.end, self.depot.id) with self.assertNumQueries(2): intervals = availability.get_availability_intervals(self.item) expected = [ Interval(self.start, enclosed_start, 7), Interval(enclosed_start, enclosed_end, 4), Interval(enclosed_end, self.end, 7) ] self.assertEqual(intervals, expected)
def test_left_and_right_triple_overlap(self): left_start = self.start + timedelta(days=-1) left_end = self.end + timedelta(days=-1) self.create_conflicting_rental(left_start, left_end, 3) right_start = self.start + timedelta(days=1) right_end = self.end + timedelta(days=1) self.create_conflicting_rental(right_start, right_end, 3) availability = Availability(self.start, self.end, self.depot.id) with self.assertNumQueries(2): intervals = availability.get_availability_intervals(self.item) expected = [ Interval(self.start, right_start, 7), Interval(right_start, left_end, 4), Interval(left_end, self.end, 7) ] self.assertEqual(intervals, expected)
def test_not_relevant_item(self): start = self.start + timedelta(days=1) end = self.end + timedelta(days=-1) self.create_non_conflicting_rental(start, end) availability = Availability(self.start, self.end, self.depot.id) with self.assertNumQueries(1): intervals = availability.get_availability_intervals(self.item) expected = [Interval(self.start, self.end, 10)] self.assertEqual(intervals, expected)
def test_start_exactly_on_end_of_rental(self): start = self.start + timedelta(days=-1) end = self.start self.create_conflicting_rental(start, end, 3) availability = Availability(self.start, self.end, self.depot.id) with self.assertNumQueries(1): intervals = availability.get_availability_intervals(self.item) expected = [Interval(self.start, self.end, 10)] self.assertEqual(intervals, expected)