from __future__ import annotations import json import os import subprocess import sys import unittest from pathlib import Path SKILL_DIR = Path(__file__).resolve().parents[1] SRC_DIR = SKILL_DIR / "src" class UsCpaCliSmokeTests(unittest.TestCase): def test_skill_scaffold_files_exist(self) -> None: self.assertTrue((SKILL_DIR / "SKILL.md").exists()) self.assertTrue((SKILL_DIR / "pyproject.toml").exists()) self.assertTrue((SKILL_DIR / "scripts" / "us-cpa").exists()) self.assertTrue( (SKILL_DIR.parent.parent / "docs" / "us-cpa.md").exists() ) def test_fixture_directories_exist(self) -> None: fixtures_dir = SKILL_DIR / "tests" / "fixtures" for name in ("irs", "facts", "documents", "returns"): self.assertTrue((fixtures_dir / name).exists()) def run_cli(self, *args: str) -> subprocess.CompletedProcess[str]: env = os.environ.copy() env["PYTHONPATH"] = str(SRC_DIR) return subprocess.run( [sys.executable, "-m", "us_cpa.cli", *args], text=True, capture_output=True, env=env, ) def test_help_lists_all_commands(self) -> None: result = self.run_cli("--help") self.assertEqual(result.returncode, 0, result.stderr) for command in ( "question", "prepare", "review", "fetch-year", "extract-docs", "render-forms", "export-efile-ready", ): self.assertIn(command, result.stdout) def test_question_command_emits_json_by_default(self) -> None: result = self.run_cli("question", "--question", "What is the standard deduction?") self.assertEqual(result.returncode, 0, result.stderr) payload = json.loads(result.stdout) self.assertEqual(payload["command"], "question") self.assertEqual(payload["format"], "json") self.assertEqual(payload["question"], "What is the standard deduction?") def test_prepare_requires_case_dir(self) -> None: result = self.run_cli("prepare", "--tax-year", "2025") self.assertNotEqual(result.returncode, 0) self.assertIn("case directory", result.stderr.lower()) if __name__ == "__main__": unittest.main()