Exemplo n.º 1
0
def test_add_mobile_user_prompts_legacy(app, client, session):
    response = create_mobile_user(app, client, session)
    response_json = response.get_json()
    uuid = response_json['results']['uuid']

    prompt_responses = [{
        'answer': ['Work'],
        'displayed_at': '2018-04-25T18:02:35-04:00',
        'latitude': '45.5396452179',
        'longitude': '-73.6304455045',
        'prompt_num': 0,
        'recorded_at': '2018-04-25T18:04:37-04:00',
        'uuid': '53add9eb-d149-37a9-55e9-039df262b88e'
    }, {
        'answer': ['Indifferent'],
        'displayed_at': '2018-04-25T18:02:35-04:00',
        'latitude': '45.5396452179',
        'longitude': '-73.6304455045',
        'prompt_num': 1,
        'recorded_at': '2018-04-25T18:04:37-04:00',
        'uuid': '53add9eb-d149-37a9-55e9-039df262b88e'
    }, {
        'answer': ['Home'],
        'displayed_at': '2018-04-30T05:13:23-04:00',
        'latitude': '45.5415987234',
        'longitude': '-73.5710220311',
        'prompt_num': 0,
        'recorded_at': '2018-04-30T05:13:32-04:00',
        'uuid': '610e66d8-8505-c081-c55c-5f6274e50fdb'
    }, {
        'answer': ['Great'],
        'displayed_at': '2018-04-30T05:13:23-04:00',
        'latitude': '45.5415987234',
        'longitude': '-73.5710220311',
        'prompt_num': 1,
        'recorded_at': '2018-04-30T05:13:32-04:00',
        'uuid': '610e66d8-8505-c081-c55c-5f6274e50fdb'
    }]

    test_data = {
        'uuid': uuid,
        'prompts': prompt_responses
    }
    url = url_for('api.update_v1')
    r = client.post(url, data=json.dumps(test_data), content_type='application/json')
    assert r.status_code == 201

    # check that a deprecation warning is provided for v1 api
    assert 'Warning (deprecated):' in r.get_json()['status']

    # check that the same number of cancelled prompts with all provided information are returned
    # from database with same attributes and order as provided
    user = database.user.find_by_uuid(uuid)
    assert user.prompt_responses.count() == 4

    for idx, db_prompt_response in enumerate(user.prompt_responses):
        prompt_responses[idx]['prompt_uuid'] = prompt_responses[idx].pop('uuid')
        prompt_responses[idx]['response'] = prompt_responses[idx].pop('answer')
        assert_request_data_matches_db_record(prompt_responses[idx], db_prompt_response, api_version=1)
Exemplo n.º 2
0
def test_empty_update_is_200(app, client, session):
    response = create_mobile_user(app, client, session)
    response_json = response.get_json()
    uuid = response_json['results']['uuid']

    test_data = {'uuid': uuid}
    url = url_for('api.update_v1')
    r = client.post(url, data=json.dumps(test_data), content_type='application/json')
    assert r.status_code == 200
Exemplo n.º 3
0
def test_edit_mobile_user_prompts(app, client, session):
    response = create_mobile_user(app, client, session)
    response_json = response.get_json()
    uuid = response_json['results']['uuid']

    prompt_responses = [{
        'answer': ['Work'],
        'displayedAt': '2018-04-25T18:02:35-04:00',
        'latitude': '45.5396452179',
        'longitude': '-73.6304455045',
        'promptNum': 0,
        'recordedAt': '2018-04-25T18:04:37-04:00',
        'uuid': '72be2e8e-7ee8-f1b0-f175-84bf034111d5'
    }, {
        'answer': ['Indifferent'],
        'displayedAt': '2018-04-25T18:02:35-04:00',
        'latitude': '45.5396452179',
        'longitude': '-73.6304455045',
        'promptNum': 1,
        'recordedAt': '2018-04-25T18:04:37-04:00',
        'uuid': '72be2e8e-7ee8-f1b0-f175-84bf034111d5'
    }]
    prompts_test_data = {'uuid': uuid, 'prompts': prompt_responses}
    url = url_for('api.update_v1')
    r = client.post(url, data=json.dumps(prompts_test_data), content_type='application/json')
    assert r.status_code == 201
    user = database.user.find_by_uuid(uuid)
    assert user.prompt_responses.count() == 2

    edited_prompt_responses = [{
        'answer': ['Home'],
        'displayedAt': '2018-04-25T18:02:35-04:00',
        'latitude': '45.5743928341',
        'longitude': '-73.6393328475',
        'promptNum': 0,
        'recordedAt': '2018-04-25T18:04:42-04:00',
        'uuid': '72be2e8e-7ee8-f1b0-f175-84bf034111d5'
    }, {
        'answer': ['Great'],
        'displayedAt': '2018-04-25T18:02:35-04:00',
        'latitude': '45.5743928341',
        'longitude': '-73.6393328475',
        'promptNum': 1,
        'recordedAt': '2018-04-25T18:04:42-04:00',
        'uuid': '72be2e8e-7ee8-f1b0-f175-84bf034111d5'
    }]
    edited_prompts_test_data = {'uuid': uuid, 'prompts': edited_prompt_responses}
    url = url_for('api.update_v1')
    r = client.post(url, data=json.dumps(edited_prompts_test_data), content_type='application/json')
    assert r.status_code == 201
    user = database.user.find_by_uuid(uuid)
    assert user.prompt_responses.count() == 2

    for idx, db_prompt_response in enumerate(user.prompt_responses):
        edited_prompt_responses[idx]['prompt_uuid'] = edited_prompt_responses[idx].pop('uuid')
        edited_prompt_responses[idx]['response'] = edited_prompt_responses[idx].pop('answer')
        assert_request_data_matches_db_record(edited_prompt_responses[idx], db_prompt_response, api_version=2)
Exemplo n.º 4
0
def test_add_mobile_user_coordinates(app, client, session):
    response = create_mobile_user(app, client, session)
    response_json = response.get_json()
    uuid = response_json['results']['uuid']

    coordinates = [{
        'latitude': '45.5088872928',
        'longitude': '-73.6289835571',
        'speed': 17.37400388436377,
        'hAccuracy': 16,
        'vAccuracy': 25,
        'accelerationX': 0.10268011979651681,
        'accelerationY': 0.0158970260262572,
        'accelerationZ': 0.7714920319430699,
        'modeDetected': 1,
        'pointType': 8,
        'timestamp': '2018-04-24T00:25:13-04:00'
    }, {
        'latitude': '45.5302975702',
        'longitude': '-73.6479925378',
        'speed': 14.250232900155211,
        'hAccuracy': 9,
        'vAccuracy': 3,
        'accelerationX': 0.1880549662797817,
        'accelerationY': 0.4367783439516336,
        'accelerationZ': 0.04315788616135474,
        'modeDetected': 5,
        'pointType': 7,
        'timestamp': '2018-04-24T00:25:28-04:00'
    }]

    # submit coordinates to server
    test_data = {
        'uuid': uuid,
        'coordinates': coordinates
    }
    url = url_for('api.update_v1')
    r = client.post(url, data=json.dumps(test_data), content_type='application/json')
    assert r.status_code == 201

    # check that a deprecation warning is provided for v1 api
    assert 'Warning (deprecated):' in r.get_json()['status']

    # check that the same number of coordinates with all provided information are returned
    # from database with same attributes and order as provided
    user = database.user.find_by_uuid(uuid)
    assert user.mobile_coordinates.count() == 2

    for idx, db_coordinate in enumerate(user.mobile_coordinates):
        assert_request_data_matches_db_record(coordinates[idx], db_coordinate, api_version=2)
Exemplo n.º 5
0
def test_upgrade_mobile_user_cancelled_prompts(app, client, session):
    response = create_mobile_user(app, client, session)
    response_json = response.get_json()
    uuid = response_json['results']['uuid']

    # send a cancelled prompt to be upgraded in first request
    cancelled_prompts = [{
        'cancelledAt': None,
        'displayedAt': '2018-04-25T13:52:27-04:00',
        'isTravelling': None,
        'latitude': '45.5329431049',
        'longitude': '-73.5435169592',
        'uuid': '72be2e8e-7ee8-f1b0-f175-84bf034111d5'
    }]
    cancelled_prompt_test_data = {'uuid': uuid, 'cancelledPrompts': cancelled_prompts}
    url = url_for('api.update_v1')
    r = client.post(url, data=json.dumps(cancelled_prompt_test_data), content_type='application/json')
    user = database.user.find_by_uuid(uuid)
    assert r.status_code == 201
    assert user.cancelled_prompts.count() == 1

    # send a subsequent prompt answer for cancelled prompt in second request
    prompt_responses = [{
        'answer': ['Work'],
        'displayedAt': '2018-04-25T18:02:35-04:00',
        'latitude': '45.5396452179',
        'longitude': '-73.6304455045',
        'promptNum': 0,
        'recordedAt': '2018-04-25T18:04:37-04:00',
        'uuid': '72be2e8e-7ee8-f1b0-f175-84bf034111d5'
    }, {
        'answer': ['Indifferent'],
        'displayedAt': '2018-04-25T18:02:35-04:00',
        'latitude': '45.5396452179',
        'longitude': '-73.6304455045',
        'promptNum': 1,
        'recordedAt': '2018-04-25T18:04:37-04:00',
        'uuid': '72be2e8e-7ee8-f1b0-f175-84bf034111d5'
    }]
    prompts_test_data = {'uuid': uuid, 'prompts': prompt_responses}
    url = url_for('api.update_v1')
    r = client.post(url, data=json.dumps(prompts_test_data), content_type='application/json')
    assert r.status_code == 201
    user = database.user.find_by_uuid(uuid)
    assert user.cancelled_prompts.count() == 0
    assert user.prompt_responses.count() == 2
Exemplo n.º 6
0
def test_upsert_mobile_user_survey_response_legacy(app, client, session):
    response = create_mobile_user(app, client, session)
    response_json = response.get_json()
    uuid = response_json['results']['uuid']
    schema = response_json['results']['survey']

    test_data = {
        'uuid': uuid,
        'survey': {
            'Age': 0,
            'Email': '*****@*****.**',
            'Gender': 0,
            'location_home': {'latitude': '16.1108045', 'longitude': '150.941385'},
            'location_study': {'latitude': '34.106815', 'longitude': '110.646193'},
            'location_work': {'latitude': '15.238540', 'longitude': '-100.787531'},
            'member_type': 2,
            'survey_textbox': 'Debitis corrupti iste corporis earum iure unde repudiandae.',
            'survey_checkboxes': ['Checkbox 1', 'Checkbox 2'],
            'survey_dropdown': ['A'],
            'survey_map': {'latitude': '49.9621115', 'longitude': '158.644588'},
            'survey_number': 6057,
            'travel_mode_alt_study': 6,
            'travel_mode_alt_work': 7,
            'travel_mode_study': 0,
            'travel_mode_work': 3
        }
    }

    url = url_for('api.update_v1')
    r = client.post(url, data=json.dumps(test_data), content_type='application/json')
    assert r.status_code == 201

    user = database.user.find_by_uuid(uuid)
    survey_response = user.survey_response.one().response

    # check that non-hardcoded questions return the same values from
    # database as provided in the request
    for key, value in test_data['survey'].items():        
        for question in default_stack:
            if question['colName'] == key:
                break
        else:
            assert (survey_response[key] == value or [survey_response[key]] == value)
Exemplo n.º 7
0
def test_error_add_prompt_missing_uuid(app, client, session):
    response = create_mobile_user(app, client, session)
    response_json = response.get_json()
    uuid = response_json['results']['uuid']

    cancelled_prompts = [{
        'cancelled_at': None,
        'displayed_at': '2018-04-25T13:52:27-04:00',
        'is_travelling': None,
        'latitude': '45.5329431049',
        'longitude': '-73.5435169592',
    }]

    test_data = {
        'uuid': uuid,
        'cancelledPrompts': cancelled_prompts
    }
    url = url_for('api.update_v1')
    r = client.post(url, data=json.dumps(test_data), content_type='application/json')
    assert r.status_code == 400
Exemplo n.º 8
0
def test_add_mobile_user_cancelled_prompts_legacy(app, client, session):
    response = create_mobile_user(app, client, session)
    response_json = response.get_json()
    uuid = response_json['results']['uuid']

    cancelled_prompts = [{
        'cancelled_at': None,
        'displayed_at': '2018-04-25T13:52:27-04:00',
        'is_travelling': None,
        'latitude': '45.5329431049',
        'longitude': '-73.5435169592',
        'uuid': '72be2e8e-7ee8-f1b0-f175-84bf034111d5'
    }, {
        'cancelled_at': '2018-04-30T09:16:40-04:00',
        'displayed_at': '2018-04-30T09:16:40-04:00',
        'is_travelling': False,
        'latitude': '45.4603680276',
        'longitude': '-73.5162924098',
        'uuid': 'ef3a2924-b760-e84d-514c-7f73138ddbd7'
    }]

    test_data = {
        'uuid': uuid,
        'cancelledPrompts': cancelled_prompts  # this had an inconsistent camelcase key in v1 of API
    }
    url = url_for('api.update_v1')
    r = client.post(url, data=json.dumps(test_data), content_type='application/json')
    assert r.status_code == 201

    # check that a deprecation warning is provided for v1 api
    assert 'Warning (deprecated):' in r.get_json()['status']

    # check that the same number of cancelled prompts with all provided information are returned
    # from database with same attributes and order as provided
    user = database.user.find_by_uuid(uuid)
    assert user.cancelled_prompts.count() == 2

    for idx, db_cancelled_prompt in enumerate(user.cancelled_prompts):
        cancelled_prompts[idx]['prompt_uuid'] = cancelled_prompts[idx].pop('uuid')
        assert_request_data_matches_db_record(cancelled_prompts[idx], db_cancelled_prompt, api_version=1)