Skip to content

Commit

Permalink
Write unit tests for new store method #104
Browse files Browse the repository at this point in the history
  • Loading branch information
VKTB committed Feb 11, 2025
1 parent df1c2b0 commit 6480936
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 4 deletions.
5 changes: 5 additions & 0 deletions object_storage_api/stores/attachment.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,9 @@ def delete_many(self, object_keys: list[str]) -> None:
"""
logger.info("Deleting attachment files with object keys: %s from the object store", object_keys)

# There is some duplicate code here, due to the attachments and images methods being very similar
# pylint: disable=duplicate-code

batch_size = 1000
# Loop through the list of object keys in steps of `batch_size`
for i in range(0, len(object_keys), batch_size):
Expand All @@ -107,3 +110,5 @@ def delete_many(self, object_keys: list[str]) -> None:
Bucket=object_storage_config.bucket_name.get_secret_value(),
Delete={"Objects": [{"Key": key} for key in batch]},
)

# pylint: enable=duplicate-code
8 changes: 4 additions & 4 deletions test/unit/stores/test_attachment.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,9 +66,6 @@ def test_delete(self):
self.check_delete_success()


# pylint: enable=duplicate-code


class DeleteManyDSL(AttachmentStoreDSL):
"""Base class for `delete_many` tests."""

Expand All @@ -78,7 +75,7 @@ def call_delete_many(self, object_keys: list[str]) -> None:
"""
Calls the `AttachmentStore` `delete_many` method.
:param object_keys: Keys of the attachment to delete.
:param object_keys: Keys of the attachments to delete.
"""
self._delete_many_object_keys = object_keys
self.attachment_store.delete_many(object_keys)
Expand All @@ -100,6 +97,9 @@ def test_delete_many(self):
self.check_delete_many_success()


# pylint: enable=duplicate-code


class CreatePresignedPostDSL(AttachmentStoreDSL):
"""Base class for `create_presigned_post` tests."""

Expand Down
34 changes: 34 additions & 0 deletions test/unit/stores/test_image.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,40 @@ def test_delete(self):
self.check_delete_success()


class DeleteManyDSL(ImageStoreDSL):
"""Base class for `delete_many` tests."""

_delete_many_object_keys: list[str]

def call_delete_many(self, object_keys: list[str]) -> None:
"""
Calls the `ImageStore` `delete_many` method.
:param object_keys: Keys of the images to delete.
"""
self._delete_many_object_keys = object_keys
self.image_store.delete_many(object_keys)

def check_delete_many_success(self) -> None:
"""Checks that a prior call to `call_delete_many` worked as expected."""
self.mock_s3_client.delete_objects.assert_called_once_with(
Bucket=object_storage_config.bucket_name.get_secret_value(),
Delete={"Objects": [{"Key": key} for key in self._delete_many_object_keys]},
)


class TestDeleteMany(DeleteManyDSL):
"""Tests for deleting images from object storage by object keys."""

def test_delete_many(self):
"""Test deleting images from object storage."""
self.call_delete_many(["object-key"])
self.check_delete_many_success()


# pylint: enable=duplicate-code


class CreatePresignedURLDSL(ImageStoreDSL):
"""Base class for `create` tests."""

Expand Down

0 comments on commit 6480936

Please sign in to comment.