Skip to content

Commit 3fd6081

Browse files
committed
test and fix integration with dandi schema changes
1 parent 3a663cc commit 3fd6081

File tree

2 files changed

+41
-1
lines changed

2 files changed

+41
-1
lines changed

dandiapi/api/datacite.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ def generate_doi_data(
108108
doi = self.format_doi(dandiset_id)
109109
# Dandiset DOI is the same as version url without version
110110
metadata['url'] = metadata['url'].rsplit('/', 1)[0]
111+
metadata['version'] = version.dandiset.draft_version.metadata['id']
111112

112113
metadata['doi'] = doi
113114

dandiapi/api/tests/test_datacite.py

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,12 +79,15 @@ def test_format_doi(datacite_client, mocker):
7979

8080

8181
@pytest.mark.django_db
82-
def test_generate_doi_data(datacite_client, published_version, mocker):
82+
def test_generate_doi_data(datacite_client, published_version, draft_version_factory, mocker):
8383
"""Test generating DOI data for a version."""
8484
# Mock to_datacite to avoid actual validation
8585
mock_to_datacite = mocker.patch('dandischema.datacite.to_datacite')
8686
mock_to_datacite.return_value = {'data': {'attributes': {}}}
8787

88+
# Create a draft version for Dandiset DOI generation
89+
draft_version_factory(dandiset=published_version.dandiset)
90+
8891
# Test Version DOI
8992
doi_string, payload = datacite_client.generate_doi_data(published_version, version_doi=True)
9093
dandiset_id = published_version.dandiset.identifier
@@ -416,3 +419,39 @@ def test_delete_or_hide_doi_get_error(datacite_client_unsafe, mock_requests, moc
416419
assert not mock_requests.put.called
417420
assert not mock_requests.delete.called
418421
mock_logger.exception.assert_called_once()
422+
423+
424+
@pytest.mark.django_db
425+
def test_generate_doi_data_schema_integration(
426+
datacite_client, published_version, draft_version_factory
427+
):
428+
"""Test generating DOI data with real dandischema.datacite integration."""
429+
# This test exercises the actual dandischema.datacite.to_datacite function
430+
# without mocking, ensuring our schema changes work with the archive
431+
432+
# Create a draft version for Dandiset DOI generation
433+
draft_version_factory(dandiset=published_version.dandiset)
434+
435+
# Test Version DOI with real schema integration
436+
doi_string, payload = datacite_client.generate_doi_data(published_version, version_doi=True)
437+
dandiset_id = published_version.dandiset.identifier
438+
version_id = published_version.version
439+
expected_doi = f'{datacite_client.api_prefix}/dandi.{dandiset_id}/{version_id}'
440+
441+
assert doi_string == expected_doi
442+
assert 'doi' in published_version.metadata
443+
444+
# Verify the payload structure from real to_datacite
445+
assert 'data' in payload
446+
assert 'attributes' in payload['data']
447+
assert 'doi' in payload['data']['attributes']
448+
assert payload['data']['attributes']['doi'] == expected_doi
449+
450+
# Test Dandiset DOI with real schema integration
451+
doi_string, payload = datacite_client.generate_doi_data(published_version, version_doi=False)
452+
expected_doi = f'{datacite_client.api_prefix}/dandi.{dandiset_id}'
453+
454+
assert doi_string == expected_doi
455+
assert 'data' in payload
456+
assert 'attributes' in payload['data']
457+
assert payload['data']['attributes']['doi'] == expected_doi

0 commit comments

Comments
 (0)