Esempio n. 1
0
def test_doi_publish_versions(app, location, minimal_record, identity_simple,
                              mocker):
    client = mocker.patch(
        "invenio_rdm_records.services.pids.providers.datacite."
        "DOIDataCiteClient")
    mocker.patch("invenio_rdm_records.services.pids.providers.datacite." +
                 "DataCiteRESTClient")
    mocker.patch("invenio_rdm_records.services.pids.providers.datacite." +
                 "DataCite43JSONSerializer")
    component = ExternalPIDsComponent(current_rdm_records.records_service)
    doi_provider = DOIDataCitePIDProvider(client)

    data = minimal_record.copy()
    # make sure `pids` field is added on create
    del data["pids"]

    # create a minimal draft
    draft = RDMDraft.create(data)
    component.create(identity_simple, data=data, record=draft)
    assert "pids" in draft and draft.pids == {}

    # publish
    record = RDMRecord.publish(draft)
    # NOTE: simulate metadata component required by datacite serialization
    record["metadata"] = draft["metadata"]
    component.publish(identity_simple, draft=draft, record=record)
    doi_v1 = record.pids["doi"]
    # DOI
    assert doi_v1
    assert doi_v1["identifier"]
    assert doi_v1["provider"] == "datacite"
    assert doi_v1["client"] == "datacite"  # Default since no values given

    doi_pid = doi_provider.get(doi_v1["identifier"])
    assert doi_pid.object_uuid == record.id

    # create a new version (v2) of the record
    draft_v2 = RDMDraft.new_version(record)
    component.new_version(identity_simple, draft=draft_v2, record=record)
    assert "pids" in draft and draft.pids == {}

    # publish v2
    record_v2 = RDMRecord.publish(draft_v2)
    # NOTE: simulate metadata component required by datacite serialization
    draft_v2["metadata"] = minimal_record["metadata"]
    component.publish(identity_simple, draft=draft_v2, record=record_v2)
    doi_v2 = record_v2.pids["doi"]
    # DOI
    assert doi_v2
    assert doi_v2["identifier"]
    assert doi_v2["provider"] == "datacite"
    assert doi_v2["client"] == "datacite"  # Default since no values given
    assert doi_v1 != doi_v2

    doi_v2_pid = doi_provider.get(doi_v2["identifier"])
    assert doi_v2_pid.object_uuid == record_v2.id

    assert doi_v1 != doi_v2
Esempio n. 2
0
def not_req_unmanaged_pid_cmp():
    service = RDMRecordService(config=TestServiceNReqUnmanConfig())

    return ExternalPIDsComponent(service=service)
Esempio n. 3
0
def req_managed_pid_cmp():
    service = RDMRecordService(config=TestServiceReqManConfig())

    return ExternalPIDsComponent(service=service)
Esempio n. 4
0
def external_pids_cmp():
    return ExternalPIDsComponent(service=TestService())