from pydantic import SecretStr from tutor.config import Settings def _settings(**overrides: object) -> Settings: # _env_file=None: ignore any local .env so tests are hermetic. return Settings(_env_file=None, **overrides) # type: ignore[arg-type] def test_defaults_are_offline_safe() -> None: settings = _settings() assert settings.llm_provider == "fake" assert settings.storage_backend == "memory" assert settings.port == 7860 def test_env_overrides(monkeypatch) -> None: monkeypatch.setenv("LLM_PROVIDER", "gemini") monkeypatch.setenv("LLM_MODEL", "gemini-2.5-flash") monkeypatch.setenv("LLM_API_KEY", "sk-test") settings = _settings() assert settings.llm_provider == "gemini" assert settings.llm_model == "gemini-2.5-flash" assert isinstance(settings.llm_api_key, SecretStr) def test_api_key_is_not_leaked_in_repr() -> None: settings = _settings(llm_api_key=SecretStr("sk-very-secret")) assert "sk-very-secret" not in repr(settings) assert "sk-very-secret" not in str(settings)