"""Tests for client.config.Config.""" import sys from pathlib import Path import pytest # Ensure project root is on path project_root = Path(__file__).resolve().parent.parent.parent sys.path.insert(0, str(project_root)) from client.config import Config @pytest.fixture def cfg(tmp_path): """A Config backed by a temp file so we never touch the real user config.""" return Config(config_path=str(tmp_path / "test_config.yaml")) # ── dot-notation get ──────────────────────────────────────────────── def test_dot_notation_get(cfg): """Config.get should traverse nested dicts using dot-separated keys.""" cfg.config = {"audio": {"sample_rate": 16000}} assert cfg.get("audio.sample_rate") == 16000 # ── dot-notation set ──────────────────────────────────────────────── def test_dot_notation_set(cfg): """Config.set should create/update nested values via dot-separated keys.""" cfg.set("audio.sample_rate", 44100) assert cfg.config["audio"]["sample_rate"] == 44100 # Also readable via .get assert cfg.get("audio.sample_rate") == 44100 # ── missing key returns default ───────────────────────────────────── def test_missing_key_returns_default(cfg): """Accessing a nonexistent key should return the supplied default.""" assert cfg.get("nonexistent.path", "fallback") == "fallback" assert cfg.get("also.missing") is None # default default is None # ── nested set creates intermediate dicts ─────────────────────────── def test_nested_set_creates_path(cfg): """Setting a deeply nested key should create all intermediate dicts.""" cfg.config = {} cfg.set("a.b.c.d", 42) assert cfg.config["a"]["b"]["c"]["d"] == 42 assert cfg.get("a.b.c.d") == 42 # ── save and reload round-trip ────────────────────────────────────── def test_save_and_reload(tmp_path): """Values persisted via save() should survive a fresh Config load.""" config_file = str(tmp_path / "roundtrip.yaml") # Create and populate cfg1 = Config(config_path=config_file) cfg1.set("user.name", "TestUser") cfg1.set("transcription.model", "tiny.en") # Load a fresh instance from the same file cfg2 = Config(config_path=config_file) assert cfg2.get("user.name") == "TestUser" assert cfg2.get("transcription.model") == "tiny.en"