103 lines
3.6 KiB
Python
103 lines
3.6 KiB
Python
"""
|
|
Tests for augmentation presets module.
|
|
|
|
TDD Phase 4: RED - Write tests first, then implement to pass.
|
|
"""
|
|
|
|
import pytest
|
|
|
|
|
|
class TestPresets:
|
|
"""Tests for augmentation presets."""
|
|
|
|
def test_presets_dict_exists(self) -> None:
|
|
"""Test that PRESETS dictionary exists."""
|
|
from shared.augmentation.presets import PRESETS
|
|
|
|
assert isinstance(PRESETS, dict)
|
|
assert len(PRESETS) > 0
|
|
|
|
def test_expected_presets_exist(self) -> None:
|
|
"""Test that expected presets are defined."""
|
|
from shared.augmentation.presets import PRESETS
|
|
|
|
expected_presets = ["conservative", "moderate", "aggressive", "scanned_document"]
|
|
|
|
for preset_name in expected_presets:
|
|
assert preset_name in PRESETS, f"Missing preset: {preset_name}"
|
|
|
|
def test_preset_structure(self) -> None:
|
|
"""Test that each preset has required structure."""
|
|
from shared.augmentation.presets import PRESETS
|
|
|
|
for name, preset in PRESETS.items():
|
|
assert "description" in preset, f"Preset {name} missing description"
|
|
assert "config" in preset, f"Preset {name} missing config"
|
|
assert isinstance(preset["description"], str)
|
|
assert isinstance(preset["config"], dict)
|
|
|
|
def test_get_preset_config(self) -> None:
|
|
"""Test getting config from preset."""
|
|
from shared.augmentation.presets import get_preset_config
|
|
|
|
config = get_preset_config("conservative")
|
|
|
|
assert config is not None
|
|
# Should have at least some augmentations defined
|
|
assert len(config) > 0
|
|
|
|
def test_get_preset_config_unknown_raises(self) -> None:
|
|
"""Test that getting unknown preset raises error."""
|
|
from shared.augmentation.presets import get_preset_config
|
|
|
|
with pytest.raises(ValueError, match="Unknown preset"):
|
|
get_preset_config("nonexistent_preset")
|
|
|
|
def test_create_config_from_preset(self) -> None:
|
|
"""Test creating AugmentationConfig from preset."""
|
|
from shared.augmentation.config import AugmentationConfig
|
|
from shared.augmentation.presets import create_config_from_preset
|
|
|
|
config = create_config_from_preset("moderate")
|
|
|
|
assert isinstance(config, AugmentationConfig)
|
|
|
|
def test_conservative_preset_is_safe(self) -> None:
|
|
"""Test that conservative preset only enables safe augmentations."""
|
|
from shared.augmentation.presets import create_config_from_preset
|
|
|
|
config = create_config_from_preset("conservative")
|
|
|
|
# Should NOT enable geometric transforms
|
|
assert config.perspective_warp.enabled is False
|
|
|
|
# Should NOT enable heavy degradation
|
|
assert config.wrinkle.enabled is False
|
|
assert config.edge_damage.enabled is False
|
|
assert config.stain.enabled is False
|
|
|
|
def test_aggressive_preset_enables_more(self) -> None:
|
|
"""Test that aggressive preset enables more augmentations."""
|
|
from shared.augmentation.presets import create_config_from_preset
|
|
|
|
config = create_config_from_preset("aggressive")
|
|
|
|
enabled = config.get_enabled_augmentations()
|
|
|
|
# Should enable multiple augmentation types
|
|
assert len(enabled) >= 6
|
|
|
|
def test_list_presets(self) -> None:
|
|
"""Test listing available presets."""
|
|
from shared.augmentation.presets import list_presets
|
|
|
|
presets = list_presets()
|
|
|
|
assert isinstance(presets, list)
|
|
assert len(presets) >= 4
|
|
|
|
# Each item should have name and description
|
|
for preset in presets:
|
|
assert "name" in preset
|
|
assert "description" in preset
|