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