예제 #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_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''
예제 #3
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''
예제 #4
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_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
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
예제 #7
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_unknown_field(client):
    register_device()
    url = url_for('v0_4_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
예제 #9
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
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'
예제 #11
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
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
예제 #13
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]
예제 #14
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]
예제 #15
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