def test_deleting_record_triggers_delete_in_es(app): search = LiteratureSearch() json = { '$schema': 'http://localhost:5000/schemas/records/hep.json', 'document_type': [ 'article', ], 'titles': [ { 'title': 'foo' }, ], '_collections': ['Literature'] } # When a record is created in the DB, it is also created in ES. record = InspireRecord.create(json) record.commit() db.session.commit() search.get_source(record.id) # When a record is updated with deleted flag true, it is deleted in ES record['deleted'] = True record.commit() db.session.commit() with pytest.raises(NotFoundError): search.get_source(record.id)
def test_that_db_changes_are_mirrored_in_es(app): search = LiteratureSearch() json = { '$schema': 'http://localhost:5000/schemas/records/hep.json', 'document_type': [ 'article', ], 'titles': [ {'title': 'foo'}, ], } # When a record is created in the DB, it is also created in ES. record = InspireRecord.create(json) es_record = search.get_source(record.id) assert get_title(es_record) == 'foo' # When a record is updated in the DB, is is also updated in ES. record['titles'][0]['title'] = 'bar' record.commit() es_record = search.get_source(record.id) assert get_title(es_record) == 'bar' # When a record is deleted in the DB, it is also deleted in ES. record._delete(force=True) with pytest.raises(NotFoundError): es_record = search.get_source(record.id)
def test_creating_deleted_record_and_undeleting_created_record_in_es(app): search = LiteratureSearch() json = { '$schema': 'http://localhost:5000/schemas/records/hep.json', 'document_type': [ 'article', ], 'titles': [ { 'title': 'foo' }, ], 'deleted': True, '_collections': ['Literature'] } # When a record is created in the DB with deleted flag True, it is not created in ES. record = InspireRecord.create(json) record.commit() db.session.commit() with pytest.raises(NotFoundError): search.get_source(record.id) # When a record is undeleted, it is created in ES. record['deleted'] = False record.commit() db.session.commit() search.get_source(record.id) record._delete(force=True)
def test_deleting_record_triggers_delete_in_es(app): search = LiteratureSearch() json = { '$schema': 'http://localhost:5000/schemas/records/hep.json', 'document_type': [ 'article', ], 'titles': [ {'title': 'foo'}, ], '_collections': ['Literature'] } # When a record is created in the DB, it is also created in ES. record = InspireRecord.create(json) record.commit() db.session.commit() search.get_source(record.id) # When a record is updated with deleted flag true, it is deleted in ES record['deleted'] = True record.commit() db.session.commit() with pytest.raises(NotFoundError): search.get_source(record.id)
def test_creating_deleted_record_and_undeleting_created_record_in_es(app): search = LiteratureSearch() json = { '$schema': 'http://localhost:5000/schemas/records/hep.json', 'document_type': [ 'article', ], 'titles': [ {'title': 'foo'}, ], 'deleted': True, '_collections': ['Literature'] } # When a record is created in the DB with deleted flag True, it is not created in ES. record = InspireRecord.create(json) record.commit() db.session.commit() with pytest.raises(NotFoundError): search.get_source(record.id) # When a record is undeleted, it is created in ES. record['deleted'] = False record.commit() db.session.commit() search.get_source(record.id) record._delete(force=True)
def test_receive_after_model_commit(app): """Test if records are correctly synced with ElasticSearch.""" json = { "$schema": "http://localhost:5000/schemas/records/hep.json", "Hello": "World" } record = InspireRecord.create(json) search = LiteratureSearch() es_record = search.get_source(record.id) assert es_record["Hello"] == "World" record["Hello"] = "INSPIRE" record.commit() es_record = search.get_source(record.id) assert es_record["Hello"] == "INSPIRE" record._delete(force=True) with pytest.raises(NotFoundError): es_record = search.get_source(record.id)
def test_edit_article_workflow_deleting(workflow_app, mocked_external_services): app_client = workflow_app.test_client() user = User.query.filter_by(email='*****@*****.**').one() login_user_via_session(app_client, user=user) record = { '$schema': 'http://localhost:5000/schemas/records/hep.json', 'arxiv_eprints': [{ 'categories': ['nucl-th'], 'value': '1802.03287' }], 'control_number': 123, 'document_type': ['article'], 'titles': [{ 'title': 'Resource Pooling in Large-Scale Content Delivery Systems' }], 'self': { '$ref': 'http://localhost:5000/schemas/records/hep.json' }, '_collections': ['Literature'] } factory = TestRecordMetadata.create_from_kwargs(json=record) eng_uuid = start('edit_article', data=factory.record_metadata.json) obj = WorkflowEngine.from_uuid(eng_uuid).objects[0] obj.id_user = user.get_id() assert obj.status == ObjectStatus.WAITING assert obj.extra_data['callback_url'] record = get_db_record('lit', 123) search = LiteratureSearch() search.get_source(record.id) # simulate changes in the editor and save obj.data['deleted'] = True payload = { 'id': obj.id, 'metadata': obj.data, '_extra_data': obj.extra_data } app_client.put(obj.extra_data['callback_url'], data=json.dumps(payload), content_type='application/json') obj = WorkflowEngine.from_uuid(eng_uuid).objects[0] assert obj.status == ObjectStatus.WAITING # waiting for robot_upload assert obj.data['deleted'] is True do_robotupload_callback( app=workflow_app, workflow_id=obj.id, recids=[obj.data['control_number']], ) record = get_db_record('lit', 123) assert record['deleted'] is True with pytest.raises(NotFoundError): search.get_source(record.id) obj = WorkflowEngine.from_uuid(eng_uuid).objects[0] assert obj.status == ObjectStatus.COMPLETED pending_records = WorkflowsPendingRecord.query.filter_by( workflow_id=obj.id).all() assert not pending_records
def test_edit_article_workflow_deleting(workflow_app, mocked_external_services): app_client = workflow_app.test_client() user = User.query.filter_by(email='*****@*****.**').one() login_user_via_session(app_client, user=user) record = { '$schema': 'http://localhost:5000/schemas/records/hep.json', 'arxiv_eprints': [ { 'categories': [ 'nucl-th' ], 'value': '1802.03287' } ], 'control_number': 123, 'document_type': ['article'], 'titles': [{'title': 'Resource Pooling in Large-Scale Content Delivery Systems'}], 'self': {'$ref': 'http://localhost:5000/schemas/records/hep.json'}, '_collections': ['Literature'] } factory = TestRecordMetadata.create_from_kwargs(json=record) eng_uuid = start('edit_article', data=factory.record_metadata.json) obj = WorkflowEngine.from_uuid(eng_uuid).objects[0] obj.id_user = user.get_id() assert obj.status == ObjectStatus.WAITING assert obj.extra_data['callback_url'] record = get_db_record('lit', 123) search = LiteratureSearch() search.get_source(record.id) # simulate changes in the editor and save obj.data['deleted'] = True payload = { 'id': obj.id, 'metadata': obj.data, '_extra_data': obj.extra_data } app_client.put( obj.extra_data['callback_url'], data=json.dumps(payload), content_type='application/json' ) obj = WorkflowEngine.from_uuid(eng_uuid).objects[0] assert obj.status == ObjectStatus.WAITING # waiting for robot_upload assert obj.data['deleted'] is True do_robotupload_callback( app=workflow_app, workflow_id=obj.id, recids=[obj.data['control_number']], ) record = get_db_record('lit', 123) assert record['deleted'] is True with pytest.raises(NotFoundError): search.get_source(record.id) obj = WorkflowEngine.from_uuid(eng_uuid).objects[0] assert obj.status == ObjectStatus.COMPLETED pending_records = WorkflowsPendingRecord.query.filter_by(workflow_id=obj.id).all() assert not pending_records