"""Unit tests: settings defaults & env overrides.""" from __future__ import annotations from typing import Any from app.config import Settings def _settings(**kwargs: Any) -> Settings: """Build Settings without reading a .env file (deterministic tests).""" kwargs.setdefault("_env_file", None) return Settings(**kwargs) # pyright: ignore[reportCallIssue] (kwarg exists at runtime) def test_defaults_match_locked_decisions() -> None: s = _settings() assert s.llm_chat_model == "turbo" assert s.llm_embed_model == "embed" assert s.embedding_dim == 768 assert s.llm_base_url.endswith("/v1") assert 0 < s.relevance_threshold < 1 assert s.top_k_chunks >= 1 assert s.top_n_docs >= 1 assert len(s.suggestions) >= 3 def test_env_override(monkeypatch) -> None: monkeypatch.setenv("BOR_RELEVANCE_THRESHOLD", "0.42") monkeypatch.setenv("BOR_LLM_CHAT_MODEL", "juggernaut") s = _settings() assert s.relevance_threshold == 0.42 assert s.llm_chat_model == "juggernaut" def test_effective_api_key_fallback(monkeypatch) -> None: monkeypatch.delenv("AIPI_KEY", raising=False) s = _settings() assert s.effective_api_key == "not-needed" monkeypatch.setenv("AIPI_KEY", "sk-from-env") s2 = _settings() assert s2.effective_api_key == "sk-from-env"