import pytest from app import app from app.scicrunch_process_results import reform_flatmap_query_result from app.scicrunch_requests import create_dataset_flatmap_query @pytest.fixture def client(): # Spin up test flask app app.config['TESTING'] = True return app.test_client() def test_find_flatmap_uuid(client): target_subject = 'sub-f006' target_dataset = '2a3d01c0-39d3-464a-8746-54c9d67ebe0f' r = client.get('/flatmap/find', query_string={'subject': target_subject, 'dataset': target_dataset}) assert r.status_code == 200 expected_result = [{'dataset': 'N:dataset:031598b5-88eb-44eb-ba70-67ad1c2fe36a', 'left': '0ea45841-ce99-5b86-8d16-2d12689566f6', 'right': '238599e8-fd25-533e-9f88-68fad90c1bf2', 'subject': 'sub-f006'}] assert expected_result == r.json def test_find_flatmap_uuid_bad_subject(client): target_subject = 'sub-f999' target_dataset = '2a3d01c0-39d3-464a-8746-54c9d67ebe0f' r = client.get('/flatmap/find', query_string={'subject': target_subject, 'dataset': target_dataset}) assert r.status_code == 404 expected_result = {'error': f"404 Not Found: No results for subject '{target_subject}' in dataset '{target_dataset}'."} assert expected_result == r.json def test_find_flatmap_uuid_bad_dataset(client): target_subject = 'sub-f006' target_dataset = '2b3d01c0-39d3-464a-8746-54c9d67ebe0f' r = client.get('/flatmap/find', query_string={'subject': target_subject, 'dataset': target_dataset}) assert r.status_code == 404 expected_result = {'error': f"404 Not Found: No results for subject '{target_subject}' in dataset '{target_dataset}'."} assert expected_result == r.json def test_find_flatmap_uuid_missing_params(client): target_dataset = '2b3d01c0-39d3-464a-8746-54c9d67ebe0f' r = client.get('/flatmap/find', query_string={'dataset': target_dataset}) assert r.status_code == 400 assert 'Query arguments are not valid' in r.data.decode('utf-8') def test_flatmap_query(): query = create_dataset_flatmap_query("12345-6789-123-456") assert query['query']['match']['item.identifier']['query'] == '12345-6789-123-456' def test_flatmap_query_named_parameters(): query = create_dataset_flatmap_query("12345-6789-123-456", size=12, from_=6) assert query['size'] == 12 assert query['from'] == 6 assert query['query']['match']['item.identifier']['query'] == '12345-6789-123-456' def test_reform_flatmap_query_result_bad_input(): output = reform_flatmap_query_result(None, 'sub-f005', '12345-6789-123-45') assert output == {} def test_reform_flatmap_query_result_empty_input(): output = reform_flatmap_query_result({}, 'sub-f005', '12345-6789-123-45') assert output == {} def test_reform_flatmap_query_result_no_hits_input(): output = reform_flatmap_query_result({'hits': {}}, 'sub-f005', '12345-6789-123-45') assert output == {} def test_reform_flatmap_query_result_valid_input(): sci_crunch_data = { 'hits': { 'hits': [ { '_source': { 'objects': [ { 'associated_flatmap': {'identifier': '54321-6789-123-45'}, 'dataset': {'path': '/home/sub-f005/L/here'} }, ] } } ] } } output = reform_flatmap_query_result(sci_crunch_data, 'sub-f005', '12345-6789-123-45') assert output == {'dataset': '12345-6789-123-45', 'subject': 'sub-f005', 'left': '54321-6789-123-45'}