| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- """配置读取测试。"""
- import pytest
- from src.config import ConfigurationError, LLMSettings
- ENV_NAMES = (
- "LLM_MODEL_ID",
- "LLM_API_KEY",
- "LLM_BASE_URL",
- "LLM_TEMPERATURE",
- "LLM_TIMEOUT",
- )
- def _clear_llm_env(monkeypatch: pytest.MonkeyPatch) -> None:
- for name in ENV_NAMES:
- monkeypatch.delenv(name, raising=False)
- def test_settings_from_env_reads_valid_values(monkeypatch: pytest.MonkeyPatch) -> None:
- _clear_llm_env(monkeypatch)
- monkeypatch.setenv("LLM_MODEL_ID", "test-model")
- monkeypatch.setenv("LLM_API_KEY", "secret-for-test")
- monkeypatch.setenv("LLM_BASE_URL", "https://example.test/v1")
- monkeypatch.setenv("LLM_TEMPERATURE", "0.3")
- monkeypatch.setenv("LLM_TIMEOUT", "30")
- settings = LLMSettings.from_env()
- assert settings.model == "test-model"
- assert settings.temperature == 0.3
- assert settings.timeout == 30
- def test_settings_reject_missing_values(monkeypatch: pytest.MonkeyPatch) -> None:
- _clear_llm_env(monkeypatch)
- with pytest.raises(ConfigurationError, match="LLM_MODEL_ID"):
- LLMSettings.from_env()
- def test_settings_reject_placeholder_key() -> None:
- settings = LLMSettings(
- model="test-model",
- api_key="your_api_key_here",
- base_url="https://example.test/v1",
- )
- with pytest.raises(ConfigurationError, match="占位符"):
- settings.validate()
- @pytest.mark.parametrize(
- ("temperature", "timeout", "message"),
- [(-0.1, 30, "TEMPERATURE"), (0.2, 0, "TIMEOUT")],
- )
- def test_settings_reject_out_of_range_values(
- temperature: float, timeout: int, message: str
- ) -> None:
- settings = LLMSettings(
- model="test-model",
- api_key="secret-for-test",
- base_url="https://example.test/v1",
- temperature=temperature,
- timeout=timeout,
- )
- with pytest.raises(ConfigurationError, match=message):
- settings.validate()
|