Files
document-haness/tests/test_cli.py
T

93 lines
3.3 KiB
Python

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",
)
def test_readme_brief_validates_and_outlines(self) -> None:
root = Path(__file__).resolve().parents[1]
brief = root / "examples" / "briefs" / "claridoc-readme.json"
sources = root / "examples" / "sources" / "retry-policy-sources.json"
expected_intents = [
"problem_value",
"principles",
"workflow",
"installation",
"quickstart",
"configuration",
"verification",
"limits_next",
]
with tempfile.TemporaryDirectory() as temp:
output = Path(temp) / "outline.json"
with redirect_stdout(StringIO()):
validate_code = main(
["validate", "--brief", str(brief), "--sources", str(sources)]
)
outline_code = main(
[
"outline",
"--brief",
str(brief),
"--sources",
str(sources),
"--output",
str(output),
]
)
self.assertEqual(validate_code, 0)
self.assertEqual(outline_code, 0)
outline = json.loads(output.read_text(encoding="utf-8"))
self.assertEqual(outline["document_type"], "readme")
self.assertEqual(
[section["intent"] for section in outline["sections"]],
expected_intents,
)
if __name__ == "__main__":
unittest.main()