コード例 #1
0
def test_phonetic_blocks_keep_order_in_redis_based_on_timestamp(
    base_app, db, es, redis
):
    with freeze_time(datetime.datetime(2015, 8, 18, 8, 51, 50)):
        author_data = {"authors": [{"full_name": "Ellis, John Richard"}]}
        data = faker.record("lit", data=author_data)
        InspireRecord.create(data)
    with freeze_time(datetime.datetime(2015, 8, 18, 9, 51, 50)):
        author_data2 = {"authors": [{"full_name": "Jimmy"}]}
        data2 = faker.record("lit", data=author_data2)
        LiteratureRecord.create(data2)

    assert "ELj" == redis.zpopmin("author_phonetic_blocks")[0][0]
    assert "JANY" == redis.zpopmin("author_phonetic_blocks")[0][0]
コード例 #2
0
def test_lock_is_created_for_hal_push_task(mocked_lock, inspire_app, get_fixture):
    record_json = orjson.loads(get_fixture("hal_preprod_record.json"))
    record_data = faker.record("lit", data=record_json)
    record = InspireRecord.create(record_data)

    institute_json = orjson.loads(get_fixture("hal_preprod_institute.json"))
    institute_data = faker.record("ins", data=institute_json)
    InspireRecord.create(institute_data)

    _hal_push(record)
    recid = record["control_number"]
    lock_name = f"hal:{recid}"

    assert mocked_lock.mock_calls[0][1][0] == lock_name
    assert mocked_lock.mock_calls[0][2] == {"blocking": True}
コード例 #3
0
ファイル: test_utils.py プロジェクト: inspirehep/inspirehep
def test_get_domains(app):
    app.config["HAL_DOMAIN_MAPPING"] = {
        "Accelerators": "phys.phys.phys-acc-ph",
        "Astrophysics": "phys.astr",
        "Computing": "info",
        "Data Analysis and Statistics": "phys.phys.phys-data-an",
        "Experiment-HEP": "phys.hexp",
        "Experiment-Nucl": "phys.nexp",
        "General Physics": "phys.phys.phys-gen-ph",
        "Gravitation and Cosmology": "phys.grqc",
        "Instrumentation": "phys.phys.phys-ins-det",
        "Lattice": "phys.hlat",
        "Math and Math Physics": "phys.mphy",
        "Other": "phys",
        "Phenomenology-HEP": "phys.hphe",
        "Theory-HEP": "phys.hthe",
        "Theory-Nucl": "phys.nucl",
    }

    schema = load_schema("hep")
    subschema = schema["properties"]["inspire_categories"]

    data = {"inspire_categories": [{"term": "Experiment-HEP"}]}
    assert validate(data["inspire_categories"], subschema) is None

    record_data = faker.record("lit", data)
    record = InspireRecord.create(record_data)

    expected = ["phys.hexp"]
    result = get_domains(record)
    assert expected == result

    record.delete()
コード例 #4
0
def test_creating_record_with_id_provided_but_without_control_number_properly_mints_identifiers(
    inspire_app, ):
    record_data = {
        "$schema": "https://inspirebeta.net/schemas/records/hep.json",
        "arxiv_eprints": [{
            "value": "2105.06728",
            "categories": ["astro-ph.IM"]
        }],
        "_collections": ["Literature"],
        "document_type": ["article"],
        "titles": [{
            "title": "Some title"
        }],
    }

    id_ = uuid.uuid4()
    rec = InspireRecord.create(data=record_data, id_=id_)

    assert PersistentIdentifier.query.filter_by(object_uuid=id_).count() == 2
    assert (PersistentIdentifier.query.filter_by(pid_type="arxiv",
                                                 pid_value="2105.06728",
                                                 object_uuid=id_).count() == 1)
    cn_minted = PersistentIdentifier.query.filter_by(pid_type="lit",
                                                     object_uuid=id_).one()
    assert cn_minted.pid_value == str(rec["control_number"])
コード例 #5
0
ファイル: test_tasks.py プロジェクト: inspirehep/inspirehep
def test_recalculate_references_recalculates_more_than_10_references(
        inspire_app, clean_celery_session):
    journal_data = faker.record("jou", with_control_number=True)
    journal = InspireRecord.create(journal_data)
    journal_record_reference = journal["self"]["$ref"]

    literature_data = faker.record("lit")
    literature_data.update({
        "publication_info": [{
            "journal_record": {
                "$ref": journal_record_reference
            }
        }]
    })
    for i in range(11):
        InspireRecord.create(literature_data)

    db.session.commit()

    def assert_all_records_in_es():
        literature_records_from_es = list(LiteratureSearch().query_from_iq(
            query_string=
            f"publication_info.journal_record.$ref: {journal_record_reference}"
        ).scan())
        journal_record_from_es = InspireSearch.get_record_data_from_es(journal)

        assert len(literature_records_from_es) == 11 and journal_record_from_es

    retry_until_pass(assert_all_records_in_es, retry_interval=5)

    merged_journal_data = faker.record("jou", with_control_number=True)
    merged_journal_data.update(
        {"deleted_records": [{
            "$ref": journal_record_reference
        }]})

    merged_journal_record = InspireRecord.create(merged_journal_data)
    db.session.commit()

    def assert_recalculate_references_task():
        literature_records_from_es = list(LiteratureSearch().query_from_iq(
            query_string=
            f'publication_info.journal_record.$ref: {merged_journal_record["self"]["$ref"]}'
        ).scan())
        assert len(literature_records_from_es) == 11

    retry_until_pass(assert_recalculate_references_task, retry_interval=3)
コード例 #6
0
ファイル: test_utils.py プロジェクト: inspirehep/inspirehep
def test_get_hal_id_map(app, get_fixture):
    record_json = orjson.loads(get_fixture("_get_hal_id_map.json"))
    record_data = faker.record("lit", data=record_json)
    record = InspireRecord.create(record_data)

    institute_json = orjson.loads(
        get_fixture("_get_hal_id_map_institution.json"))
    institute_data = faker.record("ins", data=institute_json)
    institute_record = InspireRecord.create(institute_data)

    result = _get_hal_id_map(record)
    expected = {912490: "53946"}

    assert result == expected

    record.delete()
    institute_record.delete()
コード例 #7
0
def mock_job_create_and_update_time(date, data=None):
    record_data = faker.record("job", data=data)
    record = InspireRecord.create(record_data)
    mock_datetime = mock.PropertyMock(return_value=date)
    type(record).created = mock_datetime
    type(record).updated = mock_datetime
    record._index()
    return record
コード例 #8
0
def test_record_update_not_run_orcid_when_passed_parameter_to_disable_orcid(
    orcid_mock, base_app, db
):
    data1 = faker.record("lit")
    data2 = faker.record("lit")
    record1 = InspireRecord.create(data1, disable_orcid_push=True)
    record1.update(data2, disable_orcid_push=True)
    assert orcid_mock.call_count == 0
コード例 #9
0
def test_record_update_runs_citation_recalculate_on_default(
    citation_recalculate_mock, base_app, db
):
    data1 = faker.record("lit")
    data2 = faker.record("lit")
    record1 = InspireRecord.create(data1)
    record1.update(data2)
    assert citation_recalculate_mock.call_count == 2
コード例 #10
0
def test_record_update_skips_citation_recalculate_when_passed_parameter_to_skip(
    citation_recalculate_mock, base_app, db
):
    data1 = faker.record("lit")
    data2 = faker.record("lit")
    record1 = InspireRecord.create(data1, disable_citation_update=True)
    record1.update(data2, disable_citation_update=True)
    assert citation_recalculate_mock.call_count == 0
コード例 #11
0
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
コード例 #12
0
def test_update_relations(inspire_app, celery_app_with_context,
                          celery_session_worker):
    conference_data = faker.record("con", with_control_number=True)
    conference_record = InspireRecord.create(conference_data)

    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"]

    conference_control_number = conference_record["control_number"]
    conf_ref = f"http://localhost:8000/api/conferences/{conference_control_number}"

    data = faker.record(
        "lit",
        literature_citations=[record_cited_control_number],
        with_control_number=True,
    )

    data["publication_info"] = [{"conference_record": {"$ref": conf_ref}}]
    data["document_type"] = ["conference paper"]

    record = InspireRecord.create(data, disable_relations_update=True)
    db.session.commit()

    uuids = [record_cited.id, record.id]
    task = update_relations.delay(uuids)

    task.get(timeout=5)

    result_record_cited = RecordCitations.query.filter_by(
        cited_id=record_cited.id).one()

    assert record.id == result_record_cited.citer_id

    record_cited = InspireRecord.get_record_by_pid_value(
        record_cited_control_number, "lit")
    expected_record_cited_citation_count = 1
    assert expected_record_cited_citation_count == record_cited.citation_count

    conf_paper = ConferenceLiterature.query.filter_by(
        conference_uuid=conference_record.id).one()

    assert conf_paper.literature_uuid == record.id
コード例 #13
0
def test_create_record_from_db_depending_on_its_pid_type(base_app, db, es):
    data = faker.record("con")
    record = InspireRecord.create(data)
    assert type(record) == ConferencesRecord
    assert record.pid_type == "con"

    record = ConferencesRecord.create(data)
    assert type(record) == ConferencesRecord
    assert record.pid_type == "con"
コード例 #14
0
def test_create_record_from_db_depending_on_its_pid_type(inspire_app):
    data = faker.record("ins")
    record = InspireRecord.create(data)
    assert type(record) == InstitutionsRecord
    assert record.pid_type == "ins"

    record = InstitutionsRecord.create(data)
    assert type(record) == InstitutionsRecord
    assert record.pid_type == "ins"
コード例 #15
0
def test_literature_citation_count_property(base_app, db, es):
    data = faker.record("lit")
    record = InspireRecord.create(data)

    data2 = faker.record("lit", literature_citations=[record["control_number"]])
    record2 = LiteratureRecord.create(data2)

    assert record.citation_count == 1
    assert record2.citation_count == 0
コード例 #16
0
def test_create_record_from_db_depending_on_its_pid_type(inspire_app):
    data = faker.record("jou")
    record = InspireRecord.create(data)
    assert type(record) == JournalsRecord
    assert record.pid_type == "jou"

    record = JournalsRecord.create(data)
    assert type(record) == JournalsRecord
    assert record.pid_type == "jou"
コード例 #17
0
def test_create_record_from_db_depending_on_its_pid_type(inspire_app):
    data = faker.record("exp")
    record = InspireRecord.create(data)
    assert isinstance(record, ExperimentsRecord)
    assert record.pid_type == "exp"

    record = ExperimentsRecord.create(data)
    assert isinstance(record, ExperimentsRecord)
    assert record.pid_type == "exp"
コード例 #18
0
def test_create_record_from_db_depending_on_its_pid_type(base_app, db, es):
    data = faker.record("exp")
    record = InspireRecord.create(data)
    assert type(record) == ExperimentsRecord
    assert record.pid_type == "exp"

    record = ExperimentsRecord.create(data)
    assert type(record) == ExperimentsRecord
    assert record.pid_type == "exp"
コード例 #19
0
def test_create_record_from_db_depending_on_its_pid_type(inspire_app):
    data = faker.record("con")
    record = InspireRecord.create(data)
    assert isinstance(record, ConferencesRecord)
    assert record.pid_type == "con"

    record = ConferencesRecord.create(data)
    assert isinstance(record, ConferencesRecord)
    assert record.pid_type == "con"
コード例 #20
0
def test_create_record_from_db_depending_on_its_pid_type(inspire_app):
    data = faker.record("aut")
    record = InspireRecord.create(data)
    assert isinstance(record, AuthorsRecord)
    assert record.pid_type == "aut"

    record = AuthorsRecord.create(data)
    assert isinstance(record, AuthorsRecord)
    assert record.pid_type == "aut"
コード例 #21
0
ファイル: test_api_data.py プロジェクト: michamos/inspirehep
def test_create_record_from_db_depending_on_its_pid_type(base_app, db, es):
    data = faker.record("dat")
    record = InspireRecord.create(data)
    assert type(record) == DataRecord
    assert record.pid_type == "dat"

    record = DataRecord.create(data)
    assert type(record) == DataRecord
    assert record.pid_type == "dat"
コード例 #22
0
def test_create_record_from_db_depending_on_its_pid_type(inspire_app):
    data = faker.record("sem")
    record = InspireRecord.create(data)
    assert type(record) == SeminarsRecord
    assert record.pid_type == "sem"

    record = SeminarsRecord.create(data)
    assert type(record) == SeminarsRecord
    assert record.pid_type == "sem"
コード例 #23
0
ファイル: test_tasks.py プロジェクト: hanadikaleel/inspirehep
def test_recalculate_references_after_conference_record_merge(
        inspire_app, clean_celery_session):
    conference_data = faker.record("con", with_control_number=True)
    conference = InspireRecord.create(conference_data)
    conference_record_reference = conference["self"]["$ref"]

    literature_data = faker.record("lit", with_control_number=True)
    literature_data.update({
        "publication_info": [{
            "conference_record": {
                "$ref": conference_record_reference
            }
        }]
    })
    literature = InspireRecord.create(literature_data)

    db.session.commit()

    def assert_all_records_in_es():
        literature_record_from_es = InspireSearch.get_record_data_from_es(
            literature)
        conference_record_from_es = InspireSearch.get_record_data_from_es(
            conference)
        assert literature_record_from_es and conference_record_from_es

    retry_until_pass(assert_all_records_in_es, retry_interval=3)

    merged_conference_data = faker.record("con", with_control_number=True)
    merged_conference_data.update(
        {"deleted_records": [{
            "$ref": conference_record_reference
        }]})
    merged_conference_record = InspireRecord.create(merged_conference_data)

    db.session.commit()

    def assert_recalculate_references_task():
        literature_record_from_es = InspireSearch.get_record_data_from_es(
            literature)
        assert (literature_record_from_es["publication_info"][0]
                ["conference_record"]["$ref"] ==
                merged_conference_record["self"]["$ref"])

    retry_until_pass(assert_recalculate_references_task, retry_interval=3)
コード例 #24
0
def test_unicode_data(inspire_app, get_fixture):
    record_json = orjson.loads(get_fixture("hal_preprod_unicode_record.json"))
    record_data = faker.record("lit", data=record_json)
    record = InspireRecord.create(record_data)

    institute_json = orjson.loads(
        get_fixture("hal_preprod_unicode_institute.json"))
    institute_data = faker.record("ins", data=institute_json)
    InspireRecord.create(institute_data)

    receipt = _hal_push(record)

    assert receipt
    assert receipt.parsed
    updated_record = InspireRecord.get_record_by_pid_value(
        record["control_number"], "lit")
    assert (get_values_for_schema(
        get_value(updated_record, "external_system_identifiers", []),
        "HAL")[0] == receipt.id)
コード例 #25
0
def create_record_async(record_type, data=None, skip_validation=False):
    data = faker.record(
        record_type,
        data=data,
        with_control_number=True,
        skip_validation=skip_validation,
    )
    record = InspireRecord.create(data)
    db.session.commit()
    return record
コード例 #26
0
    def _create_record(record_type, data=None):
        accepted_record_types = base_app.config["PID_TYPE_TO_INDEX"].keys()

        if record_type not in accepted_record_types:
            raise ValueError(f"{record_type} is not supported")
        index = base_app.config["PID_TYPE_TO_INDEX"][record_type]
        record_data = faker.record(record_type, data=data)
        record = InspireRecord.create(record_data)
        record._indexing = record._index()
        es_clear.indices.refresh(index)
        return record
コード例 #27
0
ファイル: test_base.py プロジェクト: inspirehep/inspirehep
def test_job_update_force_undelete_flag(inspire_app):
    data = faker.record("con", with_control_number=True)
    data_1 = faker.record("con", with_control_number=True)

    record = InspireRecord.create(data)
    record_1 = InspireRecord.create(data_1)

    db.session.commit()

    record.delete()
    record_1.delete()

    db.session.commit()

    record["deleted"] = False
    record.update(dict(record), force_undelete=True)
    assert not record["deleted"]

    record_1["deleted"] = False
    with pytest.raises(ValidationError):
        record_1.update(dict(record_1))
コード例 #28
0
def test_literature_can_cite_only_existing_records(base_app, db, es):
    data = faker.record("dat")
    record = InspireRecord.create(data)

    data2 = faker.record("lit", data_citations=[record["control_number"], 9999, 9998])
    record2 = LiteratureRecord.create(data2)

    assert len(record.model.citations) == 1
    assert len(record.model.references) == 0
    assert len(record2.model.citations) == 0
    assert len(record2.model.references) == 1
    assert len(RecordCitations.query.all()) == 1
コード例 #29
0
def test_process_references_in_records_doesnt_call_get_modified_references_for_non_lit_records(
    get_modified_references_mock, inspire_app
):
    data = {
        "$schema": "https://inspire/schemas/records/authors.json",
        "_collections": ["Authors"],
        "name": {"value": "Doe, John"},
    }
    record = InspireRecord.create(data)
    process_references_in_records([record.id])
    get_modified_references_mock.assert_not_called()

    data = {
        "$schema": "http://localhost:5000/schemas/records/hep.json",
        "titles": [{"title": "Test a valid record"}],
        "document_type": ["article"],
        "_collections": ["Literature"],
    }
    record = InspireRecord.create(data)
    process_references_in_records([record.id])
    assert get_modified_references_mock.call_count == 1
コード例 #30
0
def test_create_record_update_citation_table_for_literature_citation(inspire_app):
    data = faker.record("dat")
    record = DataRecord.create(data)

    data2 = faker.record("lit", data_citations=[record["control_number"]])
    record2 = InspireRecord.create(data2)

    assert len(record.model.citations) == 1
    assert len(record.model.references) == 0
    assert len(record2.model.citations) == 0
    assert len(record2.model.references) == 1
    assert len(RecordCitations.query.all()) == 1