Files
stef-openclaw-skills/skills/us-cpa/tests/test_prepare.py
2026-03-15 01:28:22 -05:00

76 lines
2.9 KiB
Python

from __future__ import annotations
import json
import tempfile
import unittest
from io import BytesIO
from pathlib import Path
from reportlab.pdfgen import canvas
from us_cpa.cases import CaseManager
from us_cpa.prepare import EfileExporter, PrepareEngine
from us_cpa.sources import TaxYearCorpus, bootstrap_irs_catalog
class PrepareEngineTests(unittest.TestCase):
def build_case(self, temp_dir: str) -> tuple[CaseManager, TaxYearCorpus]:
case_dir = Path(temp_dir) / "2025-jane-doe"
manager = CaseManager(case_dir)
manager.create_case(case_label="Jane Doe", tax_year=2025)
manager.intake(
tax_year=2025,
user_facts={
"taxpayer.fullName": "Jane Doe",
"filingStatus": "single",
"wages": 50000,
"taxableInterest": 100,
"federalWithholding": 6000,
},
document_paths=[],
)
corpus = TaxYearCorpus(cache_root=Path(temp_dir) / "cache")
def fake_fetch(url: str) -> bytes:
buffer = BytesIO()
pdf = canvas.Canvas(buffer)
pdf.drawString(72, 720, f"Template for {url}")
pdf.save()
return buffer.getvalue()
corpus.download_catalog(2025, bootstrap_irs_catalog(2025), fetcher=fake_fetch)
return manager, corpus
def test_prepare_creates_normalized_return_and_artifacts(self) -> None:
with tempfile.TemporaryDirectory() as temp_dir:
manager, corpus = self.build_case(temp_dir)
engine = PrepareEngine(corpus=corpus)
result = engine.prepare_case(manager.case_dir)
self.assertEqual(result["status"], "prepared")
self.assertEqual(result["summary"]["requiredForms"], ["f1040"])
self.assertEqual(result["summary"]["reviewRequiredArtifacts"], ["f1040"])
self.assertTrue((manager.case_dir / "return" / "normalized-return.json").exists())
self.assertTrue((manager.case_dir / "output" / "artifacts.json").exists())
normalized = json.loads((manager.case_dir / "return" / "normalized-return.json").read_text())
self.assertEqual(normalized["totals"]["adjustedGrossIncome"], 50100.0)
self.assertEqual(normalized["totals"]["taxableIncome"], 34350.0)
def test_exporter_writes_efile_ready_payload(self) -> None:
with tempfile.TemporaryDirectory() as temp_dir:
manager, corpus = self.build_case(temp_dir)
engine = PrepareEngine(corpus=corpus)
engine.prepare_case(manager.case_dir)
export = EfileExporter().export_case(manager.case_dir)
self.assertEqual(export["status"], "draft")
self.assertTrue((manager.case_dir / "output" / "efile-ready.json").exists())
self.assertEqual(export["returnSummary"]["requiredForms"], ["f1040"])
if __name__ == "__main__":
unittest.main()