示例#1
0
    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
示例#2
0
    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
示例#3
0
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
示例#4
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
示例#5
0
    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
示例#7
0
def join_record():
    return factories.JoinRecord()