EuropaLex / tests /image_gen_test.py
Takosaga's picture
feat: test use pytest and test all modules
1eb3704
Raw
History Blame Contribute Delete
3.83 kB
"""Tests for core.image_gen.ImageGenEngine."""
from pathlib import Path
from unittest.mock import patch, MagicMock
import pytest
from core.image_gen import ImageGenEngine
from core.types import ImageResult
def test_imagegen_engine_generate_success(mock_image_paths, temp_output_dir):
"""Success path: mock pipeline returns images β†’ .png file written, path in result."""
engine = ImageGenEngine(device="cpu")
mock_pipeline = MagicMock()
# Simulate pipeline returning a list with one PIL-like image object
mock_image = MagicMock()
mock_image.size = (512, 512)
def save_side_effect(path):
# Create the actual file so Path.exists() assertions pass
Path(path).touch()
mock_image.save = MagicMock(side_effect=save_side_effect)
mock_result = MagicMock()
mock_result.images = [mock_image]
mock_pipeline.return_value = mock_result
with patch.object(engine, "_load_pipeline"):
engine._pipeline = mock_pipeline
engine._loaded = True
result = engine.generate(
prompts=["A cat.", "A dog."],
output_dir=temp_output_dir,
)
assert isinstance(result, ImageResult)
assert len(result.image_paths) == 2
assert result.image_paths[0] is not None
assert result.image_paths[1] is not None
assert Path(result.image_paths[0]).exists()
assert Path(result.image_paths[1]).exists()
def test_imagegen_engine_generate_failure_path(temp_output_dir):
"""Failure path: mock pipeline raises exception β†’ None in result list."""
engine = ImageGenEngine(device="cpu")
mock_pipeline = MagicMock()
mock_pipeline.side_effect = RuntimeError("OOM")
with patch.object(engine, "_load_pipeline"):
engine._pipeline = mock_pipeline
engine._loaded = True
result = engine.generate(
prompts=["A cat.", "A dog."],
output_dir=temp_output_dir,
)
assert len(result.image_paths) == 2
assert result.image_paths[0] is None
assert result.image_paths[1] is None
def test_imagegen_engine_generate_empty_input(temp_output_dir):
"""Empty input list: returns empty ImageResult."""
engine = ImageGenEngine(device="cpu")
with patch.object(engine, "_load_pipeline"):
result = engine.generate(
prompts=[],
output_dir=temp_output_dir,
)
assert isinstance(result, ImageResult)
assert result.image_paths == []
def test_imagegen_engine_generate_empty_output_warning(temp_output_dir):
"""Pipeline returns empty list β†’ None path logged."""
engine = ImageGenEngine(device="cpu")
mock_pipeline = MagicMock()
mock_result = MagicMock()
mock_result.images = [] # Empty output
mock_pipeline.return_value = mock_result
with patch.object(engine, "_load_pipeline"):
engine._pipeline = mock_pipeline
engine._loaded = True
result = engine.generate(
prompts=["A cat."],
output_dir=temp_output_dir,
)
assert len(result.image_paths) == 1
assert result.image_paths[0] is None
def test_imagegen_engine_unload():
"""Pipeline deleted, _loaded reset to False, torch.cuda.empty_cache() called."""
engine = ImageGenEngine(device="cuda")
mock_pipeline = MagicMock()
engine._pipeline = mock_pipeline
engine._loaded = True
with patch("torch.cuda.empty_cache") as mock_empty:
engine.unload()
assert engine._pipeline is None
assert engine._loaded is False
mock_empty.assert_called_once()
def test_imagegen_engine_unload_already_unloaded():
"""Calling unload when already unloaded does not error."""
engine = ImageGenEngine(device="cuda")
engine._pipeline = None
engine._loaded = False
engine.unload()
assert engine._loaded is False