Spaces:
Build error
Build error
| """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 | |