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'
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)
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}/'
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}/'
def test_skips_no_settings(self, node, user): on_node_updated(node._id, user._id, False, {'is_public'}) assert len(responses.calls) == 0