Files
technical-visualization-haness/tests/test_cli.py
T
2026-07-24 16:31:12 +09:00

108 lines
3.7 KiB
Python

from __future__ import annotations
import json
import tempfile
import unittest
from pathlib import Path
from techviz.cli import main
ROOT = Path(__file__).resolve().parents[1]
class CliTests(unittest.TestCase):
def test_prepare_prompt_lint_render(self) -> None:
with tempfile.TemporaryDirectory() as tmp:
root = Path(tmp)
context = root / "context.json"
prompt = root / "prompt.md"
output = root / "out"
self.assertEqual(
main([
"prepare",
str(ROOT / "examples/docs/payment-flow.md"),
"--marker",
"payment-request",
"-o",
str(context),
]),
0,
)
self.assertEqual(main(["prompt", str(context), "-o", str(prompt)]), 0)
prompt_text = prompt.read_text(encoding="utf-8")
self.assertIn("untrusted evidence data", prompt_text)
self.assertIn("Automatically selected reference cases", prompt_text)
self.assertEqual(main(["references", str(context), "--limit", "2"]), 0)
self.assertEqual(
main([
"lint",
str(ROOT / "examples/work/payment/spec.json"),
"--context",
str(context),
]),
0,
)
self.assertEqual(
main([
"render",
str(ROOT / "examples/work/payment/spec.json"),
"--context",
str(context),
"--formats",
"svg,a11y",
"-o",
str(output),
]),
0,
)
manifest = json.loads((output / "payment-request.manifest.json").read_text(encoding="utf-8"))
self.assertEqual(manifest["spec_id"], "payment-request")
def test_render_blocks_unapproved_assumptions(self) -> None:
with tempfile.TemporaryDirectory() as tmp:
root = Path(tmp)
data = json.loads((ROOT / "examples/work/payment/spec.json").read_text(encoding="utf-8"))
data["nodes"][0]["evidence"] = []
data["nodes"][0]["assumption"] = True
spec = root / "assumption.json"
spec.write_text(json.dumps(data, ensure_ascii=False), encoding="utf-8")
blocked_output = root / "blocked"
self.assertEqual(
main([
"render",
str(spec),
"--context",
str(ROOT / "examples/work/payment/context.json"),
"--formats",
"svg",
"-o",
str(blocked_output),
]),
1,
)
self.assertFalse((blocked_output / "payment-request.svg").exists())
approved_output = root / "approved"
self.assertEqual(
main([
"render",
str(spec),
"--context",
str(ROOT / "examples/work/payment/context.json"),
"--formats",
"svg",
"--allow-assumptions",
"-o",
str(approved_output),
]),
0,
)
manifest = json.loads((approved_output / "payment-request.manifest.json").read_text(encoding="utf-8"))
self.assertEqual(manifest["assumption_count"], 1)
self.assertTrue(manifest["assumptions_allowed"])
if __name__ == "__main__":
unittest.main()