def test_store_record_inspirehep_api_retries_on_connection_error( mock_requests_post, workflow_app): mock_requests_post.side_effect = side_effect_requests_post record_data = { '$schema': 'http://localhost:5000/schemas/records/hep.json', 'titles': [{ 'title': 'Follow hour including staff wrong.' }], 'document_type': ['article'], '_collections': ['Literature'] } workflow = workflow_object_class.create({}) workflow.extra_data['is-update'] = False workflow.data = record_data eng = MagicMock(workflow_definition=MagicMock(data_type='hep')) with patch.dict( workflow_app.config, { 'FEATURE_FLAG_ENABLE_REST_RECORD_MANAGEMENT': True, 'INSPIREHEP_URL': "http://web:8000" }): with pytest.raises(requests.exceptions.ConnectionError): store_record(workflow, eng) assert mock_requests_post.call_count == 5
def test_store_record_inspirehep_api_author_new_wrong_response_code( workflow_app): record_data = { '$schema': 'http://localhost:5000/schemas/records/authors.json', 'name': { 'value': 'Robert Johnson' }, '_collections': ['Authors'] } workflow = workflow_object_class.create({}) workflow.extra_data['is-update'] = False workflow.data = record_data eng = MagicMock(workflow_definition=MagicMock(data_type='authors')) with patch.dict( workflow_app.config, { 'FEATURE_FLAG_ENABLE_REST_RECORD_MANAGEMENT': True, 'INSPIREHEP_URL': "http://web:8000" }): with requests_mock.Mocker() as requests_mocker: requests_mocker.register_uri( 'POST', '{url}/authors'.format( url=workflow_app.config.get("INSPIREHEP_URL")), headers={'content-type': 'application/json'}, status_code=401, json={"message": "Something"}) with pytest.raises(WorkflowsError): store_record(workflow, eng)
def test_store_record_does_not_raise_in_the_orcid_receiver(mock_attempt_push, app): config = { 'FEATURE_FLAG_ENABLE_ORCID_PUSH': True, 'RECORDS_SKIP_FILES': False, } eng = MagicMock(workflow_definition=MagicMock(data_type='hep')) with patch.dict(current_app.config, config): obj = workflow_object_class.create({ '$schema': 'http://localhost:5000/schemas/records/hep.json', '_collections': [ 'Literature', ], 'authors': [ { 'full_name': 'Patra, Asim', 'ids': [ { 'schema': 'ORCID', 'value': '0000-0003-1166-2790', }, ], }, ], 'document_type': [ 'article', ], 'titles': [ {'title': 'title'}, ], }) store_record(obj, eng) # Does not raise.
def test_regression_store_record_does_not_commit_when_error(workflow_app): data = { '$schema': 'http://localhost:5000/schemas/records/hep.json', '_collections': ['Literature'], 'document_type': ['article'], 'titles': [{ 'title': 'title' }], } eng = MagicMock(workflow_definition=MagicMock(data_type='hep')) obj = workflow_object_class.create(data) record_count = RecordMetadata.query.count() assert record_count == 0 with patch.object(InspireRecord, 'download_documents_and_figures', side_effect=Exception): # pytest.raises catches the exception and makes the test passing immediately try: store_record(obj, eng) except Exception: record_count = RecordMetadata.query.count() assert record_count == 0
def test_store_record_inspirehep_api_author_new_wrong_response_code(workflow_app): record_data = { '$schema': 'http://localhost:5000/schemas/records/authors.json', 'name': {'value': 'Robert Johnson'}, '_collections': ['Authors'] } workflow = workflow_object_class.create({}) workflow.extra_data['is-update'] = False workflow.data = record_data eng = MagicMock(workflow_definition=MagicMock(data_type='authors')) with patch.dict(workflow_app.config, { 'FEATURE_FLAG_ENABLE_REST_RECORD_MANAGEMENT': True, 'INSPIREHEP_URL': "http://web:8000" }): with requests_mock.Mocker() as requests_mocker: requests_mocker.register_uri( 'POST', '{url}/authors'.format( url=workflow_app.config.get("INSPIREHEP_URL")), headers={'content-type': 'application/json'}, status_code=401, json={ "message": "Something" } ) with pytest.raises(WorkflowsError): store_record(workflow, eng)
def test_store_record_inspirehep_api_author_new(workflow_app): record_data = { '$schema': 'http://localhost:5000/schemas/records/authors.json', 'name': {'value': 'Robert Johnson'}, '_collections': ['Authors'] } workflow = workflow_object_class.create({}) workflow.extra_data['is-update'] = False workflow.data = record_data expected_head_uuid = 'uuid_number_123456' expected_control_number = 222 eng = MagicMock(workflow_definition=MagicMock(data_type='authors')) with patch.dict(workflow_app.config, { 'FEATURE_FLAG_ENABLE_REST_RECORD_MANAGEMENT': True, 'INSPIREHEP_URL': "http://web:8000" }): with requests_mock.Mocker() as requests_mocker: requests_mocker.register_uri( 'POST', '{url}/authors'.format( url=workflow_app.config.get("INSPIREHEP_URL")), headers={'content-type': 'application/json'}, status_code=201, json={ "metadata": { "control_number": expected_control_number }, 'id_': expected_head_uuid } ) store_record(workflow, eng) # not throwing exception assert workflow.data['control_number'] == expected_control_number assert workflow.extra_data['head_uuid'] == expected_head_uuid
def test_regression_store_record_does_not_commit_when_error(workflow_app): data = { '$schema': 'http://localhost:5000/schemas/records/hep.json', '_collections': ['Literature'], 'document_type': ['article'], 'titles': [{'title': 'title'}], } eng = MagicMock(workflow_definition=MagicMock(data_type='hep')) obj = workflow_object_class.create(data) record_count = RecordMetadata.query.count() assert record_count == 0 with patch.object( InspireRecord, 'download_documents_and_figures', side_effect=Exception ): # pytest.raises catches the exception and makes the test passing immediately try: store_record(obj, eng) except Exception: record_count = RecordMetadata.query.count() assert record_count == 0
def test_store_record_inspirehep_api_retries_on_bad_gateway(workflow_app): record_data = { '$schema': 'http://localhost:5000/schemas/records/hep.json', 'titles': [{ 'title': 'Follow hour including staff wrong.' }], 'document_type': ['article'], '_collections': ['Literature'] } workflow = workflow_object_class.create({}) workflow.extra_data['is-update'] = False workflow.data = record_data expected_head_uuid = 'uuid_number_123456' expected_control_number = 222 eng = MagicMock(workflow_definition=MagicMock(data_type='hep')) with patch.dict( workflow_app.config, { 'FEATURE_FLAG_ENABLE_REST_RECORD_MANAGEMENT': True, 'INSPIREHEP_URL': "http://web:8000" }): with requests_mock.Mocker() as requests_mocker: requests_mocker.register_uri( 'POST', '{url}/literature'.format( url=workflow_app.config.get("INSPIREHEP_URL")), [{ 'status_code': 502 }, { 'status_code': 502 }, { 'status_code': 201, 'json': { "metadata": { "control_number": expected_control_number }, 'uuid': expected_head_uuid } }], ) store_record(workflow, eng) assert workflow.data['control_number'] == expected_control_number assert workflow.extra_data['head_uuid'] == expected_head_uuid
def test_store_record_inspirehep_api_literature_update(workflow_app): record_data = { '$schema': 'http://localhost:5000/schemas/records/hep.json', 'titles': [{ 'title': 'Follow hour including staff wrong.' }], 'document_type': ['article'], '_collections': ['Literature'] } workflow = workflow_object_class.create({}) workflow.extra_data['is-update'] = True expected_head_uuid = 'uuid_number_123456' expected_control_number = 111 workflow.extra_data['matches'] = {} workflow.extra_data['matches']['approved'] = expected_control_number workflow.extra_data['head_uuid'] = expected_head_uuid workflow.data = record_data eng = MagicMock(workflow_definition=MagicMock(data_type='hep')) with patch.dict( workflow_app.config, { 'FEATURE_FLAG_ENABLE_REST_RECORD_MANAGEMENT': True, 'INSPIREHEP_URL': "http://web:8000" }): with requests_mock.Mocker() as requests_mocker: requests_mocker.register_uri( 'PUT', '{url}/literature/{cn}'.format( url=workflow_app.config.get("INSPIREHEP_URL"), cn=expected_control_number, ), headers={'content-type': 'application/json'}, status_code=200, json={ "metadata": { "control_number": expected_control_number }, 'uuid': expected_head_uuid }) store_record(workflow, eng) # not throwing exception assert workflow.data['control_number'] == expected_control_number assert workflow.extra_data['head_uuid'] == expected_head_uuid
def test_store_record_inspirehep_api_author_update(workflow_app): expected_control_number = 2222 expected_head_uuid = str(uuid.uuid4()) record_data = { '$schema': 'http://localhost:5000/schemas/records/authors.json', 'name': { 'value': 'Robert Johnson' }, '_collections': ['Authors'], "control_number": expected_control_number } workflow = workflow_object_class.create(record_data) workflow.extra_data['is-update'] = True workflow.extra_data['head_uuid'] = expected_head_uuid eng = MagicMock(workflow_definition=MagicMock(data_type='authors')) with patch.dict( workflow_app.config, { 'FEATURE_FLAG_ENABLE_REST_RECORD_MANAGEMENT': True, 'INSPIREHEP_URL': "http://web:8000" }): with requests_mock.Mocker() as requests_mocker: requests_mocker.register_uri( 'PUT', '{url}/authors/{cn}'.format( url=workflow_app.config.get("INSPIREHEP_URL"), cn=expected_control_number, ), headers={'content-type': 'application/json'}, status_code=200, json={ "metadata": { "control_number": expected_control_number }, 'uuid': expected_head_uuid }) store_record(workflow, eng) # not throwing exception assert workflow.data['control_number'] == expected_control_number assert workflow.extra_data['head_uuid'] == expected_head_uuid
def test_store_record_inspirehep_api_literature_update(workflow_app): record_data = { '$schema': 'http://localhost:5000/schemas/records/hep.json', 'titles': [{'title': 'Follow hour including staff wrong.'}], 'document_type': ['article'], '_collections': ['Literature'] } workflow = workflow_object_class.create({}) workflow.extra_data['is-update'] = True expected_head_uuid = 'uuid_number_123456' expected_control_number = 111 workflow.extra_data['matches'] = {} workflow.extra_data['matches']['approved'] = expected_control_number workflow.extra_data['head_uuid'] = expected_head_uuid workflow.data = record_data eng = MagicMock(workflow_definition=MagicMock(data_type='hep')) with patch.dict(workflow_app.config, { 'FEATURE_FLAG_ENABLE_REST_RECORD_MANAGEMENT': True, 'INSPIREHEP_URL': "http://web:8000" }): with requests_mock.Mocker() as requests_mocker: requests_mocker.register_uri( 'PUT', '{url}/literature/{cn}'.format( url=workflow_app.config.get("INSPIREHEP_URL"), cn=expected_control_number, ), headers={'content-type': 'application/json'}, status_code=200, json={ "metadata": { "control_number": expected_control_number }, 'id_': expected_head_uuid } ) store_record(workflow, eng) # not throwing exception assert workflow.data['control_number'] == expected_control_number assert workflow.extra_data['head_uuid'] == expected_head_uuid
def test_store_record_does_not_raise_in_the_orcid_receiver( mock_attempt_push, app): config = { 'FEATURE_FLAG_ENABLE_ORCID_PUSH': True, 'RECORDS_SKIP_FILES': False, } eng = MagicMock(workflow_definition=MagicMock(data_type='hep')) with patch.dict(current_app.config, config): obj = workflow_object_class.create({ '$schema': 'http://localhost:5000/schemas/records/hep.json', '_collections': [ 'Literature', ], 'authors': [ { 'full_name': 'Patra, Asim', 'ids': [ { 'schema': 'ORCID', 'value': '0000-0003-1166-2790', }, ], }, ], 'document_type': [ 'article', ], 'titles': [ { 'title': 'title' }, ], }) store_record(obj, eng) # Does not raise.