SummarizerApp / tests /test_config.py
ming
Migrate to Ruff for linting/formatting and add comprehensive import tests
29ed661
raw
history blame
5.6 kB
"""
Tests for configuration management.
"""
import pytest
from app.core.config import Settings, settings
class TestSettings:
"""Test configuration settings."""
def test_default_settings(self):
"""Test default configuration values."""
test_settings = Settings()
assert test_settings.ollama_model == "llama3.2:1b"
assert test_settings.ollama_host == "http://127.0.0.1:11434"
assert test_settings.ollama_timeout == 30
assert test_settings.server_host == "0.0.0.0" # Actual default
assert test_settings.server_port == 8000
assert test_settings.log_level == "INFO"
assert test_settings.api_key_enabled is False
assert test_settings.rate_limit_enabled is False
assert test_settings.max_text_length == 32000
assert test_settings.max_tokens_default == 256
def test_environment_override(self, test_env_vars):
"""Test that environment variables override defaults."""
test_settings = Settings()
assert test_settings.ollama_model == "llama3.2:1b"
assert test_settings.ollama_host == "http://127.0.0.1:11434"
assert test_settings.ollama_timeout == 30
assert test_settings.server_host == "127.0.0.1" # Test environment override
assert test_settings.server_port == 8000
assert test_settings.log_level == "INFO"
def test_global_settings_instance(self):
"""Test that global settings instance exists."""
assert settings is not None
assert isinstance(settings, Settings)
def test_custom_environment_variables(self, monkeypatch):
"""Test custom environment variable values."""
monkeypatch.setenv("OLLAMA_MODEL", "custom-model:7b")
monkeypatch.setenv("OLLAMA_HOST", "http://custom-host:9999")
monkeypatch.setenv("OLLAMA_TIMEOUT", "60")
monkeypatch.setenv("SERVER_HOST", "0.0.0.0")
monkeypatch.setenv("SERVER_PORT", "9000")
monkeypatch.setenv("LOG_LEVEL", "DEBUG")
monkeypatch.setenv("API_KEY_ENABLED", "true")
monkeypatch.setenv("API_KEY", "test-secret-key")
monkeypatch.setenv("RATE_LIMIT_ENABLED", "true")
monkeypatch.setenv("RATE_LIMIT_REQUESTS", "100")
monkeypatch.setenv("RATE_LIMIT_WINDOW", "120")
monkeypatch.setenv("MAX_TEXT_LENGTH", "64000")
monkeypatch.setenv("MAX_TOKENS_DEFAULT", "512")
test_settings = Settings()
assert test_settings.ollama_model == "custom-model:7b"
assert test_settings.ollama_host == "http://custom-host:9999"
assert test_settings.ollama_timeout == 60
assert test_settings.server_host == "0.0.0.0"
assert test_settings.server_port == 9000
assert test_settings.log_level == "DEBUG"
assert test_settings.api_key_enabled is True
assert test_settings.api_key == "test-secret-key"
assert test_settings.rate_limit_enabled is True
assert test_settings.rate_limit_requests == 100
assert test_settings.rate_limit_window == 120
assert test_settings.max_text_length == 64000
assert test_settings.max_tokens_default == 512
def test_invalid_boolean_environment_variables(self, monkeypatch):
"""Test that invalid boolean values raise validation errors."""
monkeypatch.setenv("API_KEY_ENABLED", "invalid")
monkeypatch.setenv("RATE_LIMIT_ENABLED", "maybe")
with pytest.raises(ValueError): # Pydantic validation error
Settings()
def test_invalid_integer_environment_variables(self, monkeypatch):
"""Test that invalid integer values raise validation errors."""
monkeypatch.setenv("OLLAMA_TIMEOUT", "invalid")
monkeypatch.setenv("SERVER_PORT", "not-a-number")
monkeypatch.setenv("MAX_TEXT_LENGTH", "abc")
with pytest.raises(ValueError): # Pydantic validation error
Settings()
def test_negative_integer_environment_variables(self, monkeypatch):
"""Test that negative integer values raise validation errors."""
monkeypatch.setenv("OLLAMA_TIMEOUT", "-10")
monkeypatch.setenv("SERVER_PORT", "-1")
monkeypatch.setenv("MAX_TEXT_LENGTH", "-1000")
with pytest.raises(ValueError): # Pydantic validation error
Settings()
def test_settings_validation(self):
"""Test that settings validation works correctly."""
test_settings = Settings()
# Test that all required attributes exist
assert hasattr(test_settings, "ollama_model")
assert hasattr(test_settings, "ollama_host")
assert hasattr(test_settings, "ollama_timeout")
assert hasattr(test_settings, "server_host")
assert hasattr(test_settings, "server_port")
assert hasattr(test_settings, "log_level")
assert hasattr(test_settings, "api_key_enabled")
assert hasattr(test_settings, "rate_limit_enabled")
assert hasattr(test_settings, "max_text_length")
assert hasattr(test_settings, "max_tokens_default")
def test_log_level_validation(self, monkeypatch):
"""Test that log level validation works."""
# Test valid log levels
for level in ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"]:
monkeypatch.setenv("LOG_LEVEL", level)
test_settings = Settings()
assert test_settings.log_level == level
# Test invalid log level defaults to INFO
monkeypatch.setenv("LOG_LEVEL", "INVALID")
test_settings = Settings()
assert test_settings.log_level == "INFO"