def test_update_next_bookings():
    v = create_vehicle()

    clock = Clock()
    b1 = Booking(clock, Position(13.4014, 52.5478), Position(13.3393, 52.5053))
    b2 = Booking(clock, Position(13.4014, 52.5478), Position(13.3393, 52.5053))

    itinerary = Itinerary(3434, v)
    itinerary.move_to(111)
    itinerary.pickup(b1)
    itinerary.dropoff(b1)
    itinerary.pickup(b2)
    itinerary.dropoff(b2)

    update_next_bookings(itinerary)

    assert b1.is_waiting_pickup()
    assert b2.is_waiting_pickup()

    b1.set_pickup()
    update_next_bookings(itinerary)
    assert b1.is_waiting_dropoff()
    assert b2.is_waiting_pickup()
Beispiel #2
0
def test_Dispatcher_2():
    clock = Clock()
    router = LinearRouter(clock)

    fleet = Fleet(clock, router)
    vehicle = Vehicle(clock)
    fleet.infleet(vehicle, Position(13.3764, 52.5461))

    cnt = Dispatcher()

    booking = Booking(clock, Position(13.4014, 52.5478),
                      Position(13.3764, 52.5461))

    itinerary = Itinerary(101, vehicle)
    job1 = itinerary.pickup(booking)
    job2 = itinerary.dropoff(booking)

    cnt.dispatch(itinerary)
    cnt.step()

    # finish 2 jobs in 1 step
    assert itinerary.current_job is None

    assert booking.is_complete()
def test_pickup_booking():
    vehicle = create_vehicle()
    itinerary = Itinerary(Clock(), vehicle)

    booking = MagicMock()
    booking.is_pending = MagicMock(return_value=True)
    booking.is_matched = MagicMock(return_value=True)

    context = {"vehicle_id": vehicle.id}
    pickup_booking(booking, itinerary)

    booking.set_matched.assert_called_once_with(itinerary=itinerary)
    booking.set_waiting_pickup.assert_called_once_with(itinerary=itinerary)
    booking.set_pickup.assert_called_once_with(itinerary=itinerary)

    booking = MagicMock()
    booking.is_pending = MagicMock(return_value=False)
    booking.is_matched = MagicMock(return_value=True)
    pickup_booking(booking, itinerary)
    booking.set_waiting_pickup.assert_called_once_with(itinerary=itinerary)
    booking.set_pickup.assert_called_once_with(itinerary=itinerary)

    booking = MagicMock()
    booking.is_pending = MagicMock(return_value=False)
    booking.is_matched = MagicMock(return_value=False)
    booking.is_waiting_pickup = MagicMock(return_value=True)
    pickup_booking(booking, itinerary)
    booking.set_pickup.assert_called_once_with(itinerary=itinerary)

    booking = MagicMock()
    booking.is_pending = MagicMock(return_value=False)
    booking.is_matched = MagicMock(return_value=False)
    booking.is_waiting_pickup = MagicMock(return_value=False)

    with pytest.raises(NotImplementedError):
        pickup_booking(booking, itinerary)
def test_dropoff_booking():
    vehicle = create_vehicle()
    itinerary = Itinerary(Clock(), vehicle)

    booking = MagicMock()
    booking.is_waiting_dropoff = MagicMock(return_value=True)
    dropoff_booking(booking, itinerary)
    booking.set_dropoff.assert_called_once_with(itinerary=itinerary)
    booking.set_complete.assert_called_once_with(itinerary=itinerary)

    booking = MagicMock()
    booking.is_waiting_dropoff = MagicMock(return_value=False)
    booking.is_pickup = MagicMock(return_value=True)
    dropoff_booking(booking, itinerary)
    booking.set_waiting_dropoff.assert_called_once_with(itinerary=itinerary)
    booking.set_dropoff.assert_called_once_with(itinerary=itinerary)
    booking.set_complete.assert_called_once_with(itinerary=itinerary)

    booking = MagicMock()
    booking.is_waiting_dropoff = MagicMock(return_value=False)
    booking.is_pickup = MagicMock(return_value=False)

    with pytest.raises(Exception):
        dropoff_booking(booking, itinerary)
                  initial_time=5)
    print(f"Current time {clock.to_datetime()} ({clock.now} clock time)")

    fleet = create_fleet(clock)
    vehicle = fleet.get_online_vehicles()[0]

    booking = create_booking(clock)

    print_estimates(vehicle, booking, clock)

    print("\nObject states before simulation:")
    print(f'Booking state is "{booking.state.value}"')
    print(f'Vehicle state is "{vehicle.state.value}"')

    # explain vehicle what to do
    itinerary = Itinerary(clock.now, vehicle)
    itinerary.move_to(booking.pickup)
    itinerary.pickup(booking)
    itinerary.move_to(booking.dropoff)
    itinerary.dropoff(booking)

    dispatcher = Dispatcher()
    dispatcher.dispatch(itinerary)

    print(
        f"\nStart simulation at {clock.to_datetime()} ({clock.now} clock time)"
    )

    # run simulation - all state changes and movements will happen here
    # the order of steps in important: fleet -> dispatcher -> clock
    while not itinerary.is_completed():