Files
selectel-ml-tui/tests/test_config.py
T
2026-09-02 16:45:56 +03:00

90 lines
3.3 KiB
Python

"""Тесты модуля конфигурации."""
from __future__ import annotations
from selectel_ml_tui.config import (
Credentials,
Settings,
load_credentials,
load_settings,
save_credentials,
save_settings,
)
def test_settings_defaults() -> None:
settings = load_settings()
assert settings.api_base_url == "https://api.selectel.ru"
assert settings.refresh_interval >= 10
def test_save_settings_roundtrip(tmp_path, monkeypatch) -> None:
cfg_file = tmp_path / "config.toml"
monkeypatch.setattr("selectel_ml_tui.config._config_file", lambda: cfg_file)
settings = Settings(router_id="gw-test", refresh_interval=30)
save_settings(settings)
loaded = load_settings()
assert loaded.router_id == "gw-test"
assert loaded.refresh_interval == 30
def test_load_settings_repairs_small_interval(tmp_path, monkeypatch) -> None:
cfg_file = tmp_path / "config.toml"
cfg_file.write_text("refresh_interval = 5\n", encoding="utf-8")
monkeypatch.setattr("selectel_ml_tui.config._config_file", lambda: cfg_file)
settings = load_settings()
assert settings.refresh_interval == 10
def test_load_settings_repairs_garbage_interval(tmp_path, monkeypatch) -> None:
cfg_file = tmp_path / "config.toml"
cfg_file.write_text('refresh_interval = "abc"\n', encoding="utf-8")
monkeypatch.setattr("selectel_ml_tui.config._config_file", lambda: cfg_file)
settings = load_settings()
assert settings.refresh_interval == 60
def test_load_settings_ignores_bad_env_interval(tmp_path, monkeypatch) -> None:
cfg_file = tmp_path / "config.toml"
monkeypatch.setattr("selectel_ml_tui.config._config_file", lambda: cfg_file)
monkeypatch.setenv("SELCTEL_REFRESH_INTERVAL", "5")
settings = load_settings()
assert settings.refresh_interval == 60
def test_credentials_defaults() -> None:
creds = Credentials()
assert creds.service_user == ""
assert creds.static_token == ""
def test_settings_env_api_url(monkeypatch, tmp_path) -> None:
cfg_file = tmp_path / "config.toml"
monkeypatch.setattr("selectel_ml_tui.config._config_file", lambda: cfg_file)
monkeypatch.setenv("SELCTEL_API_URL", "https://api.example.test")
settings = load_settings()
assert settings.api_base_url == "https://api.example.test"
def test_credentials_env(monkeypatch, tmp_path) -> None:
cred_file = tmp_path / "credentials.json"
monkeypatch.setattr("selectel_ml_tui.config._credentials_file", lambda: cred_file)
monkeypatch.setenv("SELCTEL_TOKEN", "tok123")
monkeypatch.setenv("SELCTEL_SERVICE_USER", "svc-user")
monkeypatch.setenv("SELCTEL_DOMAIN_ID", "239633")
creds = load_credentials()
assert creds.static_token == "tok123"
assert creds.service_user == "svc-user"
assert creds.domain_id == "239633"
def test_credentials_file_precedence(monkeypatch, tmp_path) -> None:
cred_file = tmp_path / "credentials.json"
monkeypatch.setattr("selectel_ml_tui.config._credentials_file", lambda: cred_file)
save_credentials(Credentials(static_token="from-file", service_user="file-user"))
monkeypatch.setenv("SELCTEL_TOKEN", "from-env")
creds = load_credentials()
# env имеет приоритет над файлом
assert creds.static_token == "from-env"
assert creds.service_user == "file-user"