import io import json import os import sys import tempfile import unittest from contextlib import redirect_stdout from unittest import mock import host class HostSleepTest(unittest.TestCase): def _run(self, cli_args): with tempfile.TemporaryDirectory() as tmp: state_path = os.path.join(tmp, "host-state.json") with open(state_path, "w", encoding="utf-8") as f: json.dump({"tasks": {}, "automations": []}, f) cfg_path = os.path.join(tmp, "cfg.json") with open(cfg_path, "w", encoding="utf-8") as f: json.dump({"state": state_path}, f) argv = ["host.py", "--config", cfg_path, "--state", state_path] + cli_args out = io.StringIO() code = 0 with mock.patch.object(host, "Server", lambda **kw: mock.MagicMock()): with mock.patch.object(sys, "argv", argv): with redirect_stdout(out): try: host.main() except SystemExit as e: code = e.code if isinstance(e.code, int) else 1 return code, out.getvalue() def test_sleep_zero(self): code, out = self._run(["sleep", "--seconds", "0"]) self.assertEqual(code, 0) self.assertEqual(json.loads(out), {"slept_seconds": 0.0, "interrupted": False}) def test_sleep_out_of_range(self): code, _out = self._run(["sleep", "--seconds", "61"]) self.assertEqual(code, 1) if __name__ == "__main__": unittest.main()