From 97cc107cca3cf37d0bbcfea7821a3e253d6cb3e1 Mon Sep 17 00:00:00 2001 From: Brian Helba Date: Mon, 29 Sep 2025 03:04:31 -0400 Subject: [PATCH 1/2] Remove use of the `zarr_archive_factory` test fixture --- dandiapi/api/tests/factories.py | 9 +++++ dandiapi/api/tests/test_asset.py | 25 +++++-------- dandiapi/api/tests/test_audit.py | 8 ++-- dandiapi/api/tests/test_dandiset.py | 4 +- dandiapi/api/tests/test_permission.py | 13 +++---- dandiapi/api/tests/test_tasks.py | 26 +++++++------ dandiapi/api/tests/test_version.py | 7 ++-- .../zarr/tests/test_ingest_zarr_archive.py | 31 +++++++++------- dandiapi/zarr/tests/test_zarr.py | 37 +++++++++---------- dandiapi/zarr/tests/test_zarr_upload.py | 3 +- 10 files changed, 84 insertions(+), 79 deletions(-) diff --git a/dandiapi/api/tests/factories.py b/dandiapi/api/tests/factories.py index 3fa29f47d..7b2c964e0 100644 --- a/dandiapi/api/tests/factories.py +++ b/dandiapi/api/tests/factories.py @@ -220,6 +220,7 @@ class EmbargoedAssetBlobFactory(AssetBlobFactory): class DraftAssetFactory(factory.django.DjangoModelFactory): class Meta: model = Asset + skip_postgeneration_save = True path = factory.Faker('file_path', absolute=False, extension='nwb') blob = factory.SubFactory(AssetBlobFactory) @@ -238,6 +239,14 @@ def metadata(self) -> dict: metadata.pop(key, None) return metadata + @factory.post_generation + def versions(self, create: bool, extracted: list[Version]) -> None: # noqa: FBT001 + if not create: + return + if extracted is None: + extracted = [] + self.versions.add(*extracted) + class PublishedAssetFactory(DraftAssetFactory): published = True diff --git a/dandiapi/api/tests/test_asset.py b/dandiapi/api/tests/test_asset.py index 32c541184..656d07690 100644 --- a/dandiapi/api/tests/test_asset.py +++ b/dandiapi/api/tests/test_asset.py @@ -19,7 +19,6 @@ from dandiapi.api.services.publish import publish_asset from dandiapi.api.tasks.scheduled import validate_pending_asset_metadata from dandiapi.api.tests.factories import ( - DandisetFactory, DraftVersionFactory, PublishedVersionFactory, UserFactory, @@ -146,7 +145,7 @@ def test_publish_asset(draft_asset: Asset): @pytest.mark.django_db -def test_asset_total_size(asset_factory, asset_blob_factory, zarr_archive_factory): +def test_asset_total_size(asset_factory, asset_blob_factory): # This asset blob should only be counted once, # despite belonging to multiple assets and multiple versions. asset_blob = asset_blob_factory() @@ -165,10 +164,7 @@ def test_asset_total_size(asset_factory, asset_blob_factory, zarr_archive_factor assert Asset.total_size() == asset_blob.size - zarr_archive = zarr_archive_factory() - # give it some size - zarr_archive.size = 100 - zarr_archive.save() # save adjusted .size into DB + zarr_archive = ZarrArchiveFactory.create(size=100) # adding of an asset with zarr should be reflected asset3 = asset_factory(zarr=zarr_archive, blob=None) @@ -238,7 +234,7 @@ def test_asset_full_metadata_zarr(draft_asset_factory): @pytest.mark.django_db def test_asset_full_metadata_access( - draft_asset_factory, asset_blob_factory, zarr_archive_factory, embargoed_zarr_archive_factory + draft_asset_factory, asset_blob_factory, embargoed_zarr_archive_factory ): raw_metadata = { 'foo': 'bar', @@ -248,7 +244,7 @@ def test_asset_full_metadata_access( metadata=raw_metadata, blob=None, zarr=embargoed_zarr_archive_factory() ) open_zarr_asset: Asset = draft_asset_factory( - metadata=raw_metadata, blob=None, zarr=zarr_archive_factory() + metadata=raw_metadata, blob=None, zarr=ZarrArchiveFactory.create() ) embargoed_blob_asset: Asset = draft_asset_factory( @@ -327,11 +323,11 @@ def test_asset_rest_list_include_metadata(api_client, version, asset, asset_fact @pytest.mark.django_db -def test_asset_rest_list_zarr_only(api_client, draft_asset_factory, zarr_archive_factory): +def test_asset_rest_list_zarr_only(api_client, draft_asset_factory): draft_version = DraftVersionFactory.create() # Create two blob assets and one zarr asset zarr_asset = draft_asset_factory( - blob=None, zarr=zarr_archive_factory(dandiset=draft_version.dandiset) + blob=None, zarr=ZarrArchiveFactory.create(dandiset=draft_version.dandiset) ) draft_version.assets.add(zarr_asset) draft_version.assets.add(draft_asset_factory()) @@ -1047,13 +1043,11 @@ def test_asset_create_zarr_validated(api_client, zarr_file_factory): @pytest.mark.django_db -def test_asset_create_zarr_wrong_dandiset(api_client, zarr_archive_factory): +def test_asset_create_zarr_wrong_dandiset(api_client): user = UserFactory.create() draft_version = DraftVersionFactory.create(dandiset__owners=[user]) api_client.force_authenticate(user=user) - - zarr_dandiset = DandisetFactory.create() - zarr_archive = zarr_archive_factory(dandiset=zarr_dandiset) + zarr_archive = ZarrArchiveFactory.create() path = 'test/create/asset.txt' metadata = { @@ -1630,7 +1624,6 @@ def test_asset_rest_delete_zarr( @pytest.mark.django_db def test_asset_rest_delete_zarr_modified( api_client, - zarr_archive_factory, zarr_file_factory, ): """Ensure that a zarr can be associated to an asset, modified, then the asset deleted.""" @@ -1639,7 +1632,7 @@ def test_asset_rest_delete_zarr_modified( api_client.force_authenticate(user=user) # Ensure zarr is ingested - zarr_archive = zarr_archive_factory( + zarr_archive = ZarrArchiveFactory.create( status=ZarrArchiveStatus.UPLOADED, dandiset=draft_version.dandiset ) zarr_file_factory(zarr_archive=zarr_archive, size=100) diff --git a/dandiapi/api/tests/test_audit.py b/dandiapi/api/tests/test_audit.py index 8d9c01fe0..55b8909db 100644 --- a/dandiapi/api/tests/test_audit.py +++ b/dandiapi/api/tests/test_audit.py @@ -311,10 +311,10 @@ def test_audit_zarr_create(api_client): @pytest.mark.django_db -def test_audit_upload_zarr_chunks(api_client, zarr_archive_factory): +def test_audit_upload_zarr_chunks(api_client): user = UserFactory.create() draft_version = DraftVersionFactory.create(dandiset__owners=[user]) - zarr_archive = zarr_archive_factory(dandiset=draft_version.dandiset) + zarr_archive = ZarrArchiveFactory.create(dandiset=draft_version.dandiset) # Request some chunk uploads. paths = ['a.txt', 'b.txt', 'c.txt'] @@ -352,10 +352,10 @@ def test_audit_finalize_zarr(api_client, zarr_file_factory): @pytest.mark.django_db -def test_audit_delete_zarr_chunks(api_client, zarr_archive_factory, zarr_file_factory): +def test_audit_delete_zarr_chunks(api_client, zarr_file_factory): user = UserFactory.create() draft_version = DraftVersionFactory.create(dandiset__owners=[user]) - zarr_archive = zarr_archive_factory(dandiset=draft_version.dandiset) + zarr_archive = ZarrArchiveFactory.create(dandiset=draft_version.dandiset) zarr_files = [zarr_file_factory(zarr_archive=zarr_archive) for i in range(2)] ingest_zarr_archive(zarr_archive.zarr_id) diff --git a/dandiapi/api/tests/test_dandiset.py b/dandiapi/api/tests/test_dandiset.py index 5d07b7767..3d64bec42 100644 --- a/dandiapi/api/tests/test_dandiset.py +++ b/dandiapi/api/tests/test_dandiset.py @@ -21,6 +21,7 @@ PublishedVersionFactory, UserFactory, ) +from dandiapi.zarr.tests.factories import ZarrArchiveFactory from .fuzzy import ( DANDISET_ID_RE, @@ -938,13 +939,12 @@ def test_dandiset_rest_delete(api_client, embargo_status, success): @pytest.mark.django_db def test_dandiset_rest_delete_with_zarrs( api_client, - zarr_archive_factory, draft_asset_factory, ): user = UserFactory.create() api_client.force_authenticate(user=user) draft_version = DraftVersionFactory.create(dandiset__owners=[user]) - zarr = zarr_archive_factory(dandiset=draft_version.dandiset) + zarr = ZarrArchiveFactory.create(dandiset=draft_version.dandiset) asset = draft_asset_factory(blob=None, zarr=zarr) # Add paths diff --git a/dandiapi/api/tests/test_permission.py b/dandiapi/api/tests/test_permission.py index 3eb088dd0..5447cb58a 100644 --- a/dandiapi/api/tests/test_permission.py +++ b/dandiapi/api/tests/test_permission.py @@ -3,7 +3,8 @@ import pytest from rest_framework.permissions import SAFE_METHODS -from dandiapi.api.tests.factories import DandisetFactory, DraftVersionFactory, UserFactory +from dandiapi.api.tests.factories import DraftVersionFactory, UserFactory +from dandiapi.zarr.tests.factories import ZarrArchiveFactory @pytest.mark.parametrize( @@ -73,19 +74,17 @@ def test_approved_or_readonly( api_client, draft_asset_factory, - zarr_archive_factory, method, url_format, owner_required, ): user = UserFactory.create() - dandiset = DandisetFactory.create() - version = DraftVersionFactory.create(dandiset=dandiset) - zarr = zarr_archive_factory(dandiset=dandiset) + version = DraftVersionFactory.create() + zarr = ZarrArchiveFactory.create(dandiset=version.dandiset) asset = draft_asset_factory() version.assets.add(asset) - url = url_format.format(dandiset=dandiset, asset=asset, zarr=zarr) + url = url_format.format(dandiset=version.dandiset, asset=asset, zarr=zarr) response = getattr(api_client, method)(url) # Safe method, read only is okay @@ -106,7 +105,7 @@ def test_approved_or_readonly( # denied after reading the request body if url == '/api/zarr/' and method == 'post': response = getattr(api_client, method)( - url, data={'name': 'test', 'dandiset': dandiset.identifier} + url, data={'name': 'test', 'dandiset': version.dandiset.identifier} ) else: response = getattr(api_client, method)(url) diff --git a/dandiapi/api/tests/test_tasks.py b/dandiapi/api/tests/test_tasks.py index 433a93aea..b1d6e559f 100644 --- a/dandiapi/api/tests/test_tasks.py +++ b/dandiapi/api/tests/test_tasks.py @@ -19,6 +19,7 @@ from dandiapi.api.models import Asset, Version from dandiapi.api.tests.factories import DraftVersionFactory, UserFactory from dandiapi.zarr.models import ZarrArchiveStatus +from dandiapi.zarr.tests.factories import ZarrArchiveFactory from .fuzzy import HTTP_URL_RE, URN_RE, UTC_ISO_TIMESTAMP_RE @@ -290,17 +291,20 @@ def test_validate_version_metadata_no_assets(): @pytest.mark.django_db -def test_validate_version_metadata_empty_zarr_asset(zarr_archive_factory, draft_asset_factory): +def test_validate_version_metadata_empty_zarr_asset(draft_asset_factory): draft_version = DraftVersionFactory.create() - asset = draft_asset_factory( + draft_asset_factory( blob=None, - zarr=zarr_archive_factory( - status=ZarrArchiveStatus.COMPLETE, checksum=EMPTY_CHECKSUM, size=0, file_count=0 + zarr=ZarrArchiveFactory.create( + dandiset=draft_version.dandiset, + status=ZarrArchiveStatus.COMPLETE, + checksum=EMPTY_CHECKSUM, + size=0, + file_count=0, ), status=Asset.Status.VALID, + versions=[draft_version], ) - assert asset.size == 0 - draft_version.assets.add(asset) # Since the zarr asset has zero size, a validation error should be produced tasks.validate_version_metadata_task(draft_version.id) @@ -316,11 +320,12 @@ def test_validate_version_metadata_empty_zarr_asset(zarr_archive_factory, draft_ @pytest.mark.django_db -def test_validate_version_metadata_only_zarr_assets(zarr_archive_factory, draft_asset_factory): +def test_validate_version_metadata_only_zarr_assets(draft_asset_factory): draft_version = DraftVersionFactory.create() - asset = draft_asset_factory( + draft_asset_factory( blob=None, - zarr=zarr_archive_factory( + zarr=ZarrArchiveFactory.create( + dandiset=draft_version.dandiset, status=ZarrArchiveStatus.COMPLETE, checksum=compute_zarr_checksum( [ZarrArchiveFile(path=Path('foo/bar'), size=100, digest=hashlib.md5().hexdigest())] @@ -329,9 +334,8 @@ def test_validate_version_metadata_only_zarr_assets(zarr_archive_factory, draft_ file_count=1, ), status=Asset.Status.VALID, + versions=[draft_version], ) - assert asset.size > 0 - draft_version.assets.add(asset) tasks.validate_version_metadata_task(draft_version.id) draft_version.refresh_from_db() diff --git a/dandiapi/api/tests/test_version.py b/dandiapi/api/tests/test_version.py index 8d3d5057c..23e7aba6d 100644 --- a/dandiapi/api/tests/test_version.py +++ b/dandiapi/api/tests/test_version.py @@ -18,6 +18,7 @@ PublishedVersionFactory, UserFactory, ) +from dandiapi.zarr.tests.factories import ZarrArchiveFactory if TYPE_CHECKING: from rest_framework.test import APIClient @@ -390,11 +391,10 @@ def test_version_size( asset_factory, asset_blob_factory, embargoed_asset_blob_factory, - zarr_archive_factory, ): version.assets.add(asset_factory(blob=asset_blob_factory(size=100))) version.assets.add(asset_factory(blob=embargoed_asset_blob_factory(size=200))) - version.assets.add(asset_factory(blob=None, zarr=zarr_archive_factory(size=400))) + version.assets.add(asset_factory(blob=None, zarr=ZarrArchiveFactory.create(size=400))) add_version_asset_paths(version=version) assert version.size == 700 @@ -830,7 +830,6 @@ def test_version_rest_publish_unembargo_in_progress(api_client: APIClient): def test_version_rest_publish_zarr( api_client, draft_asset_factory, - zarr_archive_factory, zarr_file_factory, ): user = UserFactory.create() @@ -838,7 +837,7 @@ def test_version_rest_publish_zarr( api_client.force_authenticate(user=user) # create and ingest zarr archive - zarr_archive = zarr_archive_factory(dandiset=draft_version.dandiset, status='Uploaded') + zarr_archive = ZarrArchiveFactory.create(dandiset=draft_version.dandiset, status='Uploaded') zarr_file_factory(zarr_archive=zarr_archive) ingest_zarr_archive(zarr_archive.zarr_id) zarr_archive.refresh_from_db() diff --git a/dandiapi/zarr/tests/test_ingest_zarr_archive.py b/dandiapi/zarr/tests/test_ingest_zarr_archive.py index e5d056813..d4d6fa55f 100644 --- a/dandiapi/zarr/tests/test_ingest_zarr_archive.py +++ b/dandiapi/zarr/tests/test_ingest_zarr_archive.py @@ -10,12 +10,13 @@ from dandiapi.api.tests.factories import DandisetFactory, DraftVersionFactory, UserFactory from dandiapi.zarr.models import ZarrArchive, ZarrArchiveStatus from dandiapi.zarr.tasks import ingest_dandiset_zarrs, ingest_zarr_archive +from dandiapi.zarr.tests.factories import ZarrArchiveFactory @pytest.mark.django_db(transaction=True) -def test_ingest_zarr_archive(zarr_archive_factory, zarr_file_factory): +def test_ingest_zarr_archive(zarr_file_factory): # Create zarr with uploaded status so it can be ingested - zarr: ZarrArchive = zarr_archive_factory(status=ZarrArchiveStatus.UPLOADED) + zarr: ZarrArchive = ZarrArchiveFactory.create(status=ZarrArchiveStatus.UPLOADED) files = [ zarr_file_factory(zarr_archive=zarr, path='foo'), zarr_file_factory(zarr_archive=zarr, path='bar'), @@ -42,8 +43,8 @@ def test_ingest_zarr_archive(zarr_archive_factory, zarr_file_factory): @pytest.mark.django_db(transaction=True) -def test_ingest_zarr_archive_empty(zarr_archive_factory): - zarr: ZarrArchive = zarr_archive_factory(status=ZarrArchiveStatus.UPLOADED) +def test_ingest_zarr_archive_empty(): + zarr: ZarrArchive = ZarrArchiveFactory.create(status=ZarrArchiveStatus.UPLOADED) # Compute checksum ingest_zarr_archive(str(zarr.zarr_id)) @@ -57,8 +58,8 @@ def test_ingest_zarr_archive_empty(zarr_archive_factory): @pytest.mark.django_db(transaction=True) -def test_ingest_zarr_archive_force(zarr_archive_factory, zarr_file_factory): - zarr: ZarrArchive = zarr_archive_factory() +def test_ingest_zarr_archive_force(zarr_file_factory): + zarr: ZarrArchive = ZarrArchiveFactory.create() # Perform initial ingest zarr_file_factory(zarr_archive=zarr) @@ -84,9 +85,9 @@ def test_ingest_zarr_archive_force(zarr_archive_factory, zarr_file_factory): @pytest.mark.django_db(transaction=True) -def test_ingest_zarr_archive_assets(zarr_archive_factory, zarr_file_factory, draft_asset_factory): +def test_ingest_zarr_archive_assets(zarr_file_factory, draft_asset_factory): # Create zarr and asset - zarr: ZarrArchive = zarr_archive_factory(status=ZarrArchiveStatus.UPLOADED) + zarr: ZarrArchive = ZarrArchiveFactory.create(status=ZarrArchiveStatus.UPLOADED) asset = draft_asset_factory(zarr=zarr, blob=None) # Assert asset size, metadata @@ -107,13 +108,13 @@ def test_ingest_zarr_archive_assets(zarr_archive_factory, zarr_file_factory, dra @pytest.mark.django_db(transaction=True) -def test_ingest_zarr_archive_modified(zarr_archive_factory, zarr_file_factory): +def test_ingest_zarr_archive_modified(zarr_file_factory): """Ensure that if the zarr associated to an asset is modified and then ingested, it succeeds.""" user = UserFactory.create() draft_version = DraftVersionFactory.create(dandiset__owners=[user]) # Ensure zarr is ingested with non-zero size - zarr_archive = zarr_archive_factory( + zarr_archive = ZarrArchiveFactory.create( dandiset=draft_version.dandiset, status=ZarrArchiveStatus.UPLOADED ) zarr_file_factory(zarr_archive=zarr_archive, size=100) @@ -148,13 +149,13 @@ def test_ingest_zarr_archive_modified(zarr_archive_factory, zarr_file_factory): @pytest.mark.django_db(transaction=True) -def test_ingest_zarr_archive_sets_version_pending(zarr_archive_factory, zarr_file_factory): +def test_ingest_zarr_archive_sets_version_pending(zarr_file_factory): """Ensure that when a zarr is ingested, it sets the version back to PENDING.""" draft_version = DraftVersionFactory.create(status=Version.Status.VALID) assert draft_version.status == Version.Status.VALID # Ensure zarr has non-zero size - zarr_archive = zarr_archive_factory( + zarr_archive = ZarrArchiveFactory.create( dandiset=draft_version.dandiset, status=ZarrArchiveStatus.UPLOADED ) zarr_file_factory(zarr_archive=zarr_archive, size=100) @@ -169,12 +170,14 @@ def test_ingest_zarr_archive_sets_version_pending(zarr_archive_factory, zarr_fil @pytest.mark.django_db(transaction=True) -def test_ingest_dandiset_zarrs(zarr_archive_factory, zarr_file_factory): +def test_ingest_dandiset_zarrs(zarr_file_factory): dandiset = DandisetFactory.create() for _ in range(10): zarr_file_factory( path='foo/a', - zarr_archive=zarr_archive_factory(dandiset=dandiset, status=ZarrArchiveStatus.UPLOADED), + zarr_archive=ZarrArchiveFactory.create( + dandiset=dandiset, status=ZarrArchiveStatus.UPLOADED + ), ) # Run ingest diff --git a/dandiapi/zarr/tests/test_zarr.py b/dandiapi/zarr/tests/test_zarr.py index 70b67de25..3b15c8716 100644 --- a/dandiapi/zarr/tests/test_zarr.py +++ b/dandiapi/zarr/tests/test_zarr.py @@ -5,7 +5,6 @@ from dandiapi.api.models.dandiset import Dandiset from dandiapi.api.services.permissions.dandiset import ( - add_dandiset_owner, get_dandiset_owners, replace_dandiset_owners, ) @@ -133,8 +132,8 @@ def test_zarr_rest_create_unembargoing(api_client): @pytest.mark.django_db -def test_zarr_rest_get(api_client, zarr_archive_factory, zarr_file_factory): - zarr_archive = zarr_archive_factory(status=ZarrArchiveStatus.UPLOADED) +def test_zarr_rest_get(api_client, zarr_file_factory): + zarr_archive = ZarrArchiveFactory.create(status=ZarrArchiveStatus.UPLOADED) zarr_file = zarr_file_factory(zarr_archive=zarr_archive) # Ingest @@ -171,15 +170,15 @@ def test_zarr_rest_get_embargoed(api_client, embargoed_zarr_archive_factory): @pytest.mark.django_db -def test_zarr_rest_list_embargoed(api_client, zarr_archive_factory): +def test_zarr_rest_list_embargoed(api_client): user = UserFactory.create() api_client.force_authenticate(user=user) open_dandiset = DandisetFactory.create(embargo_status=Dandiset.EmbargoStatus.OPEN) embargoed_dandiset = DandisetFactory.create(embargo_status=Dandiset.EmbargoStatus.EMBARGOED) # Create some embargoed and some open zarrs - open_zarrs = [zarr_archive_factory(dandiset=open_dandiset) for _ in range(3)] - embargoed_zarrs = [zarr_archive_factory(dandiset=embargoed_dandiset) for _ in range(3)] + open_zarrs = [ZarrArchiveFactory.create(dandiset=open_dandiset) for _ in range(3)] + embargoed_zarrs = [ZarrArchiveFactory.create(dandiset=embargoed_dandiset) for _ in range(3)] # Assert only open zarrs are returned zarrs = api_client.get('/api/zarr/').json()['results'] @@ -195,15 +194,15 @@ def test_zarr_rest_list_embargoed(api_client, zarr_archive_factory): @pytest.mark.django_db -def test_zarr_rest_list_filter(api_client, zarr_archive_factory): +def test_zarr_rest_list_filter(api_client): # Create dandisets and zarrs dandiset_a: Dandiset = DandisetFactory.create() - zarr_archive_a_a: ZarrArchive = zarr_archive_factory(dandiset=dandiset_a, name='test') - zarr_archive_a_b: ZarrArchive = zarr_archive_factory(dandiset=dandiset_a, name='unique') + zarr_archive_a_a: ZarrArchive = ZarrArchiveFactory.create(dandiset=dandiset_a, name='test') + zarr_archive_a_b: ZarrArchive = ZarrArchiveFactory.create(dandiset=dandiset_a, name='unique') dandiset_b: Dandiset = DandisetFactory.create() - zarr_archive_b_a: ZarrArchive = zarr_archive_factory(dandiset=dandiset_b, name='test') - zarr_archive_b_b: ZarrArchive = zarr_archive_factory(dandiset=dandiset_b, name='unique2') + zarr_archive_b_a: ZarrArchive = ZarrArchiveFactory.create(dandiset=dandiset_b, name='test') + zarr_archive_b_b: ZarrArchive = ZarrArchiveFactory.create(dandiset=dandiset_b, name='unique2') # Test dandiset filter with dandiset a resp = api_client.get('/api/zarr/', {'dandiset': dandiset_a.identifier}) @@ -238,10 +237,10 @@ def test_zarr_rest_list_filter(api_client, zarr_archive_factory): @pytest.mark.django_db -def test_zarr_rest_get_very_big(api_client, zarr_archive_factory): +def test_zarr_rest_get_very_big(api_client): ten_quadrillion = 10**16 ten_petabytes = 10**16 - zarr_archive = zarr_archive_factory(file_count=ten_quadrillion, size=ten_petabytes) + zarr_archive = ZarrArchiveFactory.create(file_count=ten_quadrillion, size=ten_petabytes) assert zarr_archive.file_count == ten_quadrillion assert zarr_archive.size == ten_petabytes @@ -278,14 +277,14 @@ def test_zarr_rest_get_empty(api_client): @pytest.mark.django_db def test_zarr_rest_delete_file( api_client, - zarr_archive_factory, zarr_file_factory, ): user = UserFactory.create() api_client.force_authenticate(user=user) # Create zarr and assign user perms - zarr_archive = zarr_archive_factory(status=ZarrArchiveStatus.UPLOADED) - add_dandiset_owner(zarr_archive.dandiset, user) + zarr_archive = ZarrArchiveFactory.create( + status=ZarrArchiveStatus.UPLOADED, dandiset__owners=[user] + ) # Upload file and ingest zarr_file = zarr_file_factory(zarr_archive=zarr_archive) @@ -324,14 +323,14 @@ def test_zarr_rest_delete_file( @pytest.mark.django_db def test_zarr_rest_delete_file_asset_metadata( api_client, - zarr_archive_factory, zarr_file_factory, asset_factory, ): user = UserFactory.create() api_client.force_authenticate(user=user) - zarr_archive = zarr_archive_factory(status=ZarrArchiveStatus.UPLOADED) - add_dandiset_owner(zarr_archive.dandiset, user) + zarr_archive = ZarrArchiveFactory.create( + status=ZarrArchiveStatus.UPLOADED, dandiset__owners=[user] + ) asset = asset_factory(zarr=zarr_archive, blob=None) diff --git a/dandiapi/zarr/tests/test_zarr_upload.py b/dandiapi/zarr/tests/test_zarr_upload.py index b44ed9e95..1eb619b64 100644 --- a/dandiapi/zarr/tests/test_zarr_upload.py +++ b/dandiapi/zarr/tests/test_zarr_upload.py @@ -15,12 +15,11 @@ @pytest.mark.parametrize('embargoed', [False, True]) def test_zarr_rest_upload_start( api_client, - zarr_archive_factory, embargoed: bool, # noqa: FBT001 ): user = UserFactory.create() api_client.force_authenticate(user=user) - zarr_archive = zarr_archive_factory( + zarr_archive = ZarrArchiveFactory.create( dandiset__owners=[user], dandiset__embargo_status=Dandiset.EmbargoStatus.EMBARGOED if embargoed From 8fbbfdfedee8fd9f3d24a49f2b7b71271134b186 Mon Sep 17 00:00:00 2001 From: Brian Helba Date: Mon, 29 Sep 2025 03:22:25 -0400 Subject: [PATCH 2/2] Remove use of the `embargoed_zarr_archive_factory` test fixture --- dandiapi/api/tests/test_asset.py | 8 +++----- dandiapi/api/tests/test_unembargo.py | 5 ++--- dandiapi/zarr/tests/test_zarr.py | 6 +++--- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/dandiapi/api/tests/test_asset.py b/dandiapi/api/tests/test_asset.py index 656d07690..9b0e5b837 100644 --- a/dandiapi/api/tests/test_asset.py +++ b/dandiapi/api/tests/test_asset.py @@ -25,7 +25,7 @@ ) from dandiapi.zarr.models import ZarrArchiveStatus from dandiapi.zarr.tasks import ingest_zarr_archive -from dandiapi.zarr.tests.factories import ZarrArchiveFactory +from dandiapi.zarr.tests.factories import EmbargoedZarrArchiveFactory, ZarrArchiveFactory from .fuzzy import HTTP_URL_RE, TIMESTAMP_RE, URN_RE, UTC_ISO_TIMESTAMP_RE, UUID_RE @@ -233,15 +233,13 @@ def test_asset_full_metadata_zarr(draft_asset_factory): @pytest.mark.django_db -def test_asset_full_metadata_access( - draft_asset_factory, asset_blob_factory, embargoed_zarr_archive_factory -): +def test_asset_full_metadata_access(draft_asset_factory, asset_blob_factory): raw_metadata = { 'foo': 'bar', 'schemaVersion': settings.DANDI_SCHEMA_VERSION, } embargoed_zarr_asset: Asset = draft_asset_factory( - metadata=raw_metadata, blob=None, zarr=embargoed_zarr_archive_factory() + metadata=raw_metadata, blob=None, zarr=EmbargoedZarrArchiveFactory.create() ) open_zarr_asset: Asset = draft_asset_factory( metadata=raw_metadata, blob=None, zarr=ZarrArchiveFactory.create() diff --git a/dandiapi/api/tests/test_unembargo.py b/dandiapi/api/tests/test_unembargo.py index f49cb084a..4ce0f6dc4 100644 --- a/dandiapi/api/tests/test_unembargo.py +++ b/dandiapi/api/tests/test_unembargo.py @@ -29,7 +29,7 @@ from dandiapi.api.tests.factories import DandisetFactory, DraftVersionFactory, UserFactory from dandiapi.zarr.models import ZarrArchive, ZarrArchiveStatus from dandiapi.zarr.tasks import ingest_zarr_archive -from dandiapi.zarr.tests.factories import ZarrArchiveFactory +from dandiapi.zarr.tests.factories import EmbargoedZarrArchiveFactory, ZarrArchiveFactory if TYPE_CHECKING: from zarr_checksum.generators import ZarrArchiveFile @@ -227,7 +227,6 @@ def test_remove_dandiset_manifest_tags(): def test_unembargo_dandiset( asset_factory, embargoed_asset_blob_factory, - embargoed_zarr_archive_factory, zarr_file_factory, mailoutbox, ): @@ -242,7 +241,7 @@ def test_unembargo_dandiset( blob_asset = asset_factory(blob=embargoed_blob, status=Asset.Status.VALID) draft_version.assets.add(blob_asset) - zarr_archive: ZarrArchive = embargoed_zarr_archive_factory( + zarr_archive: ZarrArchive = EmbargoedZarrArchiveFactory.create( dandiset=dandiset, status=ZarrArchiveStatus.UPLOADED ) zarr_files: list[ZarrArchiveFile] = [ diff --git a/dandiapi/zarr/tests/test_zarr.py b/dandiapi/zarr/tests/test_zarr.py index 3b15c8716..c8988fe47 100644 --- a/dandiapi/zarr/tests/test_zarr.py +++ b/dandiapi/zarr/tests/test_zarr.py @@ -12,7 +12,7 @@ from dandiapi.api.tests.fuzzy import UUID_RE from dandiapi.zarr.models import ZarrArchive, ZarrArchiveStatus from dandiapi.zarr.tasks import ingest_zarr_archive -from dandiapi.zarr.tests.factories import ZarrArchiveFactory +from dandiapi.zarr.tests.factories import EmbargoedZarrArchiveFactory, ZarrArchiveFactory @pytest.mark.django_db @@ -154,11 +154,11 @@ def test_zarr_rest_get(api_client, zarr_file_factory): @pytest.mark.django_db -def test_zarr_rest_get_embargoed(api_client, embargoed_zarr_archive_factory): +def test_zarr_rest_get_embargoed(api_client): user = UserFactory.create() api_client.force_authenticate(user=user) dandiset = DandisetFactory.create(embargo_status=Dandiset.EmbargoStatus.EMBARGOED) - embargoed_zarr_archive = embargoed_zarr_archive_factory(dandiset=dandiset) + embargoed_zarr_archive = EmbargoedZarrArchiveFactory.create(dandiset=dandiset) assert user not in get_dandiset_owners(embargoed_zarr_archive.dandiset) resp = api_client.get(f'/api/zarr/{embargoed_zarr_archive.zarr_id}/')