Example #1
0
def test_minter_arxiv_eprints(inspire_app):
    arxiv_value_1 = faker.arxiv()
    arxiv_value_2 = faker.arxiv()
    data = {
        "arxiv_eprints": [{
            "value": arxiv_value_1
        }, {
            "value": arxiv_value_2
        }]
    }
    record = create_record_factory("lit", data=data, with_validation=True)
    data = record.json

    ArxivMinter.mint(record.id, data)

    expected_pids_len = 2
    epxected_pids_values = [arxiv_value_1, arxiv_value_2]
    expected_pids_provider = "external"
    expected_pids_status = PIDStatus.REGISTERED

    result_pids = (PersistentIdentifier.query.filter_by(
        object_uuid=record.id).filter_by(pid_type="arxiv").all())
    result_pids_len = len(result_pids)

    assert expected_pids_len == result_pids_len
    for pid in result_pids:
        assert expected_pids_provider == pid.pid_provider
        assert expected_pids_status == pid.status
        assert pid.pid_value in epxected_pids_values
Example #2
0
def test_minter_arxiv_eprints_duplicate(inspire_app):
    arxiv_value_1 = faker.arxiv()
    data = {
        "arxiv_eprints": [
            {
                "value": arxiv_value_1,
                "categories": ["cond-mat"]
            },
            {
                "value": arxiv_value_1,
                "categories": ["astro-ph"]
            },
        ]
    }
    record = create_record_factory("lit", data=data, with_validation=True)
    data = record.json

    ArxivMinter.mint(record.id, data)

    epxected_pid_value = arxiv_value_1
    expected_pid_provider = "external"
    expected_pid_status = PIDStatus.REGISTERED

    result_pid = (PersistentIdentifier.query.filter_by(
        object_uuid=record.id).filter_by(pid_type="arxiv").one())

    assert expected_pid_provider == result_pid.pid_provider
    assert expected_pid_status == result_pid.status
    assert epxected_pid_value == result_pid.pid_value
def test_literature_create_with_mutliple_pids(base_app, db, create_pidstore):
    doi_value = faker.doi()
    arxiv_value = faker.arxiv()
    data = {"arxiv_eprints": [{"value": arxiv_value}], "dois": [{"value": doi_value}]}
    data = faker.record("lit", with_control_number=True, data=data)

    expected_pids_len = 3
    expected_pid_lit_value = str(data["control_number"])
    expected_pid_arxiv_value = arxiv_value
    expected_pid_doi_value = doi_value

    record = LiteratureRecord.create(data)

    record_lit_pid = PersistentIdentifier.query.filter_by(pid_type="lit").one()
    record_arxiv_pid = PersistentIdentifier.query.filter_by(pid_type="arxiv").one()
    record_doi_pid = PersistentIdentifier.query.filter_by(pid_type="doi").one()

    record_total_pids = PersistentIdentifier.query.filter_by(
        object_uuid=record.id
    ).count()

    assert expected_pids_len == record_total_pids
    assert expected_pid_lit_value == record_lit_pid.pid_value
    assert expected_pid_arxiv_value == record_arxiv_pid.pid_value
    assert expected_pid_doi_value == record_doi_pid.pid_value
def test_literature_create_with_invalid_data_and_mutliple_pids(
    base_app, db, create_pidstore
):
    doi_value = faker.doi()
    arxiv_value = faker.arxiv()
    data = {"arxiv_eprints": [{"value": arxiv_value}], "dois": [{"value": doi_value}]}
    data = faker.record("lit", with_control_number=True, data=data)
    data["invalid_key"] = "should throw an error"
    pid_lit_value = str(data["control_number"])
    pid_arxiv_value = arxiv_value
    pid_doi_value = doi_value

    with pytest.raises(ValidationError):
        LiteratureRecord.create(data)

    record_lit_pid = PersistentIdentifier.query.filter_by(
        pid_value=pid_lit_value
    ).one_or_none()
    record_arxiv_pid = PersistentIdentifier.query.filter_by(
        pid_value=pid_arxiv_value
    ).one_or_none()
    record_doi_pid = PersistentIdentifier.query.filter_by(
        pid_value=pid_doi_value
    ).one_or_none()

    assert record_lit_pid is None
    assert record_arxiv_pid is None
    assert record_doi_pid is None
def test_literature_on_delete_through_metadata_update(base_app, db, es_clear):
    doi_value = faker.doi()
    arxiv_value = faker.arxiv()
    data = {"arxiv_eprints": [{"value": arxiv_value}], "dois": [{"value": doi_value}]}
    data = faker.record("lit", data=data, with_control_number=True)

    record = LiteratureRecord.create(data)

    expected_pid_lit_value = str(data["control_number"])
    expected_pid_arxiv_value = arxiv_value
    expected_pid_doi_value = doi_value

    record_lit_pid = PersistentIdentifier.query.filter_by(pid_type="lit").one()
    record_arxiv_pid = PersistentIdentifier.query.filter_by(pid_type="arxiv").one()
    record_doi_pid = PersistentIdentifier.query.filter_by(pid_type="doi").one()

    assert expected_pid_lit_value == record_lit_pid.pid_value
    assert expected_pid_arxiv_value == record_arxiv_pid.pid_value
    assert expected_pid_doi_value == record_doi_pid.pid_value

    record["deleted"] = True
    record.update(dict(record))
    record_lit_pid = PersistentIdentifier.query.filter_by(pid_type="lit").one()
    record_arxiv_pid = PersistentIdentifier.query.filter_by(
        pid_type="arxiv"
    ).one_or_none()
    record_doi_pid = PersistentIdentifier.query.filter_by(pid_type="doi").one_or_none()

    assert None == record_arxiv_pid
    assert None == record_doi_pid
    assert PIDStatus.DELETED == record_lit_pid.status
def test_import_article_arxiv_id_already_in_inspire(base_app, db, es):
    arxiv_value = faker.arxiv()
    data = {"arxiv_eprints": [{"value": arxiv_value}]}
    data = faker.record("lit", with_control_number=True, data=data)
    LiteratureRecord.create(data)

    with pytest.raises(ExistingArticleError):
        import_article(f"arXiv:{arxiv_value}")
def test_import_article_view_404_website_not_reachable(inspire_app):
    arxiv_id = faker.arxiv()
    with requests_mock.Mocker() as mocker, inspire_app.test_client() as client:
        mocker.get(
            f"http://export.arxiv.org/oai2?verb=GetRecord&identifier=oai:arXiv.org:{arxiv_id}&metadataPrefix=arXiv",
            status_code=500,
        )
        resp = client.get(f"/literature/import/arXiv:{arxiv_id}")
        assert resp.status_code == 502
def test_import_article_arxiv_409_id_already_in_inspire(inspire_app):
    arxiv_id = faker.arxiv()
    data = {"arxiv_eprints": [{"value": arxiv_id}]}
    data = faker.record("lit", with_control_number=True, data=data)
    create_record("lit", data=data)

    with inspire_app.test_client() as client:
        resp = client.get(f"/literature/import/arXiv:{arxiv_id}")
    assert resp.status_code == 409
Example #9
0
def test_dump_arxiv_id():
    arxiv_id = faker.arxiv()
    data = {**DEFAULT_DATA_TO_DUMP, "arxiv_eprints": [{"value": arxiv_id}]}
    record = faker.record("lit", data=data)

    result = Literature().dump(record).data
    expected = {**DEFAULT_DUMP, "arxiv_id": arxiv_id}

    assert result == expected
Example #10
0
def test_archive_prefix():
    arxiv_value = faker.arxiv()
    record = {"document_type": ["article"], "arxiv_eprints": [{"value": arxiv_value}]}

    expected_archive_prefix = "arXiv"
    schema = BibTexCommonSchema()

    result = schema.dump(record).data
    result_archivePrefix = result["archivePrefix"]
    assert expected_archive_prefix == result_archivePrefix
Example #11
0
def test_eprint():
    arxiv_value = faker.arxiv()
    record = {"document_type": ["article"], "arxiv_eprints": [{"value": arxiv_value}]}

    expected_eprint = arxiv_value
    schema = BibTexCommonSchema()

    result = schema.dump(record).data
    result_eprint = result["eprint"]
    assert expected_eprint == result_eprint
Example #12
0
def test_mitner_arxiv_eprints_already_existing(inspire_app):
    arxiv_value = faker.arxiv()
    data = {"arxiv_eprints": [{"value": arxiv_value}]}

    record_with_arxiv = create_record_factory("lit", data=data, with_validation=True)
    ArxivMinter.mint(record_with_arxiv.id, record_with_arxiv.json)

    record_with_existing_arxiv = create_record_factory("lit", data)
    with pytest.raises(PIDAlreadyExists):
        ArxivMinter.mint(record_with_existing_arxiv.id, record_with_existing_arxiv.json)
Example #13
0
def test_mitner_arxiv_eprints_missing_schema(inspire_app):
    arxiv_value = faker.arxiv()
    data = {"arxiv_eprints": [{"value": arxiv_value}]}
    record = create_record_factory("lit", data=data)

    record_data = record.json
    record_id = record.id
    record_data.pop("$schema")

    with pytest.raises(MissingSchema):
        ArxivMinter.mint(record_id, record_data)
Example #14
0
def test_import_article_view_409_because_article_already_exists(
    api_client, base_app, db, create_record
):
    arxiv_value = faker.arxiv()
    data = {"arxiv_eprints": [{"value": arxiv_value}]}
    data = faker.record("lit", with_control_number=True, data=data)
    create_record("lit", data=data)

    resp = api_client.get(f"/literature/import/arXiv:{arxiv_value}")

    expected_msg = f"Article arXiv:{arxiv_value} already in Inspire"
    result_msg = json.loads(resp.data)["message"]

    assert expected_msg in result_msg
    assert resp.status_code == 409
def test_import_article_view_409_because_article_already_exists(inspire_app):
    arxiv_value = faker.arxiv()
    data = {"arxiv_eprints": [{"value": arxiv_value}]}
    data = faker.record("lit", with_control_number=True, data=data)
    record = create_record("lit", data=data)

    with inspire_app.test_client() as client:
        resp = client.get(f"/literature/import/arXiv:{arxiv_value}")

    expected_msg = f"The article arXiv:{arxiv_value} already exists in Inspire"
    expected_recid = str(record["control_number"])
    result_msg = orjson.loads(resp.data)["message"]
    result_recid = orjson.loads(resp.data)["recid"]

    assert expected_msg == result_msg
    assert expected_recid == result_recid
    assert resp.status_code == 409
def test_literature_create_with_arxiv_eprints(base_app, db, es):
    arxiv_value = faker.arxiv()
    data = {"arxiv_eprints": [{"value": arxiv_value}]}
    data = faker.record("lit", data=data)

    record = LiteratureRecord.create(data)
    record_db = RecordMetadata.query.filter_by(id=record.id).one()

    assert record == record_db.json

    expected_arxiv_pid_value = arxiv_value
    expected_arxiv_pid_type = "arxiv"
    expected_arxiv_pid_provider = "external"

    record_pid_arxiv = PersistentIdentifier.query.filter_by(
        pid_type="arxiv", object_uuid=record.id
    ).one()

    assert record.model.id == record_pid_arxiv.object_uuid
    assert expected_arxiv_pid_value == record_pid_arxiv.pid_value
    assert expected_arxiv_pid_type == record_pid_arxiv.pid_type
    assert expected_arxiv_pid_provider == record_pid_arxiv.pid_provider