Files
Brian Bjarke Jensen 0ba860b892
Code Quality Pipeline / code-quality (pull_request) Failing after 1m19s
Test Python Package / test (pull_request) Failing after 50s
added infrastructure code
2025-09-18 12:13:39 +02:00

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__])