""" Tests for ConfigManager - no GUI required. """ import pytest import tempfile import json from pathlib import Path from src.config.manager import ConfigManager, ConfigChangeTracker from src.config.defaults import ( DEFAULT_CONFIG, CONFIG_SCHEMA, get_config_item, get_category_items, validate_config_value, ConfigType, ) class TestConfigManager: """Test ConfigManager functionality.""" def test_initialization_with_default_path(self): """Test manager initializes with default config.""" manager = ConfigManager() # Should have loaded defaults assert manager.get("translation.model_name") == "facebook/m2m100_418M" assert manager.get("translation.device") == "auto" assert manager.get("interface.theme") == "light" def test_get_existing_key(self): """Test getting an existing configuration key.""" manager = ConfigManager() value = manager.get("translation.batch_size") assert value == 8 def test_set_valid_value(self): """Test setting a valid configuration value.""" with tempfile.TemporaryDirectory() as tmpdir: config_path = Path(tmpdir) / "config.json" manager = ConfigManager(config_path) success, error = manager.set("translation.batch_size", 16, validate=True) assert success is True assert error is None assert manager.get("translation.batch_size") == 16 def test_set_invalid_value_below_min(self): """Test setting a value below minimum.""" manager = ConfigManager() success, error = manager.set("translation.batch_size", 0, validate=True) assert success is False assert "must be >=" in error.lower() def test_get_all(self): """Test getting all configuration values.""" manager = ConfigManager() all_config = manager.get_all() assert isinstance(all_config, dict) assert "translation.model_name" in all_config assert "interface.theme" in all_config class TestConfigDefaults: """Test default configuration and schema.""" def test_default_config_completeness(self): """Test default config has all expected values.""" assert "translation.model_name" in DEFAULT_CONFIG assert "translation.device" in DEFAULT_CONFIG assert "interface.theme" in DEFAULT_CONFIG assert "interface.language" in DEFAULT_CONFIG def test_schema_has_categories(self): """Test schema has all expected categories.""" category_keys = [cat.key for cat in CONFIG_SCHEMA] assert "translation" in category_keys assert "interface" in category_keys assert "paths" in category_keys assert "advanced" in category_keys def test_get_config_item(self): """Test getting a config item from schema.""" item = get_config_item("translation.batch_size") assert item is not None assert item.key == "translation.batch_size" assert item.title == "Batch Size"