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