def test_time_window(self, cls_name): order = Order(id='3', lat=5.2, lng=6.1, duration=7) order.time_window = 'Foo' with pytest.raises(TypeError) as excinfo: order.validate() err_msg = TYPE_ERR_MSG.format(cls_name, 'time_window', TimeWindow, str) assert err_msg == str(excinfo.value)
def orders(self): order1 = Order('3', 5.2, 6.1, 7) order1.time_window = TimeWindow(start_time=dtime, end_time=dtime) order1.skills = ['handy', 'quiet'] order1.assigned_to = 'Tom & Jerry' order1.scheduling_info = SchedulingInfo(scheduled_at=dtime, scheduled_driver='rantanplan') order2 = Order('4', 5.2, 6.1, 7) order2.time_window = TimeWindow(start_time=dtime, end_time=dtime) order2.skills = ['barista', 'terrorista'] order2.assigned_to = 'Sam & Max' order2.scheduling_info = SchedulingInfo(scheduled_at=dtime, scheduled_driver='rantanplan') return order1, order2
def test_skills(self, cls_name): order = Order(id='3', lat=5.2, lng=6.1, duration=7) order.time_window = TimeWindow(dtime, dtime) order.skills = 'handy' with pytest.raises(TypeError) as excinfo: order.validate() err_msg = TYPE_ERR_MSG.format(cls_name, 'skills', (list, tuple), str) assert err_msg == str(excinfo.value) order = Order(id='3', lat=5.2, lng=6.1, duration=7) order.time_window = TimeWindow(dtime, dtime) order.skills = ['handy', 3] with pytest.raises(TypeError) as excinfo: order.validate() err_msg = "'{}.skills' must contain elements of type str".format(cls_name) assert err_msg == str(excinfo.value)
def test_priority(self, cls_name): order = Order(id='3', lat=5.2, lng=6.1, duration=7) order.time_window = TimeWindow(start_time=dtime, end_time=dtime) order.priority = 3 with pytest.raises(TypeError) as excinfo: order.validate() err_msg = TYPE_ERR_MSG.format(cls_name, 'priority', basestring, int) assert err_msg == str(excinfo.value) order = Order(id='3', lat=5.2, lng=6.1, duration=7) order.time_window = TimeWindow(dtime, dtime) order.priority = 'F' with pytest.raises(ValueError) as excinfo: order.validate() err_msg = "'{}.{}' must be one of {}".format(cls_name, 'priority', "('L', 'M', 'H', 'C')") assert err_msg == str(excinfo.value)
def test_assigned_to(self, cls_name): order = Order(id='3', lat=5.2, lng=6.1, duration=7) order.time_window = TimeWindow(dtime, dtime) order.skills = ['handy', 'quiet'] order.assigned_to = 4 with pytest.raises(TypeError) as excinfo: order.validate() err_msg = TYPE_ERR_MSG.format(cls_name, 'assigned_to', (basestring, Driver), int) assert err_msg == str(excinfo.value) # test it accepts a string as a driver order.assigned_to = 'rantanplan' assert order.validate() is None # test it accepts a driver objects too drv = Driver(id='3', start_lat=3, start_lng=4, end_lat=4, end_lng=5) order.assigned_to = drv assert order.validate() is None
def test_scheduling_info(self, cls_name): order = Order(id='3', lat=5.2, lng=6.1, duration=7) order.time_window = TimeWindow(dtime, dtime) order.skills = ['handy', 'quiet'] order.assigned_to = 'Tom & Jerry' order.scheduling_info = 45 with pytest.raises(TypeError) as excinfo: order.validate() err_msg = TYPE_ERR_MSG.format(cls_name, 'scheduling_info', SchedulingInfo, int) assert err_msg == str(excinfo.value)
def test_duration(self, cls_name): order = Order(id='3', lat=5, lng=6, duration='7') with pytest.raises(TypeError) as excinfo: order.validate() err_msg = TYPE_ERR_MSG.format(cls_name, 'duration', (int, long), str) assert err_msg == str(excinfo.value) order = Order(id='3', lat=5, lng=6, duration=-1) with pytest.raises(ValueError) as excinfo: order.validate() err_msg = "'{}.duration' cannot be negative".format(cls_name) assert err_msg == str(excinfo.value)
def test_id(self, cls_name): order = Order(id=3, lat=5, lng=6, duration=7) with pytest.raises(TypeError) as excinfo: order.validate() err_msg = TYPE_ERR_MSG.format(cls_name, 'id', str, int) assert err_msg == str(excinfo.value) order = Order(id='', lat='5', lng='6', duration='7') with pytest.raises(ValueError) as excinfo: order.validate() err_msg = "'{}.{}' cannot be empty".format(cls_name, 'id') assert err_msg == str(excinfo.value)
def route_plan(): from decimal import Decimal d1 = datetime.datetime(year=2014, month=12, day=5, hour=8, minute=0) d2 = datetime.datetime(year=2014, month=12, day=5, hour=14, minute=0) ws = WorkShift(d1, d2) drv = Driver('123', Decimal('53.350046'), Decimal('-6.274655'), Decimal('53.341191'), Decimal('-6.260402')) drv.work_shifts.append(ws) order1 = Order('123', Decimal('53.343204'), Decimal('-6.269798'), 20) order2 = Order('456', Decimal('53.341820'), Decimal('-6.264991'), 25) routeplan = RoutePlan( request_id='4321', callback_url='https://callback.com/1234', status_callback_url='https://status.callback.com/1234') routeplan.drivers.append(drv) routeplan.orders.append(order1) routeplan.orders.append(order2) return routeplan
def test_orders_assigned_to(self, orders, drivers, routeplan): order = Order(id='new_order', lat=3, lng=4, duration=5, assigned_to="New Driver") routeplan.orders = list(orders) # add the new order with the new and unknown driver routeplan.orders.append(order) routeplan.drivers = list(drivers) with pytest.raises(OptimoValidationError) as excinfo: routeplan.validate() err_msg = ("The order with id: 'new_order' is assigned to driver with " "id: 'New Driver' that is not present in 'drivers' list") assert err_msg == str(excinfo.value)
def test_is_valid(self): order = Order(id='3', lat=5.2, lng=6.1, duration=7) order.time_window = TimeWindow(start_time=dtime, end_time=dtime) order.skills = ['handy', 'quiet'] order.assigned_to = Driver(id='Tom & Jerry', start_lat=3, start_lng=4, end_lat=5, end_lng=6) order.scheduling_info = SchedulingInfo(scheduled_at=dtime, scheduled_driver='rantanplan') assert order.validate() is None assert jsonify(order) == ( '{"assignedTo": "Tom & Jerry", "skills": ["handy", "quiet"], "tw": ' '{"timeFrom": "2014-12-05T08:00", "timeTo": "2014-12-05T08:00"}, ' '"lon": 6.1, "priority": "M", "duration": 7, "lat": 5.2, ' '"schedulingInfo": {"scheduledAt": "2014-12-05T08:00", "locked": ' 'false, "scheduledDriver": "rantanplan"}, "id": "3"}') assert OrderValidator.validate(dictify(order)) is None
def test_is_valid(self): order = Order(id='3', lat=5.2, lng=6.1, duration=7) order.time_window = TimeWindow(start_time=dtime, end_time=dtime) order.skills = ['handy', 'quiet'] order.assigned_to = Driver(id='Tom & Jerry', start_lat=3, start_lng=4, end_lat=5, end_lng=6) order.scheduling_info = SchedulingInfo(scheduled_at=dtime, scheduled_driver='rantanplan') assert order.validate() is None assert jsonify(order) == ( '{"assignedTo": "Tom & Jerry", "skills": ["handy", "quiet"], "tw": ' '{"timeFrom": "2014-12-05T08:00", "timeTo": "2014-12-05T08:00"}, ' '"lon": 6.1, "priority": "M", "duration": 7, "lat": 5.2, ' '"schedulingInfo": {"scheduledAt": "2014-12-05T08:00", "locked": ' 'false, "scheduledDriver": "rantanplan"}, "id": "3"}' ) assert OrderValidator.validate(dictify(order)) is None
def test_lng(self, cls_name): order = Order(id='3', lat=5, lng='6', duration='7') with pytest.raises(TypeError) as excinfo: order.validate() err_msg = TYPE_ERR_MSG.format(cls_name, 'lng', Number, str) assert err_msg == str(excinfo.value)
def test_skills(self, cls_name): order = Order(id='3', lat=5.2, lng=6.1, duration=7) order.time_window = TimeWindow(dtime, dtime) order.skills = 'handy' with pytest.raises(TypeError) as excinfo: order.validate() err_msg = TYPE_ERR_MSG.format(cls_name, 'skills', (list, tuple), str) assert err_msg == str(excinfo.value) order = Order(id='3', lat=5.2, lng=6.1, duration=7) order.time_window = TimeWindow(dtime, dtime) order.skills = ['handy', 3] with pytest.raises(TypeError) as excinfo: order.validate() err_msg = "'{}.skills' must contain elements of type str".format( cls_name) assert err_msg == str(excinfo.value)