def test_join_data_one_obj_w_two_relationships(self, relationship, relationship2, org): factories.JoinRecord(relationship=relationship, record_id=1, related_record_id=2, record_uuid=None, related_record_uuid=None) factories.JoinRecord(relationship=relationship2, record_id=1, related_record_id=10, record_uuid=None, related_record_uuid=None) logic_module_model = relationship.origin_model data = {'id': 1, 'name': 'test', 'contact_uuid': 1} # mock client for related services class ClientMock: def request(self, **kwargs): if kwargs['model'] == 'documents': return {'id': 2, 'file': '/documents/128/'} if kwargs['model'] == 'siteprofile': return {'id': 10, 'city': 'New York'} return {} client_map = { relationship.related_model.logic_module_endpoint_name: ClientMock(), relationship2.related_model.logic_module_endpoint_name: ClientMock(), } datamesh = DataMesh(logic_module_endpoint=logic_module_model. logic_module_endpoint_name, model_endpoint=logic_module_model.endpoint) datamesh.extend_data(data, client_map) # validate result expected_data = { 'id': 1, 'name': 'test', 'contact_uuid': 1, relationship.key: [{ 'id': 2, 'file': '/documents/128/', }], relationship2.key: [{ 'id': 10, 'city': 'New York', }] } assert data == expected_data
def test_join_data_one_obj_w_relationships(self, relationship): factories.JoinRecord(relationship=relationship, record_id=1, related_record_id=2, record_uuid=None, related_record_uuid=None) logic_module_model = relationship.origin_model data = {'id': 1, 'name': 'test', 'contact_uuid': 1} # mock client for related logic module class ClientMock: def request(self, **kwargs): return {'id': 1, 'file': '/somewhere/128/',} client_map = {relationship.related_model.logic_module_endpoint_name: ClientMock()} datamesh = DataMesh(logic_module_endpoint=logic_module_model.logic_module_endpoint_name, model_endpoint=logic_module_model.endpoint) datamesh.extend_data(data, client_map) # validate result expected_data = { 'id': 1, 'name': 'test', 'contact_uuid': 1, relationship.key: [{ 'id': 1, 'file': '/somewhere/128/', }] } assert data == expected_data
def test_make_service_request_with_datamesh_list(auth_api_client, datamesh): lm1, lm2, relationship = datamesh factories.JoinRecord(relationship=relationship, record_id=None, record_uuid='19a7f600-74a0-4123-9be5-dfa69aa172cc', related_record_id=1, related_record_uuid=None) url = f'/{lm1.endpoint_name}/siteprofiles/' # mock requests with open(os.path.join(CURRENT_PATH, 'fixtures/swagger_location.json')) as r: swagger_location_body = r.read() with open(os.path.join(CURRENT_PATH, 'fixtures/swagger_documents.json')) as r: swagger_documents_body = r.read() with open(os.path.join(CURRENT_PATH, 'fixtures/data_list_siteprofile.json')) as r: data_location_body = r.read() with open(os.path.join(CURRENT_PATH, 'fixtures/data_detail_document.json')) as r: data_documents_body = r.read() httpretty.register_uri(httpretty.GET, f'{lm1.endpoint}/docs/swagger.json', body=swagger_location_body, adding_headers={'Content-Type': 'application/json'}) httpretty.register_uri(httpretty.GET, f'{lm2.endpoint}/docs/swagger.json', body=swagger_documents_body, adding_headers={'Content-Type': 'application/json'}) httpretty.register_uri(httpretty.GET, f'{lm1.endpoint}/siteprofiles/', body=data_location_body, adding_headers={'Content-Type': 'application/json'}) httpretty.register_uri(httpretty.GET, f'{lm2.endpoint}/documents/1/', body=data_documents_body, adding_headers={'Content-Type': 'application/json'}) # make api request response = auth_api_client.get(url, {'join': 'true'}) assert response.status_code == 200 assert response.has_header('Content-Type') assert response.get('Content-Type') == 'application/json' data = response.json() # first item in the list has a joined record item1 = data["results"][0] assert relationship.key in item1 assert len(item1[relationship.key]) == 1 assert item1[relationship.key][0][list( item1[relationship.key][0].keys())[0]] == 1 # second item in the list doesn't have a joined record item2 = data["results"][1] assert relationship.key in item2 assert len(item2[relationship.key]) == 0
def test_join_data_one_obj_w_relationships(mock_perform_request, mock_spec, auth_api_client, relationship): factories.JoinRecord(relationship=relationship, record_id=1, related_record_id=2, record_uuid=None, related_record_uuid=None) # mock app mock_spec.return_value = Mock(Spec) # mock first response service_response = ({ 'id': 1, 'name': 'test', 'contact_uuid': 1 }, 200, { 'Content-Type': ['application/json'] }) # mock second response expand_response = ({ 'id': 1, 'file': '/somewhere/128/', }, 200, { 'Content-Type': ['application/json'] }) mock_perform_request.side_effect = [service_response, expand_response] # make api request path = '/{}/{}/'.format( relationship.origin_model.logic_module_endpoint_name, 'products') response = auth_api_client.get(path, {'join': ''}) # validate result expected_data = { 'id': 1, 'name': 'test', 'contact_uuid': 1, relationship.key: [{ 'id': 1, 'file': '/somewhere/128/', }] } assert response.status_code == 200 assert json.loads(response.content) == expected_data
def test_relationship_with_local_lm(self, relationship_with_local, org): factories.JoinRecord(relationship=relationship_with_local, record_id=1, related_record_uuid=org.organization_uuid, record_uuid=None, related_record_id=None) logic_module_model = relationship_with_local.origin_model data = {'id': 1, 'name': 'test', 'contact_uuid': 1} datamesh = DataMesh(logic_module_endpoint=logic_module_model.logic_module_endpoint_name, model_endpoint=logic_module_model.endpoint) asyncio.run(datamesh.async_extend_data(data, {})) # validate result expected_data = { 'id': 1, 'name': 'test', 'contact_uuid': 1, relationship_with_local.key: [model_to_dict(org)] } assert data == expected_data
def test_make_service_request_with_datamesh_list(client_session_mock, auth_api_client, datamesh, event_loop): lm1, lm2, relationship = datamesh factories.JoinRecord(relationship=relationship, record_id=None, record_uuid='19a7f600-74a0-4123-9be5-dfa69aa172cc', related_record_id=1, related_record_uuid=None) url = f'/async/{lm1.endpoint_name}/siteprofiles/' # mock requests with open(os.path.join(CURRENT_PATH, 'fixtures/swagger_location.json'), 'rb') as r: swagger_location_body = r.read() with open(os.path.join(CURRENT_PATH, 'fixtures/swagger_documents.json'), 'rb') as r: swagger_documents_body = r.read() with open( os.path.join(CURRENT_PATH, 'fixtures/data_list_siteprofile.json'), 'rb') as r: data_location_body = r.read() with open(os.path.join(CURRENT_PATH, 'fixtures/data_detail_document.json'), 'rb') as r: data_documents_body = r.read() responses = [ AiohttpResponseMock(method='GET', url=f'{lm1.endpoint}/docs/swagger.json', status=200, body=swagger_location_body, headers={'Content-Type': 'application/json'}), AiohttpResponseMock(method='GET', url=f'{lm2.endpoint}/docs/swagger.json', status=200, body=swagger_documents_body, headers={'Content-Type': 'application/json'}), AiohttpResponseMock(method='GET', url=f'{lm1.endpoint}/siteprofiles/', status=200, body=data_location_body, headers={'Content-Type': 'application/json'}), AiohttpResponseMock(method='GET', url=f'{lm2.endpoint}/documents/1/', status=200, body=data_documents_body, headers={'Content-Type': 'application/json'}), ] client_session_mock.return_value = create_aiohttp_session_mock( responses, loop=event_loop) # make api request response = auth_api_client.get(url, {'join': 'true'}) assert response.status_code == 200 assert response.has_header('Content-Type') assert response.get('Content-Type') == 'application/json' data = response.json() # first item in the list has a joined record item1 = data["results"][0] assert relationship.key in item1 assert len(item1[relationship.key]) == 1 assert item1[relationship.key][0]['id'] == 1 # second item in the list doesn't have a joined record item2 = data["results"][1] assert relationship.key in item2 assert len(item2[relationship.key]) == 0
def join_record(): return factories.JoinRecord()