from __future__ import annotations import json import tempfile import unittest from contextlib import redirect_stdout from io import StringIO from pathlib import Path from claridoc.cli import main class CliTests(unittest.TestCase): def test_init_and_validate(self) -> None: with tempfile.TemporaryDirectory() as temp: workspace = Path(temp) / "workspace" with redirect_stdout(StringIO()): self.assertEqual(main(["init", str(workspace)]), 0) code = main([ "validate", "--brief", str(workspace / "brief.json"), "--sources", str(workspace / "sources.json"), ]) self.assertEqual(code, 0) self.assertTrue((workspace / "pipeline.mock.json").is_file()) self.assertIsInstance(json.loads((workspace / "brief.json").read_text(encoding="utf-8")), dict) def test_collect_builds_local_evidence_pack(self) -> None: root = Path(__file__).resolve().parents[1] with tempfile.TemporaryDirectory() as temp: output = Path(temp) / "sources.json" with redirect_stdout(StringIO()): code = main([ "collect", "--root", str(root / "examples/corpus/llm-wiki-mini"), "--query", "application-core Spring DI 수동 등록 이유", "--top-k", "6", "--output", str(output), ]) self.assertEqual(code, 0) data = json.loads(output.read_text(encoding="utf-8")) self.assertTrue(data["sources"]) self.assertEqual( data["sources"][0]["path"], "raw/branch-notes/feature-application-port-usecase-contract.md", ) if __name__ == "__main__": unittest.main()