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
Ejemplo n.º 10
0
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.