added infrastructure code
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
"""Integration tests for ImageRepository."""
|
||||
|
||||
from uuid import UUID
|
||||
import pytest
|
||||
from PIL import Image
|
||||
from data_store.repositories.image_repository import ImageRepository
|
||||
|
||||
|
||||
def same_image(img1: Image.Image, img2: Image.Image) -> bool:
|
||||
"""Check if two images are the same based on their attributes."""
|
||||
return (
|
||||
img1.size == img2.size
|
||||
and img1.mode == img2.mode
|
||||
and list(img1.getdata()) == list(img2.getdata())
|
||||
)
|
||||
|
||||
|
||||
def test_get_image(
|
||||
image_in_minio: tuple[UUID, Image.Image],
|
||||
image_repository: ImageRepository,
|
||||
) -> None:
|
||||
"""Test retrieving an image from ImageRepository."""
|
||||
# Arrange
|
||||
image_id, expected_image = image_in_minio
|
||||
# Act
|
||||
retrieved_image = image_repository.get(image_id)
|
||||
# Assert
|
||||
assert retrieved_image is not None
|
||||
assert isinstance(retrieved_image, Image.Image)
|
||||
assert same_image(retrieved_image, expected_image)
|
||||
|
||||
|
||||
def test_put_image(
|
||||
image_repository: ImageRepository,
|
||||
image: Image.Image,
|
||||
job_id_list: list[UUID],
|
||||
) -> None:
|
||||
"""Test storing an image in ImageRepository."""
|
||||
# Arrange
|
||||
image_id = job_id_list[0]
|
||||
assert image_repository.get(image_id) is None
|
||||
# Act
|
||||
image_repository.put(image, image_id)
|
||||
# Assert
|
||||
received_image = image_repository.get(image_id)
|
||||
assert received_image is not None
|
||||
assert isinstance(received_image, Image.Image)
|
||||
assert received_image.size == image.size
|
||||
assert received_image.mode == image.mode
|
||||
assert list(received_image.getdata()) == list(image.getdata())
|
||||
|
||||
|
||||
def test_delete_image(
|
||||
image_in_minio: tuple[UUID, Image.Image],
|
||||
image_repository: ImageRepository,
|
||||
) -> None:
|
||||
"""Test deleting an image from ImageRepository."""
|
||||
# Arrange
|
||||
image_id, _ = image_in_minio
|
||||
assert image_repository.get(image_id) is not None
|
||||
# Act
|
||||
image_repository.delete(image_id)
|
||||
# Assert
|
||||
assert image_repository.get(image_id) is None
|
||||
|
||||
|
||||
def test_list_all_images(
|
||||
image_in_minio: tuple[UUID, Image.Image],
|
||||
image_repository: ImageRepository,
|
||||
) -> None:
|
||||
"""Test listing all images in ImageRepository."""
|
||||
# Arrange
|
||||
image_id, _ = image_in_minio
|
||||
# Act
|
||||
image_ids = image_repository.list_all()
|
||||
# Assert
|
||||
assert isinstance(image_ids, list)
|
||||
assert all(isinstance(i, UUID) for i in image_ids)
|
||||
assert image_id in image_ids
|
||||
|
||||
|
||||
def test_list_all_images_empty(
|
||||
image_repository: ImageRepository,
|
||||
) -> None:
|
||||
"""Test listing all images in an empty ImageRepository."""
|
||||
# Act
|
||||
image_ids = image_repository.list_all()
|
||||
# Assert
|
||||
assert isinstance(image_ids, list)
|
||||
assert len(image_ids) == 0
|
||||
|
||||
|
||||
# Allows local debugging by running file as script
|
||||
if __name__ == "__main__":
|
||||
pytest.main(["-s", "-v", __file__])
|
||||
Reference in New Issue
Block a user