def datacite_provider(mocker):
    client = mocker.patch(
        "invenio_rdm_records.services.pids.providers.datacite."
        "DOIDataCiteClient")
    mocker.patch("invenio_rdm_records.services.pids.providers.datacite." +
                 "DataCiteRESTClient")

    return DOIDataCitePIDProvider(name="datacite", client=client)
Exemple #2
0
def test_create_managed_doi_with_value(req_managed_pid_cmp, minimal_record,
                                       identity_simple, mocker, location):
    client = mocker.patch(
        "invenio_rdm_records.services.pids.providers.datacite."
        "DOIDataCiteClient")
    mocker.patch("invenio_rdm_records.services.pids.providers.datacite." +
                 "DataCiteRESTClient")
    component = req_managed_pid_cmp

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

    # when provider is managed and required, and the identifier is in the
    # payload, it means that it was reserved via the `reserve` endpoint
    provider = DOIDataCitePIDProvider(client)
    pid = provider.create(draft)
    provider.reserve(pid, draft)

    pids = {
        "doi": {
            "identifier": pid.pid_value,
            "provider": "datacite",
            "client": "rdm"
        }
    }
    draft["pids"] = pids

    # publish
    record = RDMRecord.publish(draft)
    component.publish(identity_simple, draft=draft, record=record)
    assert record.pids == pids
    assert provider.get(pid.pid_value).is_registered()
Exemple #3
0
def test_datacite_provider_configuration(record, mocker):
    client = mocker.patch(
        "invenio_rdm_records.services.pids.providers.datacite."
        "DOIDataCiteClient")

    def custom_format_func(record, **kwargs):
        return "10.123/custom.func"

    def custom_format_func_2(record, **kwargs):
        return "10.125/custom.func"

    current_app.config['RDM_RECORDS_DOI_DATACITE_FORMAT'] = custom_format_func
    datacite_provider = DOIDataCitePIDProvider(name="datacite", client=client)
    assert datacite_provider.create(record).pid_value == "10.123/custom.func"

    prefix = client.prefix
    id = datacite_provider.generate_id(record)
    expected_result = f"{prefix}/datacite.{id}"
    current_app.config['RDM_RECORDS_DOI_DATACITE_FORMAT'] = None
    datacite_provider = DOIDataCitePIDProvider(name="datacite", client=client)
    assert datacite_provider.create(record).pid_value == expected_result

    datacite_provider = DOIDataCitePIDProvider(
        name="datacite", client=client,
        generate_doi_func=custom_format_func_2)  # noqa
    assert datacite_provider.create(record).pid_value == "10.125/custom.func"

    prefix = client.prefix
    id = datacite_provider.generate_id(record)
    expected_result = f"{prefix}/datacite2.{id}"
    current_app.config[
        'RDM_RECORDS_DOI_DATACITE_FORMAT'] = "{prefix}/datacite2.{id}"  # noqa
    datacite_provider = DOIDataCitePIDProvider(name="datacite", client=client)
    assert datacite_provider.create(record).pid_value == expected_result