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
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
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
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
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
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)
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)
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