master
John Lauer 0.9.340: routing tests, demo runner + evidence (arav-rog 2026-09-07), vendoring and overlay tools, release notes 25dcdaf 2mo ago
import json, os, sys, tempfile, unittest
from pathlib import Path
from unittest.mock import patch
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
from handlers import ipc_api

class IpcApi(unittest.TestCase):
    def test_read_flip_and_backup(self):
        with tempfile.TemporaryDirectory() as d:
            root = Path(d) / "kicad"
            for ver, on in (("9.0", True), ("10.0", False)):
                (root / ver).mkdir(parents=True)
                (root / ver / "kicad_common.json").write_text(json.dumps({"api": {"enable_server": on}, "other": 1}))
            with patch.object(ipc_api, "_settings_roots", return_value=[root]):
                r = ipc_api.handle_ipc_api({}, {})
                self.assertTrue(r["success"]); self.assertFalse(r["enabled"]); self.assertEqual(r["kicadSettingsVersion"], "10.0")
                r = ipc_api.handle_ipc_api({}, {"enable": True})
                self.assertTrue(r["changed"] and r["needsRestart"] and r["enabled"])
                data = json.loads((root / "10.0" / "kicad_common.json").read_text())
                self.assertTrue(data["api"]["enable_server"]); self.assertEqual(data["other"], 1)
                self.assertTrue(Path(r["backup"]).is_file())
                self.assertFalse(ipc_api.handle_ipc_api({}, {"enable": True})["changed"])
                self.assertEqual(ipc_api.handle_ipc_api({}, {"enable": "yes"})["errorCode"], "invalid_arg")

    def test_missing_settings(self):
        with patch.object(ipc_api, "_settings_roots", return_value=[Path("/nonexistent-adom")]):
            self.assertEqual(ipc_api.handle_ipc_api({}, {})["errorCode"], "settings_not_found")

if __name__ == "__main__":
    unittest.main()