feat: scaffold us-cpa skill
This commit is contained in:
1
skills/us-cpa/tests/fixtures/documents/.gitkeep
vendored
Normal file
1
skills/us-cpa/tests/fixtures/documents/.gitkeep
vendored
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
1
skills/us-cpa/tests/fixtures/facts/.gitkeep
vendored
Normal file
1
skills/us-cpa/tests/fixtures/facts/.gitkeep
vendored
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
1
skills/us-cpa/tests/fixtures/irs/.gitkeep
vendored
Normal file
1
skills/us-cpa/tests/fixtures/irs/.gitkeep
vendored
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
1
skills/us-cpa/tests/fixtures/returns/.gitkeep
vendored
Normal file
1
skills/us-cpa/tests/fixtures/returns/.gitkeep
vendored
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
71
skills/us-cpa/tests/test_cli.py
Normal file
71
skills/us-cpa/tests/test_cli.py
Normal file
@@ -0,0 +1,71 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user