def test_deletion_keys_and_auth(create_instance, mock_rabbit): """ We start by creating the user, it's easier than using a fixture, then we delete the auth and the key """ # first, test that with an unknown user, we get a 404 _, status = api_delete('/v0/users/75/keys/1', check=False, no_json=True) assert status == 404 user = {'login': '******', 'email': '*****@*****.**'} resp_user = api_post('/v0/users/', data=json.dumps(user), content_type='application/json') api_post('/v0/users/{}/keys'.format(resp_user['id']), data=json.dumps({'app_name': 'myApp'}), content_type='application/json') auth = {'instance_id': create_instance, 'api_id': 1} api_post('/v0/users/{}/authorizations'.format(resp_user['id']), data=json.dumps(auth), content_type='application/json') resp = api_get('/v0/users/{}'.format(resp_user['id'])) resp_key = api_delete('/v0/users/{user_id}/keys/{key_id}'.format( user_id=resp['id'], key_id=resp['keys'][0]['id'])) assert len(resp_key['keys']) == 0 resp_auth = api_delete('/v0/users/{}/authorizations/'.format(resp['id']), data=json.dumps(auth), content_type='application/json') assert len(resp_auth['authorizations']) == 0 assert mock_rabbit.called
def test_delete_instance_by_name(create_instance): resp = api_delete('/v0/instances/fr') assert resp['id'] == create_instance assert resp['discarded'] == True resp = api_get('/v0/instances/') assert resp == [] # delete by name is not idempotent resp, status = api_delete('/v0/instances/fr', check=False) assert status == 404
def test_external_service_delete(default_external_service_config): """ Test that a 'deleted' service isn't returned when querying all services, and that its 'discarded' parameter is set to True """ resp = api_get('/v0/external_services') assert 'external_services' in resp assert len(resp['external_services']) == 4 _, status_code = api_delete('v0/external_services/forseti_free_floatings', check=False, no_json=True) assert status_code == 204 resp = api_get('/v0/external_services') assert 'external_services' in resp assert len(resp['external_services']) == 3 resp = api_get('/v0/external_services/forseti_free_floatings') assert 'external_services' in resp assert len(resp['external_services']) == 1 assert resp['external_services'][0]['discarded'] resp = api_get('/v0/external_services/Timeo_Horizon') assert 'external_services' in resp assert len(resp['external_services']) == 1 assert not resp['external_services'][0]['discarded']
def test_autocomplete_parameters_methods(): resp_get = api_get('/v1/autocomplete_parameters') assert 'autocomplete_parameters' in resp_get initial_num = len(resp_get['autocomplete_parameters']) assert initial_num == 0 autocomplete_data = { 'street': 'OSM', 'name': 'france', 'address': 'BANO', 'admin': 'COSMOGONY', 'poi': 'OSM', } resp_post, status_post = api_post( '/v1/autocomplete_parameters', data=json.dumps(autocomplete_data), content_type='application/json', check=False, ) assert status_post == 201 assert 'autocomplete_parameters' in resp_post assert len(resp_post['autocomplete_parameters']) == 1 for key in autocomplete_data.keys(): assert resp_post['autocomplete_parameters'][0][ key] == autocomplete_data[key] autocomplete_name = resp_post['autocomplete_parameters'][0]['name'] resp_get = api_get('/v1/autocomplete_parameters') assert 'autocomplete_parameters' in resp_get assert len(resp_get['autocomplete_parameters']) == initial_num + 1 assert resp_get['autocomplete_parameters'][0]['name'] == autocomplete_name for key in autocomplete_data.keys(): assert resp_get['autocomplete_parameters'][0][ key] == autocomplete_data[key] autocomplete_data_update = {'address': 'OA'} resp_put = api_put( '/v1/autocomplete_parameters/{}'.format(autocomplete_name), data=json.dumps(autocomplete_data_update), content_type='application/json', ) assert 'autocomplete_parameters' in resp_put assert len(resp_put['autocomplete_parameters']) == 1 resp_get = api_get('/v1/autocomplete_parameters') assert 'autocomplete_parameters' in resp_get assert len(resp_get['autocomplete_parameters']) == initial_num + 1 assert resp_get['autocomplete_parameters'][0]['name'] == autocomplete_name assert resp_get['autocomplete_parameters'][0][ 'address'] == autocomplete_data_update['address'] resp_delete, status_delete = api_delete( '/v1/autocomplete_parameters/{}'.format(autocomplete_name), check=False, no_json=True) assert status_delete == 204 resp_get = api_get('/v1/autocomplete_parameters') assert 'autocomplete_parameters' in resp_get assert len(resp_get['autocomplete_parameters']) == initial_num
def test_delete_poi_type_json(create_poi_type_json_obj): resp, status_code = api_delete('/v0/instances/fr/poi_types', check=False, no_json=True) assert resp == '' assert status_code == 204
def test_delete_instance_by_id(create_instance): resp = api_delete('/v0/instances/{}'.format(create_instance)) assert resp['id'] == create_instance assert resp['discarded'] == True # check response to get with different use cases resp = api_get('/v0/instances/') assert resp == [] resp = api_get('/v0/instances/fr') assert resp == [] resp = api_get('/v0/instances/{}'.format(create_instance)) assert resp == [] # delete by id is idempotent resp, status = api_delete('/v0/instances/{}'.format(create_instance), check=False) assert status == 200
def test_end_points_methods(): resp_get = api_get('/v1/end_points') assert 'end_points' in resp_get initial_num = len(resp_get['end_points']) endpoint_data = {'name': 'tyr_v1', 'hostnames': ['host_v1']} resp_post, status_post = api_post( '/v1/end_points', data=json.dumps(endpoint_data), content_type='application/json', check=False ) assert status_post == 201 assert 'end_point' in resp_post assert len(resp_post['end_point']) == 1 assert resp_post['end_point'][0]['name'] == endpoint_data['name'] endpoint_id = resp_post['end_point'][0]['id'] resp_get = api_get('/v1/end_points') assert 'end_points' in resp_get assert len(resp_get['end_points']) == initial_num + 1 endpoint_data_update = {'name': 'Tyr_v1_update'} resp_put = api_put( '/v1/end_points/{}'.format(endpoint_id), data=json.dumps(endpoint_data_update), content_type='application/json', ) assert 'end_point' in resp_put assert len(resp_put['end_point']) == 1 assert resp_put['end_point'][0]['name'] == endpoint_data_update['name'] resp_delete, status_delete = api_delete('/v1/end_points/{}'.format(endpoint_id), check=False, no_json=True) assert status_delete == 204 resp_get = api_get('/v1/end_points') assert 'end_points' in resp_get assert len(resp_get['end_points']) == initial_num
def test_delete_poi_type_for_two_instances(create_instance, create_tyr_update_jobs): resp = api_get('/v0/instances') assert len(resp) == 2 resp = api_get('/v0/jobs/{}'.format(create_instance)) for dataset in resp.values()[0][0]['data_sets']: assert dataset['type'] == 'poi' resp = api_get('/v0/jobs/{}'.format(create_tyr_update_jobs)) assert len(resp.values()[0]) == 2 resp = api_delete('/v0/instances/{}/actions/delete_dataset/poi'.format( create_tyr_update_jobs)) assert resp['action'] == 'All poi datasets deleted for instance {}'.format( create_tyr_update_jobs) resp = api_get('/v0/jobs/{}'.format(create_tyr_update_jobs)) assert len(resp.values()[0]) == 1 for dataset in resp.values()[0][0]['data_sets']: assert dataset['type'] != 'poi' resp = api_get('/v0/jobs/{}'.format(create_instance)) assert len(resp.values()[0]) == 1 for dataset in resp.values()[0][0]['data_sets']: assert dataset['type'] == 'poi'
def test_delete_user(create_multiple_users, mock_rabbit): """ delete a user """ resp, status = api_delete('/v0/users/{}'.format( create_multiple_users['user1']), check=False, no_json=True) assert status == 204 resp, status = api_get('/v0/users/{}'.format( create_multiple_users['user1']), check=False) assert status == 404 resp = api_get('/v0/users/') assert len(resp) == 1 u = resp[0] assert u['id'] == create_multiple_users['user2'] assert u['login'] == 'foodefault' assert u['email'] == '*****@*****.**' assert u['end_point']['name'] == 'navitia.io' assert u['billing_plan']['name'] == 'nav_ctp' assert mock_rabbit.call_count == 1 assert_default_scop_shape(u)
def test_delete_for_wrong_data_set_type(create_instance): resp, status_code = api_delete( '/v0/instances/fr_instance/actions/delete_dataset/toto', check=False) assert resp[ 'action'] == 'No toto dataset to be deleted for instance fr_instance' assert status_code == 200
def test_users_methods(): user_data = {'login': '******', 'email': '*****@*****.**'} resp_post = api_post('/v1/users', data=json.dumps(user_data), content_type='application/json') assert 'user' in resp_post assert resp_post['user']['login'] == 'user1' assert resp_post['user']['email'] == '*****@*****.**' user_id = resp_post['user']['id'] user_data_update = {'type': 'super_user'} resp_put = api_put('/v1/users/{}'.format(user_id), data=json.dumps(user_data_update), content_type='application/json') assert 'user' in resp_put assert resp_put['user']['login'] == 'user1' assert resp_put['user']['type'] == 'super_user' resp_delete, status_delete = api_delete('/v1/users/{}'.format(user_id), check=False, no_json=True) assert status_delete == 204 resp_get, status_get = api_get('/v1/users/{}'.format(user_id), check=False) assert status_get == 404
def test_keys_methods(create_5_users): user_id = create_5_users resp_post = api_post( '/v1/users/{}/keys'.format(create_5_users), data=json.dumps({ 'app_name': 'testApp', 'valid_until': '2020-01-01' }), content_type='application/json', ) assert 'keys' in resp_post['user'] assert len(resp_post['user']['keys']) == 1 assert resp_post['user']['keys'][0]['app_name'] == 'testApp' assert resp_post['user']['keys'][0]['valid_until'] == '2020-01-01' key_id = resp_post['user']['keys'][0]['id'] resp_put = api_put( '/v1/users/{}/keys/{}'.format(user_id, key_id), data=json.dumps({ 'app_name': 'testApp', 'valid_until': '2021-01-01' }), content_type='application/json', ) assert len(resp_put['user']['keys']) == 1 assert resp_put['user']['keys'][0]['app_name'] == 'testApp' assert resp_put['user']['keys'][0]['valid_until'] == '2021-01-01' resp_delete = api_delete('/v1/users/{}/keys/{}'.format(user_id, key_id)) assert len(resp_delete['user']['keys']) == 0
def test_migrate_poi_to_osm_wrong_instance(create_instance): resp, status_code = api_delete( '/v0/instances/wrong_instance/actions/migrate_from_poi_to_osm', check=False) assert resp['action'] == 'No instance found for : wrong_instance' assert status_code == 404
def test_purge_old_jobs_of_multi_instance(): """ We should delete jobs, data_sets as well as metrics of all instances including discarded = True """ app.config['JOB_MAX_PERIOD_TO_KEEP'] = 1 instance_name, backup_dir = init_test() create_jobs_with_same_datasets(instance_name, backup_dir) create_jobs_with_same_datasets('fr-discarded', backup_dir) instances_resp = api_get('/v0/instances') assert len(instances_resp) == 2 # Delete the second instance (discarded = True) instances_resp = api_delete('/v0/instances/fr-discarded') assert instances_resp['discarded'] is True jobs_resp = api_get('/v0/jobs/fr-discarded') assert len(jobs_resp['jobs']) == 3 jobs_resp = api_get('/v0/jobs/fr') assert len(jobs_resp['jobs']) == 3 tasks.purge_jobs() jobs_resp = api_get('/v0/jobs/fr-discarded') assert len(jobs_resp['jobs']) == 1 jobs_resp = api_get('/v0/jobs/fr') assert len(jobs_resp['jobs']) == 1
def test_full_registration_then_deletion(create_instance, mock_rabbit): """ we create a user, then a token for him, and finaly we give to him some authorization after that we delete him """ user = {'login': '******', 'email': '*****@*****.**'} resp_user = api_post('/v0/users/', data=json.dumps(user), content_type='application/json') resp_key = api_post('/v0/users/{}/keys'.format(resp_user['id']), data=json.dumps({'app_name': 'myApp'}), content_type='application/json') auth = {'instance_id': create_instance, 'api_id': 1} resp_auth = api_post('/v0/users/{}/authorizations'.format(resp_user['id']), data=json.dumps(auth), content_type='application/json') resp = api_get('/v0/users/{}'.format(resp_user['id'])) assert len(resp['keys']) == 1 assert resp['keys'][0]['app_name'] == 'myApp' assert len(resp['authorizations']) == 1 assert resp['authorizations'][0]['instance']['name'] == 'instance' _, status = api_delete('/v0/users/{}'.format(resp_user['id']), check=False, no_json=True) assert status == 204 assert mock_rabbit.called _, status = api_get('/v0/users/{}'.format(resp_user['id']), check=False) assert status == 404
def test_streetnetwork_backend_delete(default_streetnetwork_backend): """ Test that a 'deleted' backend isn't returned when querying all backends, and that its 'discarded' parameter is set to True """ resp = api_get('/v0/streetnetwork_backends') assert "pagination" in resp assert resp["pagination"]["current_page"] == 1 assert resp["pagination"]["items_per_page"] == 10 assert resp["pagination"]["total_items"] == 2 assert "streetnetwork_backends" in resp assert len(resp['streetnetwork_backends']) == 2 _, status_code = api_delete('v0/streetnetwork_backends/kraken', check=False, no_json=True) assert status_code == 204 resp = api_get('/v0/streetnetwork_backends') assert "pagination" in resp assert resp["pagination"]["current_page"] == 1 assert resp["pagination"]["items_per_page"] == 10 assert resp["pagination"]["total_items"] == 1 assert "streetnetwork_backends" in resp assert len(resp['streetnetwork_backends']) == 1 resp = api_get('/v0/streetnetwork_backends/kraken') assert 'streetnetwork_backends' in resp assert resp['streetnetwork_backends']['discarded']
def test_delete_traveler_profile(create_instance): api_post('/v0/instances/fr/traveler_profiles/standard') _, status = api_delete('/v0/instances/fr/traveler_profiles/standard', check=False, no_json=True) assert status == 204 _, status = api_get('/v0/instances/fr/traveler_profiles/standard', check=False) assert status == 404
def test_delete_billing_plan(create_billing_plan): """ We start by creating a billing_plan. Delete the billing_plan """ resp = api_get('/v0/billing_plans/{}'.format(create_billing_plan)) _, status = api_delete('/v0/billing_plans/{}'.format(resp['id']), check=False, no_json=True) assert status == 204
def test_autocomplete_poi_types(create_two_autocomplete_parameters, minimal_poi_types_json): resp = api_get('/v0/autocomplete_parameters/france') assert resp['name'] == 'france' # POST a minimal conf resp = api_post( '/v0/autocomplete_parameters/france/poi_types', data=json.dumps(minimal_poi_types_json), content_type='application/json', ) def test_minimal_conf(resp): assert len(resp['poi_types']) == 2 assert len(resp['rules']) == 2 bss_type = jmespath.search("poi_types[?id=='amenity:bicycle_rental']", resp) assert len(bss_type) == 1 assert bss_type[0]['name'] == 'Station VLS' bss_rule = jmespath.search("rules[?poi_type_id=='amenity:bicycle_rental']", resp) assert len(bss_rule) == 1 assert bss_rule[0]['osm_tags_filters'][0]['value'] == 'bicycle_rental' # check that it's not the "default" conf assert not jmespath.search("poi_types[?id=='amenity:townhall']", resp) # check that the conf is correctly set on france test_minimal_conf(resp) # check that the conf on europe is still empty resp = api_get('/v0/autocomplete_parameters/europe/poi_types') assert not resp # check GET of newly defined france conf resp = api_get('/v0/autocomplete_parameters/france/poi_types') test_minimal_conf(resp) # check DELETE of france conf resp, code = api_delete('/v0/autocomplete_parameters/france/poi_types', check=False, no_json=True) assert not resp assert code == 204 # check get of conf on france is now empty resp = api_get('/v0/autocomplete_parameters/france/poi_types') assert not resp # check that tyr refuses incorrect conf resp, code = api_post( '/v0/autocomplete_parameters/france/poi_types', data=json.dumps({'poi_types': [{'id': 'bob', 'name': 'Bob'}]}), content_type='application/json', check=False, ) assert code == 400 assert resp['status'] == 'error' assert 'rules' in resp['message']
def test_delete_invalid_user(create_multiple_users, mock_rabbit): """ we try to delete an invalid users, this must fail and after that we check out users to be sure """ to_delete = 0 while to_delete in create_multiple_users.values(): to_delete = to_delete + 1 resp, status = api_delete('/v0/users/{}'.format(to_delete), check=False, no_json=True) assert status == 404 resp = api_get('/v0/users/') assert len(resp) == 2 assert mock_rabbit.call_count == 0
def test_delete_autocomplete(): resp = resp = api_get('/v0/autocomplete_parameters/') assert len(resp) == 4 resp = api_get('/v0/autocomplete_parameters/france') assert resp['name'] == 'france' _, status = api_delete('/v0/autocomplete_parameters/france', check=False, no_json=True) assert status == 204 _, status = api_get('/v0/autocomplete_parameters/france', check=False) assert status == 404
def test_migrate_poi_to_osm_one_instance(create_tyr_update_jobs): resp = api_get('/v0/instances') assert len(resp) == 1 resp = api_get('/v0/jobs/{}'.format(create_tyr_update_jobs)) assert len(resp.values()[0]) == 2 resp = api_delete('/v0/instances/{}/actions/migrate_from_poi_to_osm'.format(create_tyr_update_jobs)) assert resp['action'] == 'All POI datasets deleted for instance {}'.format(create_tyr_update_jobs) resp = api_get('/v0/jobs/{}'.format(create_tyr_update_jobs)) assert len(resp.values()[0]) == 1 for dataset in resp.values()[0][0]['data_sets']: assert dataset['type'] != 'poi'
def test_deletion_keys_and_auth(create_instance): """ We start by creating the user, it's easier than using a fixture, then we delete the auth and the key """ user = {'login': '******', 'email': '*****@*****.**'} resp_user = api_post('/v0/users/', data=json.dumps(user), content_type='application/json') api_post('/v0/users/{}/keys'.format(resp_user['id']), data=json.dumps({'app_name': 'myApp'}), content_type='application/json') auth = {'instance_id': create_instance, 'api_id': 1} api_post('/v0/users/{}/authorizations'.format(resp_user['id']), data=json.dumps(auth), content_type='application/json') resp = api_get('/v0/users/{}'.format(resp_user['id'])) resp_key = api_delete('/v0/users/{user_id}/keys/{key_id}'.format( user_id=resp['id'], key_id=resp['keys'][0]['id'])) assert len(resp_key['keys']) == 0 resp_auth = api_delete('/v0/users/{}/authorizations/'.format(resp['id']), data=json.dumps(auth), content_type='application/json') assert len(resp_auth['authorizations']) == 0
def test_delete_billing_plan_used_by_an_user(create_user, geojson_polygon): """ We start by creating the user with a shape. We request the user with parameter disable_geojson=false A default billing_plan is created and used with name = 'nav_ctp' We try to delete the billing_plan of this user but in vain. """ resp = api_get('/v0/users/{}?disable_geojson=false'.format(create_user)) assert resp['billing_plan']['name'] == 'nav_ctp' assert resp['has_shape'] is True assert resp['shape'] == geojson_polygon _, status = api_delete('/v0/billing_plans/{}'.format(resp['billing_plan']['id']), check=False, no_json=True) assert status == 409
def test_authorization_methods(create_5_users, create_instance, create_api): user_id = create_5_users full_user = api_get('/v1/users/{}'.format(user_id)) assert len(full_user['users']['authorizations']) == 0 auth = {'instance_id': create_instance, 'api_id': create_api} resp_post = api_post( '/v1/users/{}/authorizations'.format(user_id), data=json.dumps(auth), content_type='application/json' ) assert len(resp_post['user']['authorizations']) == 1 assert resp_post['user']['authorizations'][0]['api']['name'] == 'test_api' assert resp_post['user']['authorizations'][0]['instance']['name'] == 'test_instance' resp_delete = api_delete( '/v1/users/{}/authorizations'.format(user_id), data=json.dumps(auth), content_type='application/json' ) assert len(resp_delete['user']['authorizations']) == 0
def test_delete_poi_type_for_one_instance(create_tyr_update_jobs): resp = api_get('/v0/instances') assert len(resp) == 1 resp = api_get('/v0/jobs/{}'.format(create_tyr_update_jobs)) assert len(resp["jobs"]) == 2 # Here a job having two poi data_sets is deleted resp = api_delete('/v0/instances/{}/actions/delete_dataset/poi'.format( create_tyr_update_jobs)) assert resp['action'] == 'All poi datasets deleted for instance {}'.format( create_tyr_update_jobs) resp = api_get('/v0/jobs/{}'.format(create_tyr_update_jobs)) assert len(resp["jobs"]) == 1 for dataset in resp["jobs"][0]['data_sets']: assert dataset['type'] != 'poi'
def test_delete_fusio_type_for_one_instance(create_tyr_update_jobs): resp = api_get('/v0/instances') assert len(resp) == 1 resp = api_get('/v0/jobs/{}'.format(create_tyr_update_jobs)) assert len(resp.values()[0]) == 2 # Here no empty job is deleted resp = api_delete('/v0/instances/{}/actions/delete_dataset/fusio'.format(create_tyr_update_jobs)) assert resp['action'] == 'All fusio datasets deleted for instance {}'.format(create_tyr_update_jobs) resp = api_get('/v0/jobs/{}'.format(create_tyr_update_jobs)) assert len(resp.values()[0]) == 2 for dataset in resp.values()[0][0]['data_sets']: assert dataset['type'] != 'fusio' for dataset in resp.values()[0][0]['data_sets']: assert dataset['type'] == 'poi'
def test_equipments_provider_delete(default_equipments_config): """ Test that a 'deleted' provider isn't returned when querying all providers, and that its 'discarded' parameter is set to True """ resp = api_get('/v0/equipments_providers') assert 'equipments_providers' in resp assert len(resp['equipments_providers']) == 2 _, status_code = api_delete('v0/equipments_providers/sytral', check=False, no_json=True) assert status_code == 204 resp = api_get('/v0/equipments_providers') assert 'equipments_providers' in resp assert len(resp['equipments_providers']) == 1 resp = api_get('/v0/equipments_providers/sytral') assert 'equipments_providers' in resp assert len(resp['equipments_providers']) == 1 assert resp['equipments_providers'][0]['discarded']
def test_bss_provider_delete(default_config): resp = api_get('/v0/bss_providers') assert 'bss_providers' in resp assert len(resp['bss_providers']) == 2 _, status = api_delete('/v0/bss_providers/velib', check=False, no_json=True) assert status == 204 resp = api_get('/v0/bss_providers') assert 'bss_providers' in resp assert len(resp['bss_providers']) == 1 assert resp['bss_providers'][0]['id'] == 'velov' # velib is still there, but not visible by default resp = api_get('/v0/bss_providers/velib') assert 'bss_providers' in resp assert len(resp['bss_providers']) == 1 assert resp['bss_providers'][0]['id'] == 'velib' assert resp['bss_providers'][0]['discarded'] == True
def test_ridesharing_service_delete(default_ridesharing_service_config): """ Test that a 'deleted' service isn't returned when querying all services, and that its 'discarded' parameter is set to True """ resp = api_get('/v0/ridesharing_services') assert 'ridesharing_services' in resp assert len(resp['ridesharing_services']) == 2 _, status_code = api_delete('v0/ridesharing_services/TestCovoiturage0', check=False, no_json=True) assert status_code == 204 resp = api_get('/v0/ridesharing_services') assert 'ridesharing_services' in resp assert len(resp['ridesharing_services']) == 1 resp = api_get('/v0/ridesharing_services/TestCovoiturage0') assert 'ridesharing_services' in resp assert len(resp['ridesharing_services']) == 1 assert resp['ridesharing_services'][0]['discarded']