Files
jpmschweitzerandClaude Fable 5 a66d801abd test: add offline unit tests for Phase A reliability fixes
Mock-based tests (no live services) covering:
- ollama_llm_model resolution under the OLLAMA_MODEL env collision
- per-leg retrieval failure -> source_status/degraded signaling
- Phase 0/Phase 4 LLM timeout fallbacks
- /stats wiki page count using the users/{user} path prefix
- Wiki.js list_all_pages limit-growth pagination and
  list_pages limit-after-filter behavior

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 10:05:51 +02:00

63 lines
2.2 KiB
Python

"""
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")