added infrastructure code
Code Quality Pipeline / code-quality (pull_request) Failing after 1m19s
Test Python Package / test (pull_request) Failing after 50s

This commit is contained in:
Brian Bjarke Jensen
2025-09-18 12:13:39 +02:00
parent 9b4f0daf58
commit 0ba860b892
34 changed files with 3390 additions and 1 deletions
+116
View File
@@ -0,0 +1,116 @@
"""Integration tests for JobRepository."""
from uuid import UUID
import pytest
from PIL import Image
from data_store.repositories.job_repository import JobRepository
from data_store.dto import Job
def same_image(img1: Image.Image, img2: Image.Image) -> bool:
"""Check if two images are the same based on their attributes."""
assert img1.size == img2.size
assert img1.mode == img2.mode
assert list(img1.getdata()) == list(img2.getdata())
return True
def same_job(job1: Job, job2: Job) -> bool:
"""Check if two Job instances are the same based on their attributes."""
assert job1.job_id == job2.job_id
assert same_image(job1.image, job2.image)
assert job1.annotation == job2.annotation
return True
def test_get_job(
job_in_minio: Job,
job_repository: JobRepository,
) -> None:
"""Test retrieving a job from JobRepository."""
# Arrange
job_id = job_in_minio.job_id
# Act
retrieved_job = job_repository.get(job_id)
# Assert
assert retrieved_job is not None
assert isinstance(retrieved_job, Job)
assert same_job(retrieved_job, job_in_minio)
def test_get_job_without_image_returns_none(
annotation_in_minio: tuple[UUID, object],
job_repository: JobRepository,
) -> None:
"""Test retrieving a job without an image returns None."""
# Arrange
job_id, _ = annotation_in_minio
# Act
retrieved_job = job_repository.get(job_id)
# Assert
assert retrieved_job is None
def test_get_job_without_annotation_returns_none(
image_in_minio: tuple[UUID, object],
job_repository: JobRepository,
) -> None:
"""Test retrieving a job without an annotation returns None."""
# Arrange
job_id, _ = image_in_minio
# Act
retrieved_job = job_repository.get(job_id)
# Assert
assert retrieved_job is None
def test_put_job(
job_repository: JobRepository,
job: Job,
) -> None:
"""Test storing a job in JobRepository."""
# Arrange
job_id = job.job_id
assert job_repository.get(job_id) is None
# Act
job_repository.put(job)
# Assert
received_job = job_repository.get(job_id)
assert received_job is not None
assert isinstance(received_job, Job)
assert same_job(received_job, job)
def test_delete_job(
job_in_minio: Job,
job_repository: JobRepository,
) -> None:
"""Test deleting a job from JobRepository."""
# Arrange
job_id = job_in_minio.job_id
assert job_repository.get(job_id) is not None
# Act
job_repository.delete(job_id)
# Assert
assert job_repository.get(job_id) is None
def test_list_all_jobs(
job_in_minio: Job,
job_repository: JobRepository,
) -> None:
"""Test listing all job IDs from JobRepository."""
# Arrange
job_id = job_in_minio.job_id
# Act
job_ids = job_repository.list_all()
# Assert
assert isinstance(job_ids, list)
assert all(isinstance(jid, UUID) for jid in job_ids)
assert job_id in job_ids
# Allows local debugging by running file as script
if __name__ == "__main__":
pytest.main(["-s", "-v", __file__])