From 6480936941d02e7dbe532ffa39bfc87a1594ff59 Mon Sep 17 00:00:00 2001 From: VKTB <45173816+VKTB@users.noreply.github.com> Date: Tue, 11 Feb 2025 17:45:32 +0000 Subject: [PATCH] Write unit tests for new store method #104 --- object_storage_api/stores/attachment.py | 5 ++++ test/unit/stores/test_attachment.py | 8 +++--- test/unit/stores/test_image.py | 34 +++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 4 deletions(-) diff --git a/object_storage_api/stores/attachment.py b/object_storage_api/stores/attachment.py index 6129dde..d52eba7 100644 --- a/object_storage_api/stores/attachment.py +++ b/object_storage_api/stores/attachment.py @@ -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): @@ -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 diff --git a/test/unit/stores/test_attachment.py b/test/unit/stores/test_attachment.py index 5d67d20..d1a0ce9 100644 --- a/test/unit/stores/test_attachment.py +++ b/test/unit/stores/test_attachment.py @@ -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.""" @@ -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) @@ -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.""" diff --git a/test/unit/stores/test_image.py b/test/unit/stores/test_image.py index ba82474..1f3c712 100644 --- a/test/unit/stores/test_image.py +++ b/test/unit/stores/test_image.py @@ -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."""