from __future__ import annotations from pathlib import Path import sys import tempfile import unittest RUNTIME = Path(__file__).resolve().parents[1] / "runtime" sys.path.insert(0, str(RUNTIME)) import fix_bare_refs # noqa: E402 class FixBareRefsTest(unittest.TestCase): def test_only_checker_confirmed_bare_refs_are_linked(self) -> None: with tempfile.TemporaryDirectory() as directory: root = Path(directory) hooks = root / ".claude/hooks" hooks.mkdir(parents=True) repository_hooks = Path(__file__).resolve().parents[2] / ".claude/hooks" for name in ("wiki_consistency_check.py", "wiki_graph_contract_check.py", "wiki_rules.py"): (hooks / name).write_bytes((repository_hooks / name).read_bytes()) branches = root / "raw/branch-notes" branches.mkdir(parents=True) document = branches / "feature-source.md" document.write_text( """# source feature-target D3 결정을 따른다. 이미 [[raw/branch-notes/feature-linked]] D1 결정도 있다. ## 관심사 커버리지 | 관심사 | 상태 | owner | |---|---|---| | 실행 | delegated | feature-target | """, encoding="utf-8", ) updates, counts = fix_bare_refs.build_updates(root) rendered = updates[document] self.assertIn("[[raw/branch-notes/feature-target]] D3", rendered) self.assertIn("| 실행 | delegated | [[raw/branch-notes/feature-target]] |", rendered) self.assertIn("[[raw/branch-notes/feature-linked]] D1", rendered) self.assertEqual(counts["decision_ref_fixes"], 1) self.assertEqual(counts["owner_ref_fixes"], 1) if __name__ == "__main__": unittest.main()