예제 #1
0
    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)
예제 #2
0
    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)
예제 #3
0
    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)
예제 #4
0
    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)
예제 #5
0
    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)
예제 #6
0
    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)
예제 #7
0
    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)