Пример #1
0
def test_trip_id(client):
    """should only be present for trip events"""
    register_device()

    # trip_ip should be present
    url = url_for('v0_4_0.vehicle_event', device_id=REGISTERED_DEVICE_ID)
    event = {'event_type': 'trip_start'}
    kwargs = get_request(generate_payload(event))
    response = client.post(
        url,
        **kwargs,
    )
    assert response.status == '400 BAD REQUEST'
    expected = html.escape(json.dumps({'missing_param': ['trip_id']}))
    assert expected.encode() in response.data

    # trip_ip should not be present
    event = {'event_type': 'register', 'trip_id': str(uuid.uuid4())}
    kwargs = get_request(generate_payload(event))
    response = client.post(
        url,
        **kwargs,
    )
    assert response.status == '400 BAD REQUEST'
    expected = html.escape(json.dumps({'bad_param': ['trip_id']}))
    assert expected.encode() in response.data
def test_post(client):
    url = url_for('v0_4_0.vehicle_register')
    response = client.post(url, **get_request(generate_payload()))
    assert response.status == '201 CREATED'
    assert response.data == b''

    # Try with minimal arguments
    data = generate_payload()
    del data['year']
    del data['mfgr']
    del data['model']
    url = url_for('v0_4_0.vehicle_register')
    response = client.post(url, **get_request(data))
    assert response.status == '201 CREATED'
    assert response.data == b''
def test_unregistred_device(client):
    url = url_for('v0_4_0.vehicle_update', device_id=REGISTERED_DEVICE_ID)
    kwargs = get_request(generate_payload())
    response = client.post(
        url,
        **kwargs,
    )
    assert response.status == '404 NOT FOUND'
Пример #4
0
def test_unregistered_device(client):
    url = url_for('v0_4_0.vehicle_event', device_id=REGISTERED_DEVICE_ID)
    event = {'event_type': 'register'}
    kwargs = get_request(generate_payload(event))
    response = client.post(
        url,
        **kwargs,
    )
    assert response.status == '404 NOT FOUND'
def test_unregistered_device(client):
    url = url_for('v1_0_0.vehicle_event', device_id=REGISTERED_DEVICE_ID)
    event = {'vehicle_state': 'available', 'event_types': ['located']}
    kwargs = get_request(generate_payload(event))
    response = client.post(
        url,
        **kwargs,
    )
    assert response.status == '404 NOT FOUND'
def test_valid_post(client):
    register_device()
    url = url_for('v0_4_0.vehicle_update', device_id=REGISTERED_DEVICE_ID)
    response = client.post(
        url,
        **get_request(generate_payload()),
    )
    assert response.status == '201 CREATED'
    assert response.data == b''
Пример #7
0
def test_valid_post(client, event_args):
    register_device()
    url = url_for('v0_4_0.vehicle_event', device_id=REGISTERED_DEVICE_ID)
    kwargs = get_request(generate_payload(event_args))
    response = client.post(
        url,
        **kwargs,
    )
    assert response.status == '201 CREATED'
    assert response.data == b''
def test_wrong_type(client):
    url = url_for('v1_0_0.vehicle_register')
    data = generate_payload()
    data['device_id'] = 346
    kwargs = get_request(data)
    response = client.post(
        url,
        **kwargs,
    )
    assert response.status == '400 BAD REQUEST'
    expected = html.escape(json.dumps({'bad_param': ['device_id']}))
    assert expected.encode() in response.data
Пример #9
0
def test_valid_post(client):
    register_device()

    url = url_for('v0_4_0.vehicle_telemetry')
    telemetries = [generate_telemetry() for _ in range(2)]
    kwargs = get_request(generate_payload(telemetries))
    response = client.post(
        url,
        **kwargs,
    )
    assert response.status == '201 CREATED'
    assert response.data == b'{"result": 2, "failures": []}'
def test_unknown_field(client):
    url = url_for('v0_4_0.vehicle_register')
    data = generate_payload()
    data['unknown_field'] = 'nope'
    kwargs = get_request(data)
    response = client.post(
        url,
        **kwargs,
    )
    assert response.status == '400 BAD REQUEST'
    expected = html.escape(json.dumps({'bad_param': ['unknown_field']}))
    assert expected.encode() in response.data
def test_wrong_type(client):
    register_device()
    url = url_for('v0_4_0.vehicle_update', device_id=REGISTERED_DEVICE_ID)
    data = {'vehicle_id': 346}
    kwargs = get_request(data)
    response = client.post(
        url,
        **kwargs,
    )
    assert response.status == '400 BAD REQUEST'
    expected = html.escape(json.dumps({'bad_param': ['vehicle_id']}))
    assert expected.encode() in response.data
Пример #12
0
def test_event_type_reason(client):
    """required and allowed vaules depends on event_type"""
    register_device()

    # event_type_reason shouldn't be present
    url = url_for('v0_4_0.vehicle_event', device_id=REGISTERED_DEVICE_ID)
    event = {'event_type': 'register', 'event_type_reason': 'compliance'}
    kwargs = get_request(generate_payload(event))
    response = client.post(
        url,
        **kwargs,
    )
    assert response.status == '400 BAD REQUEST'
    expected = html.escape(json.dumps({'bad_param': ['event_type_reason']}))
    assert expected.encode() in response.data

    # event_type_reason has a wrong value
    event = {'event_type': 'deregister', 'event_type_reason': 'compliance'}
    kwargs = get_request(generate_payload(event))
    response = client.post(
        url,
        **kwargs,
    )
    assert response.status == '400 BAD REQUEST'
    expected = html.escape(json.dumps({'bad_param': ['event_type_reason']}))
    assert expected.encode() in response.data

    # event_type_reason should be present
    # TODO confirm if it's true
    event = {'event_type': 'deregister'}
    kwargs = get_request(generate_payload(event))
    response = client.post(
        url,
        **kwargs,
    )
    assert response.status == '400 BAD REQUEST'
    expected = html.escape(json.dumps({'missing_param':
                                       ['event_type_reason']}))
    assert expected.encode() in response.data
def test_unknown_field(client):
    register_device()
    url = url_for('v1_0_0.vehicle_update', device_id=REGISTERED_DEVICE_ID)
    data = generate_payload()
    data['unknown_field'] = 'nope'
    kwargs = get_request(data)
    response = client.post(
        url,
        **kwargs,
    )
    assert response.status == '400 BAD REQUEST'
    expected = html.escape(json.dumps({'bad_param': ['unknown_field']}))
    assert expected.encode() in response.data
Пример #14
0
def test_all_invalid(client):
    register_device()

    bad_telemetry = generate_telemetry()
    del bad_telemetry['device_id']
    url = url_for('v0_4_0.vehicle_telemetry')
    telemetries = [bad_telemetry, bad_telemetry]
    kwargs = get_request(generate_payload(telemetries))
    response = client.post(
        url,
        **kwargs,
    )
    assert response.status == '400 BAD REQUEST'
def test_already_registred(client):
    register_device()

    data = generate_payload()
    url = url_for('v0_4_0.vehicle_register')
    data['device_id'] = REGISTERED_DEVICE_ID
    kwargs = get_request(data)
    response = client.post(
        url,
        **kwargs,
    )
    assert response.status == '409 CONFLICT'
    assert b'' in response.data
def test_workflow(client, vehicle_state, event_type):
    register_device()

    # event_type_reason shouldn't be present
    url = url_for('v1_0_0.vehicle_event', device_id=REGISTERED_DEVICE_ID)
    event = {'vehicle_state': vehicle_state, 'event_types': [event_type]}
    if 'trip' in event_type:
        event['trip_id'] = str(uuid.uuid4())
    kwargs = get_request(generate_payload(event))
    response = client.post(
        url,
        **kwargs,
    )
    assert response.status == '201 CREATED'
Пример #17
0
def test_device_id(client):
    register_device()
    url = url_for('v0_4_0.vehicle_event', device_id=REGISTERED_DEVICE_ID)
    event = {'event_type': 'register'}
    data = generate_payload(event)
    data['telemetry']['device_id'] = str(uuid.uuid4())
    kwargs = get_request(data)
    response = client.post(
        url,
        **kwargs,
    )
    assert response.status == '400 BAD REQUEST'
    expected = html.escape(json.dumps({'bad_param': ['device_id']}))
    assert expected.encode() in response.data
Пример #18
0
def test_query_parameter_resolver_with_raises_argument_not_supported():
    @winter.route_get()
    def method(invalid_query_param: int):
        return invalid_query_param

    resolver = QueryParameterArgumentResolver()
    request = get_request('invalid_query_param=1')

    argument = method.get_argument('invalid_query_param')

    with pytest.raises(ArgumentNotSupported) as exception:
        resolver.resolve_argument(argument, request, {})

    assert str(exception.value
               ) == 'Unable to resolve argument invalid_query_param: int'
Пример #19
0
def test_query_parameter_resolver_with_raises_parse_error(
        query_string, expected_exception_message):
    @winter.route_get('{?query_param}')
    def method(query_param: int):
        return query_param

    resolver = QueryParameterArgumentResolver()

    argument = method.get_argument('query_param')
    request = get_request(query_string)

    with pytest.raises(decoder.JSONDecodeException) as exception:
        resolver.resolve_argument(argument, request, {})

    assert str(exception.value) == expected_exception_message
Пример #20
0
def test_query_parameter_resolver(argument_name, query_string, expected_value):
    @winter.route_get('{?without_default,optional,with_default,array*}')
    def method(
        without_default: int,
        optional: Optional[str],
        array: List[int],
        with_default: str = 'default',
    ):
        return without_default, optional, array, with_default

    resolver = QueryParameterArgumentResolver()

    argument = method.get_argument(argument_name)
    request = get_request(query_string)
    assert resolver.resolve_argument(argument, request, {}) == expected_value
def test_wrong_type(client):
    register_device()

    url = url_for('v1_0_0.vehicle_event', device_id=REGISTERED_DEVICE_ID)
    event = {'vehicle_state': 'available', 'event_types': ['located']}
    data = generate_payload(event)
    data['telemetry'] = 346
    kwargs = get_request(data)
    response = client.post(
        url,
        **kwargs,
    )
    assert response.status == '400 BAD REQUEST'
    expected = html.escape(json.dumps({'bad_param': ['telemetry']}))
    assert expected.encode() in response.data
Пример #22
0
def test_missing_required(client):
    register_device()

    url = url_for('v0_4_0.vehicle_event', device_id=REGISTERED_DEVICE_ID)
    event = {'event_type': 'register'}
    data = generate_payload(event)
    del data['timestamp']
    kwargs = get_request(data)
    response = client.post(
        url,
        **kwargs,
    )
    assert response.status == '400 BAD REQUEST'
    expected = html.escape(json.dumps({'missing_param': ['timestamp']}))
    assert expected.encode() in response.data
Пример #23
0
def test_orphan_map_query_parameter_fails():
    @winter.route_get('{?x,y}')
    @winter.map_query_parameter('x', to='x_param')
    @winter.map_query_parameter('y', to='y_param')
    def method(x_param: int, y_param: int = 1):
        return 0

    resolver = QueryParameterArgumentResolver()

    argument = method.get_argument('x_param')
    request = get_request('?x=1')

    with pytest.raises(decoder.JSONDecodeException) as exception:
        resolver.resolve_argument(argument, request, {})

    assert str(exception.value) == 'Missing required query parameter "x"'
Пример #24
0
def test_unregistered_device(client):
    register_device()

    url = url_for('v0_4_0.vehicle_telemetry')
    good_telemetry = generate_telemetry()
    bad_telemetry = generate_telemetry()
    bad_telemetry['device_id'] = str(uuid.uuid4())
    telemetries = [good_telemetry, bad_telemetry]
    kwargs = get_request(generate_payload(telemetries))
    response = client.post(
        url,
        **kwargs,
    )
    assert response.status == '201 CREATED'
    response_data = json.loads(response.data)
    assert response_data['result'] == 1
    assert response_data['failures'] == [bad_telemetry]
Пример #25
0
def test_partially_invalid(client):
    """One telemetry is ok, the other is invalid"""
    register_device()

    good_telemetry = generate_telemetry()
    bad_telemetry = generate_telemetry()
    del bad_telemetry['device_id']
    url = url_for('v0_4_0.vehicle_telemetry')
    telemetries = [good_telemetry, bad_telemetry]
    kwargs = get_request(generate_payload(telemetries))
    response = client.post(
        url,
        **kwargs,
    )
    assert response.status == '201 CREATED'
    response_data = json.loads(response.data)
    assert response_data['result'] == 1
    assert response_data['failures'] == [bad_telemetry]