コード例 #1
0
class TestTripController(TestCase):
    def setUp(self) -> None:
        self.trip_controller = TripController()
        self.cab_controller = CabController()
        self.rider_service = rider_service
        self.booking_service = booking_service
        self.booking_controller = BookingController()

        self.driver_id = self.cab_controller.create_driver("Ashwin")
        self.cab_id = self.cab_controller.create_cab(self.driver_id, 3, 2)

        self.rider_id = self.rider_service.createRider("Aditya", 1, 1)
        self.my_rider = rider_service.getRider(self.rider_id)

        self.booking_id = self.booking_controller.book_my_cab(
            self.rider_id, 3, 3)
        self.my_booking = self.booking_service.getBooking(self.booking_id)

    def test_start_and_end_my_trip(self):
        booking_service.confirmBooking(self.booking_id)
        trip_id = self.trip_controller.start_my_trip(self.booking_id)
        my_trip = self.trip_controller.get_my_trip(trip_id)

        self.assertEqual(my_trip.trip_id, trip_id)
        self.assertEqual(my_trip.booking.booking_id,
                         self.my_booking.booking_id)
        self.assertEqual(my_trip.status, TripStatus.ACTIVE)

        self.trip_controller.end_my_trip(trip_id)

        self.assertEqual(my_trip.status, TripStatus.INACTIVE)
コード例 #2
0
    def setUp(self) -> None:
        self.booking_controller = BookingController()
        self.cab_controller = CabController()
        self.rider_service = rider_service
        self.booking_service = booking_service
        self.cab_service = cab_service
        self.trip_service = trip_service

        self.first_rider = self.rider_service.createRider("Shreyas", 1, 1)
        self.second_rider = self.rider_service.createRider("Ashwin", 0, 0)
        self.third_rider = self.rider_service.createRider("Aditya", 3, 3)

        self.first_rider_destination_x = 5
        self.first_rider_destination_y = 5

        self.second_rider_destination_x = 4
        self.second_rider_destination_y = 4

        self.third_rider_destination_x = 6
        self.third_rider_destination_y = 6

        self.first_driver = self.cab_controller.create_driver("Amit")
        self.second_driver = self.cab_controller.create_driver("Sudeep")
        # self.third_driver = self.cab_controller.create_driver("Sumit")

        self.first_cab_id = self.cab_controller.create_cab(
            self.first_driver, -3, -3)
        self.second_cab_id = self.cab_controller.create_cab(
            self.second_driver, 0, 0)
コード例 #3
0
    def setUp(self) -> None:
        self.ride_controller = RideController()
        self.rider_service = rider_service
        self.booking_controller = BookingController()
        self.cab_controller = CabController()
        self.cab_service = cab_service

        self.driver_id = self.cab_controller.create_driver("Random_name")
        self.cab_id = self.cab_controller.create_cab(self.driver_id, 0, 0)
        self.my_cab = self.cab_service.getCab(self.cab_id)
コード例 #4
0
    def setUp(self) -> None:
        self.trip_controller = TripController()
        self.cab_controller = CabController()
        self.rider_service = rider_service
        self.booking_service = booking_service
        self.booking_controller = BookingController()

        self.driver_id = self.cab_controller.create_driver("Ashwin")
        self.cab_id = self.cab_controller.create_cab(self.driver_id, 3, 2)

        self.rider_id = self.rider_service.createRider("Aditya", 1, 1)
        self.my_rider = rider_service.getRider(self.rider_id)

        self.booking_id = self.booking_controller.book_my_cab(
            self.rider_id, 3, 3)
        self.my_booking = self.booking_service.getBooking(self.booking_id)
コード例 #5
0
    def setUp(self) -> None:
        self.booking_controller = BookingController()
        self.rider_service = rider_service
        self.cab_controller = CabController()
        self.booking_service = booking_service

        # Create Cabs at multiple locations
        self.driver_1_id = self.cab_controller.create_driver("Ashwin")
        self.cab_1_id = self.cab_controller.create_cab(self.driver_1_id, 0, -2)

        self.driver_2_id = self.cab_controller.create_driver("Sayak")
        self.cab_2_id = self.cab_controller.create_cab(self.driver_2_id, -2,
                                                       -2)

        self.driver_3_id = self.cab_controller.create_driver("Sudeep")
        self.cab_3_id = self.cab_controller.create_cab(self.driver_3_id, 4, 4)
コード例 #6
0
class TestRideController(TestCase):
    def setUp(self) -> None:
        self.ride_controller = RideController()
        self.rider_service = rider_service
        self.booking_controller = BookingController()
        self.cab_controller = CabController()
        self.cab_service = cab_service

        self.driver_id = self.cab_controller.create_driver("Random_name")
        self.cab_id = self.cab_controller.create_cab(self.driver_id, 0, 0)
        self.my_cab = self.cab_service.getCab(self.cab_id)

    def test_create_rider(self):

        rider_id = self.ride_controller.create_rider("Rahul", 2, 3)
        my_rider = self.rider_service.getRider(rider_id)

        self.assertEqual(my_rider.rider_id, rider_id)
        self.assertEqual(my_rider.rider_name, "Rahul")
        self.assertEqual(my_rider.location.get_x_location(), 2)
        self.assertEqual(my_rider.location.get_y_location(), 3)

    def test_update_rider_location(self):
        rider_id = self.ride_controller.create_rider("Amit", 4, 5)
        my_rider = self.rider_service.getRider(rider_id)

        self.assertEqual(my_rider.rider_name, "Amit")
        self.assertEqual(my_rider.location.get_x_location(), 4)
        self.assertEqual(my_rider.location.get_y_location(), 5)

        self.ride_controller.update_rider_location(rider_id, 5, 5)
        self.assertEqual(my_rider.location.get_x_location(), 5)
        self.assertEqual(my_rider.location.get_y_location(), 5)

    def test_get_and_update_rider_history(self):

        rider_id = self.ride_controller.create_rider("Ashish", 1, 2)
        my_rider = self.rider_service.getRider(rider_id)

        booking_id = self.booking_controller.book_my_cab(rider_id, 0, 0)
        rider_history = self.ride_controller.get_rider_history(rider_id)

        self.assertEqual(rider_history[0].booking_id, booking_id)
コード例 #7
0
class BookingService(object):
    def __init__(self):
        self.all_bookings = dict()
        self.cab_controller = CabController()

    def createBooking(self, rider, cab, destination_location_x,
                      destination_location_y):
        booking_id = get_unique_identifier()
        fare_estimate = get_fair_estimate
        destination_location = Location(get_unique_identifier(),
                                        destination_location_x,
                                        destination_location_y)
        my_booking = Booking(booking_id, cab, rider, fare_estimate,
                             destination_location)
        self.all_bookings[booking_id] = my_booking
        return booking_id

    def getBooking(self, booking_id):

        try:
            return self.all_bookings[booking_id]
        except:
            print('Invalid Booking ID')

    def confirmBooking(self, booking_id):
        booking = self.getBooking(booking_id)
        booking.update_booking_status(BookingStatus.CONFIRMED)
        cab_id = booking.cab.cab_id
        self.cab_controller.update_cab_availability(cab_id, CabStatus.BOOKED)

    def cancelBooking(self, booking_id):
        booking = self.getBooking(booking_id)
        booking.update_booking_status(BookingStatus.CANCELLED)
        cab_id = booking.cab.cab_id
        self.cab_controller.update_cab_availability(cab_id,
                                                    CabStatus.AVAILABLE)
コード例 #8
0
 def __init__(self):
     self.all_bookings = dict()
     self.cab_controller = CabController()
コード例 #9
0
class TestCabController(TestCase):
    def setUp(self) -> None:
        self.cab_controller = CabController()
        self.cab_service = cab_service

    def test_create_driver(self):

        driver_name = "Shreyas"
        driver_id = self.cab_controller.create_driver(driver_name)

        my_driver = self.cab_service.getDriver(driver_id)
        self.assertEqual(my_driver.driver_id, driver_id)
        self.assertEqual(my_driver.driver_name, driver_name)

    def update_driver_availability(self):
        driver_id = self.cab_controller.create_driver("ABC")

        self.cab_controller.update_driver_availability(driver_id,
                                                       DriverStatus.AVAILABLE)
        driver = self.cab_service.getDriver(driver_id)
        self.assertEqual(driver.driver_status, DriverStatus.AVAILABLE)

        self.cab_controller.update_driver_availability(
            driver_id, DriverStatus.UNAVAILABLE)
        driver = self.cab_service.getDriver(driver_id)
        self.assertEqual(driver.driver_status, DriverStatus.UNAVAILABLE)

    def test_create_cab(self):

        driver_id = self.cab_controller.create_driver("Random_name")
        cab_id = self.cab_controller.create_cab(driver_id, 0, 0)
        my_cab = self.cab_service.getCab(cab_id)

        self.assertEqual(cab_id, my_cab.cab_id)
        self.assertEqual(my_cab.location.get_x_location(), 0)
        self.assertEqual(my_cab.location.get_y_location(), 0)

    def test_update_cab_availability(self):

        driver_id = self.cab_controller.create_driver("My_Driver")
        cab_id = self.cab_controller.create_cab(driver_id, 3, 3)
        my_cab = self.cab_service.getCab(cab_id)

        self.cab_controller.update_cab_availability(cab_id,
                                                    CabStatus.UNAVAILABLE)
        self.assertEqual(my_cab.status, CabStatus.UNAVAILABLE)

        self.cab_controller.update_cab_availability(cab_id, CabStatus.BOOKED)
        self.assertEqual(my_cab.status, CabStatus.BOOKED)
コード例 #10
0
 def setUp(self) -> None:
     self.cab_controller = CabController()
     self.cab_service = cab_service
コード例 #11
0
class TestBookingController(TestCase):
    def setUp(self) -> None:
        self.booking_controller = BookingController()
        self.rider_service = rider_service
        self.cab_controller = CabController()
        self.booking_service = booking_service

        # Create Cabs at multiple locations
        self.driver_1_id = self.cab_controller.create_driver("Ashwin")
        self.cab_1_id = self.cab_controller.create_cab(self.driver_1_id, 0, -2)

        self.driver_2_id = self.cab_controller.create_driver("Sayak")
        self.cab_2_id = self.cab_controller.create_cab(self.driver_2_id, -2,
                                                       -2)

        self.driver_3_id = self.cab_controller.create_driver("Sudeep")
        self.cab_3_id = self.cab_controller.create_cab(self.driver_3_id, 4, 4)

    def test_book_my_cab(self):

        rider_id = rider_service.createRider("Aditya", -1, -1)
        my_rider = rider_service.getRider(rider_id)

        booking_id = self.booking_controller.book_my_cab(rider_id, 3, 3)
        my_booking = self.booking_service.getBooking(booking_id)

        self.assertEqual(booking_id, my_booking.booking_id)
        self.assertEqual(rider_id, my_booking.rider.rider_id)
        self.assertEqual("Aditya", my_booking.rider.rider_name)
        self.assertEqual(self.driver_1_id, my_booking.cab.driver.driver_id)
        self.assertEqual("Ashwin", my_booking.cab.driver.driver_name)

        self.assertEqual(my_booking.rider.location.get_x_location(),
                         my_rider.location.get_x_location())
        self.assertEqual(my_booking.rider.location.get_y_location(),
                         my_rider.location.get_y_location())

    def test_confirm_booking(self):

        rider_id = rider_service.createRider("Nithish", 4, 3)
        my_rider = rider_service.getRider(rider_id)

        booking_id = self.booking_controller.book_my_cab(rider_id, 6, 6)
        my_booking = self.booking_service.getBooking(booking_id)

        self.assertEqual(my_booking.booking_status, BookingStatus.CREATED)

        self.booking_service.confirmBooking(booking_id)
        self.assertEqual(my_booking.booking_status, BookingStatus.CONFIRMED)
        self.assertEqual(my_booking.cab.status, CabStatus.BOOKED)

    def test_cancel_booking(self):
        rider_id = rider_service.createRider("Sharan", 0, 0)
        my_rider = rider_service.getRider(rider_id)

        booking_id = self.booking_controller.book_my_cab(rider_id, 1, 1)
        my_booking = self.booking_service.getBooking(booking_id)

        self.assertEqual(my_booking.booking_status, BookingStatus.CREATED)

        self.booking_service.cancelBooking(booking_id)
        self.assertEqual(my_booking.booking_status, BookingStatus.CANCELLED)
        self.assertEqual(my_booking.cab.status, CabStatus.AVAILABLE)
コード例 #12
0
class TestConcurrency(TestCase):
    def setUp(self) -> None:
        self.booking_controller = BookingController()
        self.cab_controller = CabController()
        self.rider_service = rider_service
        self.booking_service = booking_service
        self.cab_service = cab_service
        self.trip_service = trip_service

        self.first_rider = self.rider_service.createRider("Shreyas", 1, 1)
        self.second_rider = self.rider_service.createRider("Ashwin", 0, 0)
        self.third_rider = self.rider_service.createRider("Aditya", 3, 3)

        self.first_rider_destination_x = 5
        self.first_rider_destination_y = 5

        self.second_rider_destination_x = 4
        self.second_rider_destination_y = 4

        self.third_rider_destination_x = 6
        self.third_rider_destination_y = 6

        self.first_driver = self.cab_controller.create_driver("Amit")
        self.second_driver = self.cab_controller.create_driver("Sudeep")
        # self.third_driver = self.cab_controller.create_driver("Sumit")

        self.first_cab_id = self.cab_controller.create_cab(
            self.first_driver, -3, -3)
        self.second_cab_id = self.cab_controller.create_cab(
            self.second_driver, 0, 0)
        # self.third_cab_id = self.cab_controller.create_cab(self.third_driver, -2, -2)

    def test_book_my_cab_concurrency(self):
        # import ipdb
        # ipdb.set_trace()

        # with concurrent.futures.ThreadPoolExecutor() as executor:
        #     parameters = [(self.first_rider, self.first_rider_destination_x, self.first_rider_destination_y),
        #                   (self.second_rider, self.second_rider_destination_x, self.second_rider_destination_y),
        #                   (self.third_rider, self.third_rider_destination_x, self.third_rider_destination_y)]
        #
        #     results = [executor.map(self.booking_controller.book_my_cab, param) for param in parameters]
        #
        #     for res in results:
        #         print(next(res))
        lock = threading.Lock()
        with lock:

            first_thread = Thread(target=self.booking_controller.book_my_cab,
                                  args=(lock, self.first_rider,
                                        self.first_rider_destination_x,
                                        self.first_rider_destination_y))
            second_thread = Thread(target=self.booking_controller.book_my_cab,
                                   args=(lock, self.second_rider,
                                         self.second_rider_destination_x,
                                         self.second_rider_destination_x))
            third_thread = Thread(target=self.booking_controller.book_my_cab,
                                  args=(lock, self.third_rider,
                                        self.third_rider_destination_x,
                                        self.third_rider_destination_y))

            first_thread.start()
            second_thread.start()
            third_thread.start()
            first_thread.join()
            second_thread.join()
            third_thread.join()