def test_no_call_async_update_on_400_failure(self, mock_share, node, user):
        mock_share.replace(responses.POST,
                           f'{settings.SHARE_URL}api/v2/normalizeddata/',
                           status=400)

        on_node_updated(node._id, user._id, False, {'is_public'})

        data = json.loads(mock_share.calls[-1].request.body.decode())
        graph = data['data']['attributes']['data']['@graph']
        assert graph[0]['uri'] == f'{settings.DOMAIN}{node._id}/'
    def test_update_node_share(self, mock_share, node, user):

        on_node_updated(node._id, user._id, False, {'is_public'})

        data = json.loads(mock_share.calls[-1].request.body.decode())
        graph = data['data']['attributes']['data']['@graph']

        assert mock_share.calls[-1].request.headers[
            'Authorization'] == 'Bearer mock-api-token'
        assert graph[0]['uri'] == f'{settings.DOMAIN}{node._id}/'
        assert graph[0]['creative_work']['@type'] == 'project'
    def test_update_registration_share(self, mock_share, registration, user):
        on_node_updated(registration._id, user._id, False, {'is_public'})

        assert mock_share.calls[-1].request.headers[
            'Authorization'] == f'Bearer mock-api-token'

        data = json.loads(mock_share.calls[-1].request.body.decode())
        graphs = data['data']['attributes']['data']['@graph']
        data = [
            graph for graph in graphs if graph['@type'] == 'workidentifier'
        ][0]
        assert data['uri'] == f'{settings.DOMAIN}{registration._id}/'
        assert data['creative_work']['@type'] == 'registration'
Exemple #4
0
    def test_update_registration_share(self, mock_share, registration, user):
        on_node_updated(registration._id, user._id, False, {'is_public'})

        assert mock_share.calls[-1].request.headers[
            'Authorization'] == 'Bearer mock-api-token'

        data = json.loads(mock_share.calls[-1].request.body.decode())
        graphs = data['data']['attributes']['data']['@graph']
        identifiers = [n for n in graphs if n['@type'] == 'workidentifier']
        uris = {i['uri'] for i in identifiers}
        assert uris == {
            f'{settings.DOMAIN}{registration._id}/',
            f'{settings.DOI_URL_PREFIX}{registration.get_identifier_value("doi")}',
        }
        assert all(i['creative_work']['@type'] == 'registration'
                   for i in identifiers)
Exemple #5
0
    def test_update_share_correctly_for_projects_with_qa_tags(
            self, mock_share, node, user):
        node.add_tag(settings.DO_NOT_INDEX_LIST['tags'][0], auth=Auth(user))
        on_node_updated(node._id, user._id, False, {'is_public'})
        data = json.loads(mock_share.calls[-1].request.body.decode())
        graph = data['data']['attributes']['data']['@graph']
        payload = next((item for item in graph if 'is_deleted' in item.keys()))
        assert payload['is_deleted'] is True

        node.remove_tag(settings.DO_NOT_INDEX_LIST['tags'][0],
                        auth=Auth(user),
                        save=True)

        data = json.loads(mock_share.calls[-1].request.body.decode())
        graph = data['data']['attributes']['data']['@graph']
        payload = next((item for item in graph if 'is_deleted' in item.keys()))
        assert payload['is_deleted'] is False
    def test_call_async_update_on_500_failure(self, mock_share, node, user):
        """This is meant to simulate a total outage, so the retry mechanism should try X number of times and quit."""
        mock_share.assert_all_requests_are_fired = False  # allows it to retry indefinitely
        mock_share.replace(responses.POST,
                           f'{settings.SHARE_URL}api/v2/normalizeddata/',
                           status=500)

        mock_share._calls.reset()  # reset after factory calls
        on_node_updated(node._id, user._id, False, {'is_public'})

        assert len(mock_share.calls) == 6  # first request and five retries
        data = json.loads(mock_share.calls[0].request.body.decode())
        graph = data['data']['attributes']['data']['@graph']
        assert graph[0]['uri'] == f'{settings.DOMAIN}{node._id}/'

        data = json.loads(mock_share.calls[-1].request.body.decode())
        graph = data['data']['attributes']['data']['@graph']
        assert graph[0]['uri'] == f'{settings.DOMAIN}{node._id}/'
Exemple #7
0
    def test_update_share_correctly_for_projects_with_qa_titles(
            self, mock_share, node, user):
        node.title = settings.DO_NOT_INDEX_LIST['titles'][
            0] + ' arbitary text for test title.'
        node.save()
        on_node_updated(node._id, user._id, False, {'is_public'})
        data = json.loads(mock_share.calls[-1].request.body.decode())

        graph = data['data']['attributes']['data']['@graph']
        payload = next((item for item in graph if 'is_deleted' in item.keys()))
        assert payload['is_deleted'] is True

        node.title = 'Not a qa title'
        node.save()
        assert node.title not in settings.DO_NOT_INDEX_LIST['titles']

        data = json.loads(mock_share.calls[-1].request.body.decode())
        graph = data['data']['attributes']['data']['@graph']
        payload = next((item for item in graph if 'is_deleted' in item.keys()))
        assert payload['is_deleted'] is False
    def test_call_async_update_on_500_retry(self, mock_share, node, user):
        """This is meant to simulate a temporary outage, so the retry mechanism should kick in and complete it."""
        mock_share.replace(responses.POST,
                           f'{settings.SHARE_URL}api/v2/normalizeddata/',
                           status=500)
        mock_share.add(responses.POST,
                       f'{settings.SHARE_URL}api/v2/normalizeddata/',
                       status=200)

        mock_share._calls.reset()  # reset after factory calls
        on_node_updated(node._id, user._id, False, {'is_public'})
        assert len(mock_share.calls) == 2

        data = json.loads(mock_share.calls[0].request.body.decode())
        graph = data['data']['attributes']['data']['@graph']
        assert graph[0]['uri'] == f'{settings.DOMAIN}{node._id}/'

        data = json.loads(mock_share.calls[1].request.body.decode())
        graph = data['data']['attributes']['data']['@graph']
        assert graph[0]['uri'] == f'{settings.DOMAIN}{node._id}/'
Exemple #9
0
 def test_skips_no_settings(self, node, user):
     on_node_updated(node._id, user._id, False, {'is_public'})
     assert len(responses.calls) == 0