from __future__ import annotations from pathlib import Path import shutil import sys import tempfile import unittest REPO_ROOT = Path(__file__).resolve().parents[2] ADAPTERS = REPO_ROOT / "harness/adapters" sys.path.insert(0, str(ADAPTERS)) import generate_rules # noqa: E402 class RuleGenerationTest(unittest.TestCase): def test_all_rule_adapters_are_current(self) -> None: stale, written = generate_rules.generate(REPO_ROOT, check=True) self.assertEqual(stale, []) self.assertEqual(written, []) rendered = generate_rules.render(REPO_ROOT) self.assertEqual(len(rendered), 16) self.assertTrue(all("GENERATED from rules/" in text for text in rendered.values())) def test_root_rule_change_is_detected(self) -> None: with tempfile.TemporaryDirectory() as directory: root = Path(directory) for relative in ( "harness/source/rule-adapters.json", "rules/advisory-depth.md", "rules/reporting-standards.md", "rules/diagram-standards.md", ): target = root / relative target.parent.mkdir(parents=True, exist_ok=True) shutil.copyfile(REPO_ROOT / relative, target) rendered = generate_rules.render(root) for path, text in rendered.items(): target = root / path target.parent.mkdir(parents=True, exist_ok=True) target.write_text(text, encoding="utf-8") source = root / "rules/advisory-depth.md" source.write_text(source.read_text(encoding="utf-8") + "\n변경\n", encoding="utf-8") stale, _ = generate_rules.generate(root, check=True) self.assertTrue(any("advisory-depth" in path for path in stale)) if __name__ == "__main__": unittest.main()