def test_has_available_seats_full(self):
        """
        check if reserve_seat({{trip}}) stops reserving at capacity
        """
        trip_id = Trip.objects.first()
        trip_route = trip_id.trip_route
        trip_stop_a = trip_route.tripstop_set.get(stop_number=1)
        trip_stop_b = trip_route.tripstop_set.get(stop_number=2)

        num_reservations = 50
        bus_capacity = trip_id.bus.capacity
        customer = Customer.objects.first()

        for i in range(num_reservations):
            bus_seat = BusSeat.objects.get(bus=trip_id.bus,
                                           order=(i % bus_capacity))
            res = create_reservation(
                trip=trip_id,
                bus_seat=bus_seat,
                customer=customer,
                departure_station=trip_stop_a.station,
                arrival_station=trip_stop_b.station,
            )

        # check new `last_reserved_seat` value
        reservations_num = get_seats_reserved(
            trip=trip_id,
            departure_stop=trip_stop_a,
            arrival_stop=trip_stop_b,
        ).count()
        self.assertEqual(reservations_num, bus_capacity)
    def test_has_available_seats_case8(self):
        """
        CASE 8
        Trip Route: A - B - C - D - E
        Reservation1: D to E
        Reservation2: A to B
        ◦--◦
             ◦--◦
        when making reservation2 it should say that the free seats = capacity
        """
        # [Step1] retrieve required data
        # [Step1.1] get first trip and get its first 4 stops
        trip_id = Trip.objects.first()
        trip_route = trip_id.trip_route
        trip_stop_a = trip_route.tripstop_set.get(stop_number=1)
        trip_stop_b = trip_route.tripstop_set.get(stop_number=2)
        trip_stop_d = trip_route.tripstop_set.get(stop_number=4)
        trip_stop_e = trip_route.tripstop_set.get(stop_number=5)

        # [Step1.2] get any customer and the first seat in the trip's  bus
        customer = Customer.objects.first()
        bus_seat = BusSeat.objects.get(bus=trip_id.bus, order=1)

        # [Step2] reserve from A to C
        create_reservation(
            trip=trip_id,
            bus_seat=bus_seat,
            customer=customer,
            departure_station=trip_stop_d.station,
            arrival_station=trip_stop_e.station,
        )

        # [Step3] there now should be a reservation if you want to reserve from B to D
        reservations_num = get_seats_reserved(
            trip=trip_id,
            departure_stop=trip_stop_a,
            arrival_stop=trip_stop_b,
        ).count()
        self.assertEqual(reservations_num, 0)