2
0

test_manager.py 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. """
  2. Tests for ConfigManager - no GUI required.
  3. """
  4. import pytest
  5. import tempfile
  6. import json
  7. from pathlib import Path
  8. from src.config.manager import ConfigManager, ConfigChangeTracker
  9. from src.config.defaults import (
  10. DEFAULT_CONFIG,
  11. CONFIG_SCHEMA,
  12. get_config_item,
  13. get_category_items,
  14. validate_config_value,
  15. ConfigType,
  16. )
  17. class TestConfigManager:
  18. """Test ConfigManager functionality."""
  19. def test_initialization_with_default_path(self):
  20. """Test manager initializes with default config."""
  21. manager = ConfigManager()
  22. # Should have loaded defaults
  23. assert manager.get("translation.model_name") == "facebook/m2m100_418M"
  24. assert manager.get("translation.device") == "auto"
  25. assert manager.get("interface.theme") == "light"
  26. def test_get_existing_key(self):
  27. """Test getting an existing configuration key."""
  28. manager = ConfigManager()
  29. value = manager.get("translation.batch_size")
  30. assert value == 8
  31. def test_set_valid_value(self):
  32. """Test setting a valid configuration value."""
  33. with tempfile.TemporaryDirectory() as tmpdir:
  34. config_path = Path(tmpdir) / "config.json"
  35. manager = ConfigManager(config_path)
  36. success, error = manager.set("translation.batch_size", 16, validate=True)
  37. assert success is True
  38. assert error is None
  39. assert manager.get("translation.batch_size") == 16
  40. def test_set_invalid_value_below_min(self):
  41. """Test setting a value below minimum."""
  42. manager = ConfigManager()
  43. success, error = manager.set("translation.batch_size", 0, validate=True)
  44. assert success is False
  45. assert "must be >=" in error.lower()
  46. def test_get_all(self):
  47. """Test getting all configuration values."""
  48. manager = ConfigManager()
  49. all_config = manager.get_all()
  50. assert isinstance(all_config, dict)
  51. assert "translation.model_name" in all_config
  52. assert "interface.theme" in all_config
  53. class TestConfigDefaults:
  54. """Test default configuration and schema."""
  55. def test_default_config_completeness(self):
  56. """Test default config has all expected values."""
  57. assert "translation.model_name" in DEFAULT_CONFIG
  58. assert "translation.device" in DEFAULT_CONFIG
  59. assert "interface.theme" in DEFAULT_CONFIG
  60. assert "interface.language" in DEFAULT_CONFIG
  61. def test_schema_has_categories(self):
  62. """Test schema has all expected categories."""
  63. category_keys = [cat.key for cat in CONFIG_SCHEMA]
  64. assert "translation" in category_keys
  65. assert "interface" in category_keys
  66. assert "paths" in category_keys
  67. assert "advanced" in category_keys
  68. def test_get_config_item(self):
  69. """Test getting a config item from schema."""
  70. item = get_config_item("translation.batch_size")
  71. assert item is not None
  72. assert item.key == "translation.batch_size"
  73. assert item.title == "Batch Size"