def test_index_record(inspire_app, celery_app_with_context, celery_session_worker): models_committed.disconnect(index_after_commit) records = [ create_record_async("lit"), create_record_async("aut"), create_record_async("job"), create_record_async("jou"), create_record_async("exp"), create_record_async("con"), create_record_async("dat"), create_record_async("ins"), ] uuids = [record.id for record in records] task = index_records.delay(uuids) results = task.get(timeout=5) uuids = [str(uuid) for uuid in uuids] assert results == uuids for record in records: result = InspireSearch.get_record_data_from_es(record) assert record["control_number"] == result["control_number"] models_committed.connect(index_after_commit)
def test_match_references(inspire_app, cli, clean_celery_session): cited_data = { "document_type": ["article"], "dois": [{ "value": "10.1371/journal.pone.0188398" }], } cited_record = create_record_async("lit", data=cited_data) cited_record.index( delay=False) # reference-matcher requires cited record to be indexed citer_data = { "references": [{ "reference": { "dois": ["10.1371/journal.pone.0188398"] } }] } citer_record_1 = create_record_async("lit", data=citer_data) citer_record_2 = create_record_async("lit", data=citer_data) citer_record_3 = create_record_async("lit", data=citer_data) citer_ids = [citer_record_1.id, citer_record_2.id, citer_record_3.id] record_data = create_record_async("dat") record_data_uuids = record_data.id def assert_all_records_are_indexed(): current_search.flush_and_refresh("*") result = es_search("records-hep") uuids = get_value(result, "hits.hits._id") for uuid in citer_ids: assert str(uuid) in uuids result = es_search("records-data") uuids = get_value(result, "hits.hits._id") assert str(record_data_uuids) in uuids retry_until_pass(assert_all_records_are_indexed) result = cli.invoke(["match", "references", "-bs", 2]) assert result.exit_code == 0 for citer_id in citer_ids: updated_citer_record = LiteratureRecord.get_record(citer_id) assert (get_value(updated_citer_record, "references[0].record") == cited_record["self"])
def test_match_references(inspire_app, cli, celery_app_with_context, celery_session_worker): cited_data = { "document_type": ["article"], "dois": [{ "value": "10.1371/journal.pone.0188398" }], } cited_record = create_record_async("lit", data=cited_data) cited_record.index( delay=False) # reference-matcher requires cited record to be indexed citer_data = { "references": [{ "reference": { "dois": ["10.1371/journal.pone.0188398"] } }] } citer_record_1 = create_record_async("lit", data=citer_data) citer_record_2 = create_record_async("lit", data=citer_data) citer_record_3 = create_record_async("lit", data=citer_data) citer_ids = [citer_record_1.id, citer_record_2.id, citer_record_3.id] create_record_async("dat") result = cli.invoke(["match", "references", "-bs", 2]) assert result.exit_code == 0 for citer_id in citer_ids: updated_citer_record = LiteratureRecord.get_record(citer_id) assert (get_value(updated_citer_record, "references[0].record") == cited_record["self"])
def test_process_references_in_records_with_different_type_of_records_doesnt_throw_an_exception( inspire_app, celery_app_with_context, celery_session_worker): # disconnect this signal so records don't get indexed models_committed.disconnect(index_after_commit) cited_record_1 = LiteratureRecord.create(faker.record("lit")) cited_record_2 = LiteratureRecord.create(faker.record("lit")) data_citing_record_1 = faker.record( "lit", literature_citations=[cited_record_1["control_number"]]) citing_record_1 = LiteratureRecord.create(data_citing_record_1) data_citing_record_2 = faker.record( "lit", literature_citations=[cited_record_2["control_number"]]) citing_record_2 = LiteratureRecord.create(data_citing_record_2) db.session.commit() records = [ create_record_async("aut"), create_record_async("job"), create_record_async("jou"), create_record_async("exp"), create_record_async("con"), create_record_async("dat"), create_record_async("ins"), ] # reconnect signal before we call process_references_in_records models_committed.connect(index_after_commit) uuids = [record.id for record in records] + [citing_record_1.id, citing_record_2.id] task = process_references_in_records.delay(uuids) results = task.get(timeout=5) uuids = [str(uuid) for uuid in uuids] assert results == uuids result_cited_record_1 = InspireSearch.get_record_data_from_es( cited_record_1) expected_result_cited_record_1_citation_count = 1 assert (expected_result_cited_record_1_citation_count == result_cited_record_1["citation_count"]) result_cited_record_2 = InspireSearch.get_record_data_from_es( cited_record_2) expected_result_cited_record_2_citation_count = 1 assert (expected_result_cited_record_2_citation_count == result_cited_record_2["citation_count"])
def record_with_two_revisions(inspire_app, clean_celery_session): record_data = { "$schema": "http://localhost:5000/schemas/records/hep.json", "control_number": 111, "document_type": ["article"], "titles": [{"title": "record rev0"}], "self": {"$ref": "http://localhost:5000/api/literature/1243"}, "_collections": ["Literature"], } record = create_record_async("lit", data=record_data) record_data["titles"][0]["title"] = "record rev1" record.update(record_data) db.session.commit()
def test_index_record_deletes_a_deleted_record(inspire_app, clean_celery_session): record_to_delete = create_record_async("lit") record_to_delete_control_number = record_to_delete["control_number"] record_to_delete = InspireRecord.get_record_by_pid_value( record_to_delete_control_number, "lit") record_to_delete.delete() db.session.commit() uuids = [record_to_delete.id] task = index_records.delay(uuids) results = task.get(timeout=5) uuids = [str(uuid) for uuid in uuids] assert results == uuids with pytest.raises(TransportError): InspireSearch.get_record_data_from_es(record_to_delete)
def test_update_relations_recalculate_citations_with_different_type_of_records_doesnt_throw_an_exception( inspire_app, celery_app_with_context, celery_session_worker): data_cited = faker.record("lit", with_control_number=True) record_cited = InspireRecord.create(data_cited, disable_relations_update=True) db.session.commit() record_cited_control_number = record_cited["control_number"] data_citing = faker.record( "lit", literature_citations=[record_cited_control_number], with_control_number=True, ) record_citing = InspireRecord.create(data_citing, disable_relations_update=True) db.session.commit() records = [ create_record_async("aut"), create_record_async("job"), create_record_async("jou"), create_record_async("exp"), create_record_async("con"), create_record_async("dat"), create_record_async("ins"), ] uuids = [record.id for record in records] + [record_cited.id, record_citing.id] task = update_relations.delay(uuids) results = task.get(timeout=5) uuids = [str(uuid) for uuid in uuids] assert results == uuids result_record_cited = RecordCitations.query.filter_by( cited_id=record_cited.id).one() assert record_citing.id == result_record_cited.citer_id record_cited = InspireRecord.get_record_by_pid_value( record_cited_control_number, "lit") record_cited_citation_count = 1 assert record_cited_citation_count == record_cited.citation_count