SummarizerApp / tests /test_config.py
ming
test: complete comprehensive test suite with 95% coverage
2aa2b79
raw
history blame
5.66 kB
"""
Tests for configuration management.
"""
import pytest
import os
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.1:8b"
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"
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.1:8b"
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"
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(Exception): # 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(Exception): # 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(Exception): # 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"