96 lines
2.7 KiB
Python
96 lines
2.7 KiB
Python
"""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__])
|