49 lines
1.8 KiB
Python
49 lines
1.8 KiB
Python
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()
|