51 lines
1.8 KiB
Python
51 lines
1.8 KiB
Python
"""config.py — env-driven settings (plan §11)."""
|
|
|
|
from pathlib import Path
|
|
|
|
from mcp_server.config import Settings, get_settings
|
|
|
|
|
|
def test_defaults():
|
|
settings = Settings(_env_file=None)
|
|
assert settings.elabftw_timeout == 10.0
|
|
assert settings.elabftw_retries == 2
|
|
assert settings.labvoice_db_path == Path("~/.labvoice/journal.sqlite")
|
|
assert settings.labvoice_template_desc_limit == 200
|
|
assert settings.labvoice_rest_token is None
|
|
assert settings.labvoice_embed_model is None
|
|
|
|
|
|
def test_default_unit_whitelist_matches_plan():
|
|
settings = Settings(_env_file=None)
|
|
assert "μL" in settings.unit_whitelist
|
|
assert "mL" in settings.unit_whitelist
|
|
assert "ea" in settings.unit_whitelist
|
|
|
|
|
|
def test_unit_whitelist_parsing_ignores_blanks_and_spaces():
|
|
settings = Settings(_env_file=None, labvoice_unit_whitelist=" mL , L , , ea ")
|
|
assert settings.unit_whitelist == ("mL", "L", "ea")
|
|
|
|
|
|
def test_api_base_url_strips_trailing_slash():
|
|
settings = Settings(_env_file=None, elabftw_url="https://eln.example.org/")
|
|
assert settings.api_base_url == "https://eln.example.org/api/v2"
|
|
|
|
|
|
def test_env_overrides(monkeypatch):
|
|
monkeypatch.setenv("ELABFTW_URL", "https://eln2.example.org")
|
|
monkeypatch.setenv("ELABFTW_TIMEOUT", "3.5")
|
|
monkeypatch.setenv("LABVOICE_DB_PATH", "/tmp/other.sqlite")
|
|
settings = Settings(_env_file=None)
|
|
assert settings.elabftw_url == "https://eln2.example.org"
|
|
assert settings.elabftw_timeout == 3.5
|
|
assert settings.labvoice_db_path == Path("/tmp/other.sqlite")
|
|
|
|
|
|
def test_get_settings_is_cached(monkeypatch):
|
|
monkeypatch.setenv("ELABFTW_URL", "https://a.example.org")
|
|
first = get_settings()
|
|
monkeypatch.setenv("ELABFTW_URL", "https://b.example.org")
|
|
assert get_settings() is first
|
|
get_settings.cache_clear()
|