from __future__ import annotations import io import json import os import sys import tempfile import unittest from pathlib import Path from unittest import mock from aurask.cli import DEFAULT_DATA_PATH, main class AuraskCLITests(unittest.TestCase): def test_worker_once_self_check_exits_cleanly(self) -> None: with tempfile.TemporaryDirectory() as temp_dir: data_path = Path(temp_dir) / "state.json" stdout = io.StringIO() argv = ["aurask", "worker", "--data", str(data_path), "--once"] with mock.patch.object(sys, "argv", argv), mock.patch("sys.stdout", stdout): main() payload = json.loads(stdout.getvalue()) self.assertEqual(payload["message"], "Aurask worker self-check passed") self.assertEqual(payload["data_path"], str(data_path)) self.assertGreaterEqual(payload["workflow_templates"], 1) self.assertGreaterEqual(payload["plans"], 1) def test_demo_remains_default_command(self) -> None: with tempfile.TemporaryDirectory() as temp_dir: current_dir = Path.cwd() stdout = io.StringIO() try: os.chdir(temp_dir) with mock.patch.object(sys, "argv", ["aurask"]), mock.patch("sys.stdout", stdout): main() finally: os.chdir(current_dir) payload = json.loads(stdout.getvalue()) self.assertEqual(payload["message"], "Aurask MVP demo completed") self.assertEqual(payload["workspace_id"][:3], "ws_") self.assertEqual(DEFAULT_DATA_PATH.parts, (".aurask", "state.json"))