Agentic-RagBot / tests /test_settings.py
T0X1N's picture
chore: codebase audit and fixes (ruff, mypy, pytest)
9659593
"""
Tests for src/settings.py — Pydantic Settings hierarchy.
"""
import os
import pytest
def test_settings_defaults(monkeypatch):
"""Settings should have sensible defaults without env vars."""
# Clear ALL potential override env vars that might affect settings
for env_var in list(os.environ.keys()):
if any(
prefix in env_var.upper()
for prefix in [
"OLLAMA__",
"CHUNKING__",
"EMBEDDING__",
"OPENSEARCH__",
"REDIS__",
"API__",
"LLM__",
"LANGFUSE__",
"TELEGRAM__",
]
):
monkeypatch.delenv(env_var, raising=False)
# Clear any cached instance
from src.settings import get_settings
get_settings.cache_clear()
settings = get_settings()
# Test core settings that should always exist with valid values
assert settings.api.port >= 1 and settings.api.port <= 65535
assert "mediguard" in settings.postgres.database_url.lower()
assert settings.opensearch.host # Should have a host
assert settings.redis.port >= 1
# Accept any llama model variant (covers llama3.1:8b, llama3.2, etc)
assert "llama" in settings.ollama.model.lower()
assert settings.embedding.dimension > 0
# Chunk size should match hardcoded default of 600 when no env vars
assert settings.chunking.chunk_size == 600, f"Expected 600, got {settings.chunking.chunk_size}"
def test_settings_frozen():
"""Settings should be immutable."""
from src.settings import get_settings
get_settings.cache_clear()
settings = get_settings()
with pytest.raises(Exception):
settings.api.port = 9999
def test_settings_singleton():
"""get_settings should return the same cached instance."""
from src.settings import get_settings
get_settings.cache_clear()
s1 = get_settings()
s2 = get_settings()
assert s1 is s2