def test_orcid_push_triggered_on_create_record_with_multiple_authors_with_allow_push(mock_orcid_push_task, app, raw_record, two_users_with_permission, enable_orcid_push_feature): migrate_and_insert_record(raw_record, skip_files=True) expected_kwargs_user1 = { 'kwargs': { 'orcid': two_users_with_permission[0]['orcid'], 'rec_id': 1608652, 'oauth_token': two_users_with_permission[0]['token'], 'kwargs_to_pusher': {'record_db_version': mock.ANY}, }, 'queue': 'orcid_push', } expected_kwargs_user2 = { 'kwargs': { 'orcid': two_users_with_permission[1]['orcid'], 'rec_id': 1608652, 'oauth_token': two_users_with_permission[1]['token'], 'kwargs_to_pusher': {'record_db_version': mock.ANY}, }, 'queue': 'orcid_push', } mock_orcid_push_task.apply_async.assert_any_call(**expected_kwargs_user1) mock_orcid_push_task.apply_async.assert_any_call(**expected_kwargs_user2) assert mock_orcid_push_task.apply_async.call_count == 2
def test_orcid_push_triggered_on_create_record_with_allow_push(mocked_Task, app, raw_record, user_with_permission): mocked_Task.return_value = mocked_Task migrate_and_insert_record(raw_record, skip_files=True) expected_kwargs = { 'kwargs': { 'orcid': user_with_permission['orcid'], 'rec_id': 1608652, 'token': user_with_permission['token'], }, 'queue': 'orcid_push', } mocked_Task.apply_async.assert_called_once_with(**expected_kwargs)
def test_orcid_push_triggered_on_create_record_with_allow_push(mock_orcid_push_task, app, raw_record, user_with_permission, enable_orcid_push_feature): migrate_and_insert_record(raw_record, skip_files=True) expected_kwargs = { 'kwargs': { 'orcid': user_with_permission['orcid'], 'rec_id': 1608652, 'oauth_token': user_with_permission['token'], 'kwargs_to_pusher': {'record_db_version': mock.ANY}, }, 'queue': 'orcid_push', } mock_orcid_push_task.apply_async.assert_called_once_with(**expected_kwargs)
def test_migrate_and_insert_record_other_exception(mock_logger, isolated_app): raw_record = ( '<record>' ' <controlfield tag="001">12345</controlfield>' ' <datafield tag="980" ind1=" " ind2=" ">' ' <subfield code="a">HEP</subfield>' ' </datafield>' '</record>' ) migrate_and_insert_record(raw_record) prod_record = LegacyRecordsMirror.query.filter(LegacyRecordsMirror.recid == 12345).one() assert prod_record.valid is False assert prod_record.marcxml == raw_record assert not mock_logger.error.called mock_logger.exception.assert_called_once_with('Migrator Record Insert Error')
def test_migrate_and_insert_record_invalid_record(mock_logger, isolated_app): raw_record = ( '<record>' ' <controlfield tag="001">12345</controlfield>' ' <datafield tag="980" ind1=" " ind2=" ">' ' <subfield code="a">HEP</subfield>' ' </datafield>' '</record>' ) migrate_and_insert_record(raw_record) prod_record = InspireProdRecords.query.filter(InspireProdRecords.recid == 12345).one() assert prod_record.valid is False assert prod_record.marcxml == raw_record assert mock_logger.error.called assert not mock_logger.exception.called
def test_migrate_and_insert_record_dojson_error(mock_logger, isolated_app): raw_record = ( '<record>' ' <controlfield tag="001">12345</controlfield>' ' <datafield tag="260" ind1=" " ind2=" ">' ' <subfield code="c">Definitely not a date</subfield>' ' </datafield>' ' <datafield tag="980" ind1=" " ind2=" ">' ' <subfield code="a">HEP</subfield>' ' </datafield>' '</record>' ) migrate_and_insert_record(raw_record) prod_record = InspireProdRecords.query.filter(InspireProdRecords.recid == 12345).one() assert prod_record.valid is False assert prod_record.marcxml == raw_record assert not mock_logger.error.called mock_logger.exception.assert_called_once_with('Migrator DoJSON Error')
def test_migrate_and_insert_record_valid_record(mock_logger, isolated_app): raw_record = ( '<record>' ' <controlfield tag="001">12345</controlfield>' ' <datafield tag="245" ind1=" " ind2=" ">' ' <subfield code="a">On the validity of INSPIRE records</subfield>' ' </datafield>' ' <datafield tag="980" ind1=" " ind2=" ">' ' <subfield code="a">HEP</subfield>' ' </datafield>' '</record>') migrate_and_insert_record(raw_record) prod_record = LegacyRecordsMirror.query.filter( LegacyRecordsMirror.recid == 12345).one() assert prod_record.valid is True assert prod_record.marcxml == raw_record assert not mock_logger.error.called assert not mock_logger.exception.called
def test_migrate_and_insert_record_valid_record(mock_logger, isolated_app): raw_record = ( '<record>' ' <controlfield tag="001">12345</controlfield>' ' <datafield tag="245" ind1=" " ind2=" ">' ' <subfield code="a">On the validity of INSPIRE records</subfield>' ' </datafield>' ' <datafield tag="980" ind1=" " ind2=" ">' ' <subfield code="a">HEP</subfield>' ' </datafield>' '</record>' ) migrate_and_insert_record(raw_record) prod_record = LegacyRecordsMirror.query.filter(LegacyRecordsMirror.recid == 12345).one() assert prod_record.valid is True assert prod_record.marcxml == raw_record assert not mock_logger.error.called assert not mock_logger.exception.called
def test_migrate_and_insert_record_invalid_record_update_regression( mock_logger, app): # test is not isolated so the models_committed signal fires and the indexer might be called raw_record = ( '<record>' ' <controlfield tag="001">12345</controlfield>' ' <datafield tag="245" ind1=" " ind2=" ">' ' <subfield code="a">On the validity of INSPIRE records</subfield>' ' </datafield>' ' <datafield tag="980" ind1=" " ind2=" ">' ' <subfield code="a">HEP</subfield>' ' </datafield>' '</record>') migrate_and_insert_record(raw_record) db.session.commit() raw_record = ('<record>' ' <controlfield tag="001">12345</controlfield>' ' <datafield tag="980" ind1=" " ind2=" ">' ' <subfield code="a">HEP</subfield>' ' </datafield>' '</record>') with patch('inspirehep.modules.records.receivers.RecordIndexer' ) as mock_indexer: migrate_and_insert_record(raw_record) prod_record = LegacyRecordsMirror.query.filter( LegacyRecordsMirror.recid == 12345).one() assert prod_record.valid is False assert prod_record.marcxml == raw_record assert mock_logger.error.called assert not mock_logger.exception.called assert not mock_indexer.return_value.index.called
def test_migrate_and_insert_record_invalid_record_update_regression(mock_logger, app): # test is not isolated so the models_committed signal fires and the indexer might be called raw_record = ( '<record>' ' <controlfield tag="001">12345</controlfield>' ' <datafield tag="245" ind1=" " ind2=" ">' ' <subfield code="a">On the validity of INSPIRE records</subfield>' ' </datafield>' ' <datafield tag="980" ind1=" " ind2=" ">' ' <subfield code="a">HEP</subfield>' ' </datafield>' '</record>' ) migrate_and_insert_record(raw_record) db.session.commit() raw_record = ( '<record>' ' <controlfield tag="001">12345</controlfield>' ' <datafield tag="980" ind1=" " ind2=" ">' ' <subfield code="a">HEP</subfield>' ' </datafield>' '</record>' ) with patch('inspirehep.modules.records.receivers.RecordIndexer') as mock_indexer: migrate_and_insert_record(raw_record) prod_record = LegacyRecordsMirror.query.filter(LegacyRecordsMirror.recid == 12345).one() assert prod_record.valid is False assert prod_record.marcxml == raw_record assert mock_logger.error.called assert not mock_logger.exception.called assert not mock_indexer.return_value.index.called
def test_orcid_push_triggered_on_create_record_with_multiple_authors_with_allow_push(mocked_Task, app, raw_record, two_users_with_permission): mocked_Task.return_value = mocked_Task migrate_and_insert_record(raw_record, skip_files=True) expected_kwargs_user1 = { 'kwargs': { 'orcid': two_users_with_permission[0]['orcid'], 'rec_id': 1608652, 'token': two_users_with_permission[0]['token'], }, 'queue': 'orcid_push', } expected_kwargs_user2 = { 'kwargs': { 'orcid': two_users_with_permission[1]['orcid'], 'rec_id': 1608652, 'token': two_users_with_permission[1]['token'], }, 'queue': 'orcid_push', } mocked_Task.apply_async.assert_any_call(**expected_kwargs_user1) mocked_Task.apply_async.assert_any_call(**expected_kwargs_user2) assert mocked_Task.apply_async.call_count == 2
def test_orcid_push_not_triggered_on_create_record_no_feat_flag( mocked_Task, app, raw_record, user_with_permission): migrate_and_insert_record(raw_record, skip_files=True) mocked_Task.assert_not_called()
def test_orcid_push_not_triggered_on_create_record_without_token( mock_orcid_push_task, app, raw_record, user_without_token): migrate_and_insert_record(raw_record, skip_files=True) mock_orcid_push_task.assert_not_called()
def record(raw_record): with mock.patch('inspirehep.modules.records.receivers.Task') as mocked_Task: mocked_Task.return_value = mocked_Task _record = migrate_and_insert_record(raw_record, skip_files=True) return _record
def test_orcid_push_not_triggered_on_create_record_no_feat_flag(mocked_Task, app, raw_record, user_with_permission): migrate_and_insert_record(raw_record, skip_files=True) mocked_Task.assert_not_called()
def record(raw_record): with mock.patch('inspirehep.modules.orcid.tasks.orcid_push') as mock_orcid_push: mock_orcid_push.return_value = mock_orcid_push _record = migrate_and_insert_record(raw_record, skip_files=True) return _record
def test_orcid_push_not_triggered_on_create_record_without_token(mock_orcid_push_task, app, raw_record, user_without_token): migrate_and_insert_record(raw_record, skip_files=True) mock_orcid_push_task.assert_not_called()