93 lines
3.3 KiB
Python
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()
|