""" Unit tests for application settings (offline). Covers the OLLAMA_MODEL env collision: the deployed container sets OLLAMA_MODEL=nomic-embed-text for embeddings, which must NOT shadow the generation model setting (ollama_llm_model / OLLAMA_LLM_MODEL). """ import pytest from src.config import Settings # Required fields so Settings can be constructed without a .env file REQUIRED = { "library_api_key": "test-key", "neo4j_password": "test-pass", "wikijs_db_password": "test-pass", } @pytest.mark.unit class TestOllamaModelResolution: """Generation model resolution must be immune to the OLLAMA_MODEL env var.""" def test_ollama_model_env_does_not_shadow_generation_model(self, monkeypatch): """The container env OLLAMA_MODEL (embedding model) must not leak into ollama_llm_model.""" monkeypatch.setenv("OLLAMA_MODEL", "nomic-embed-text") settings = Settings(_env_file=None, **REQUIRED) assert settings.ollama_llm_model == "gemma4:e2b" assert settings.ollama_llm_model != "nomic-embed-text" def test_generation_model_default(self, monkeypatch): monkeypatch.delenv("OLLAMA_LLM_MODEL", raising=False) settings = Settings(_env_file=None, **REQUIRED) assert settings.ollama_llm_model == "gemma4:e2b" def test_generation_model_from_dedicated_env_var(self, monkeypatch): """OLLAMA_LLM_MODEL is the dedicated env var for the generation model.""" monkeypatch.setenv("OLLAMA_MODEL", "nomic-embed-text") monkeypatch.setenv("OLLAMA_LLM_MODEL", "mistral-nemo:latest") settings = Settings(_env_file=None, **REQUIRED) assert settings.ollama_llm_model == "mistral-nemo:latest" def test_embedding_model_setting_untouched(self, monkeypatch): """The embedding model keeps its own setting and env var.""" monkeypatch.setenv("OLLAMA_EMBEDDING_MODEL", "nomic-embed-text") settings = Settings(_env_file=None, **REQUIRED) assert settings.ollama_embedding_model == "nomic-embed-text" def test_legacy_setting_name_removed(self): """The old ollama_model attribute must be gone so nothing binds to OLLAMA_MODEL.""" settings = Settings(_env_file=None, **REQUIRED) assert not hasattr(settings, "ollama_model")