import json import sys import tempfile import unittest from pathlib import Path ROOT = Path(__file__).resolve().parents[1] SRC = ROOT / "src" if str(SRC) not in sys.path: sys.path.insert(0, str(SRC)) from config import load class ConfigTests(unittest.TestCase): def test_defaults_when_file_missing(self): missing = Path(tempfile.gettempdir()) / "lel_missing_config_test.json" if missing.exists(): missing.unlink() cfg = load(str(missing)) self.assertEqual(cfg.daemon.hotkey, "Cmd+m") self.assertEqual(cfg.recording.input, "") self.assertEqual(cfg.stt.model, "base") self.assertEqual(cfg.stt.device, "cpu") self.assertEqual(cfg.injection.backend, "clipboard") self.assertTrue(cfg.ai.enabled) self.assertFalse(cfg.logging.log_transcript) def test_loads_nested_config(self): payload = { "daemon": {"hotkey": "Ctrl+space"}, "recording": {"input": 3}, "stt": {"model": "small", "device": "cuda"}, "injection": {"backend": "injection"}, "ai": {"enabled": False}, "logging": {"log_transcript": True}, } with tempfile.TemporaryDirectory() as td: path = Path(td) / "config.json" path.write_text(json.dumps(payload), encoding="utf-8") cfg = load(str(path)) self.assertEqual(cfg.daemon.hotkey, "Ctrl+space") self.assertEqual(cfg.recording.input, 3) self.assertEqual(cfg.stt.model, "small") self.assertEqual(cfg.stt.device, "cuda") self.assertEqual(cfg.injection.backend, "injection") self.assertFalse(cfg.ai.enabled) self.assertTrue(cfg.logging.log_transcript) def test_loads_legacy_keys(self): payload = { "hotkey": "Alt+m", "input": "Mic", "whisper_model": "tiny", "whisper_device": "cpu", "injection_backend": "clipboard", "ai_enabled": False, "log_transcript": True, } with tempfile.TemporaryDirectory() as td: path = Path(td) / "config.json" path.write_text(json.dumps(payload), encoding="utf-8") cfg = load(str(path)) self.assertEqual(cfg.daemon.hotkey, "Alt+m") self.assertEqual(cfg.recording.input, "Mic") self.assertEqual(cfg.stt.model, "tiny") self.assertEqual(cfg.stt.device, "cpu") self.assertEqual(cfg.injection.backend, "clipboard") self.assertFalse(cfg.ai.enabled) self.assertTrue(cfg.logging.log_transcript) def test_invalid_injection_backend_raises(self): payload = {"injection": {"backend": "invalid"}} with tempfile.TemporaryDirectory() as td: path = Path(td) / "config.json" path.write_text(json.dumps(payload), encoding="utf-8") with self.assertRaisesRegex(ValueError, "injection.backend"): load(str(path)) def test_invalid_logging_flag_raises(self): payload = {"logging": {"log_transcript": "yes"}} with tempfile.TemporaryDirectory() as td: path = Path(td) / "config.json" path.write_text(json.dumps(payload), encoding="utf-8") with self.assertRaisesRegex(ValueError, "logging.log_transcript"): load(str(path)) if __name__ == "__main__": unittest.main()