test_core_engine_classify.py 3.02 KB
"""U-035 tests: path-based core_engine classification.

Run: python3 -m unittest src.test_core_engine_classify -v
"""

import unittest

from src import core_engine_classify


class ClassifyCoreEngineChangeTest(unittest.TestCase):
    def test_src_python_file_is_core_engine(self):
        self.assertTrue(core_engine_classify.classify_core_engine_change(["src/scheduler.py"]))

    def test_claude_agents_identity_file_is_core_engine(self):
        self.assertTrue(
            core_engine_classify.classify_core_engine_change([".claude/agents/coder.md"])
        )

    def test_supervisor_module_is_core_engine(self):
        self.assertTrue(
            core_engine_classify.classify_core_engine_change(["supervisor/isolation/change_manifest.py"])
        )

    def test_frontend_only_change_is_not_core_engine(self):
        self.assertFalse(core_engine_classify.classify_core_engine_change(["frontend/app.js"]))

    def test_docs_only_change_is_not_core_engine(self):
        self.assertFalse(core_engine_classify.classify_core_engine_change(["docs/development-plan.md"]))

    def test_mixed_changeset_with_one_core_engine_file_is_core_engine(self):
        self.assertTrue(
            core_engine_classify.classify_core_engine_change(["frontend/app.js", "src/e2e_pipeline.py"])
        )

    def test_empty_changeset_is_not_core_engine(self):
        self.assertFalse(core_engine_classify.classify_core_engine_change([]))

    def test_windows_style_separators_normalized(self):
        self.assertTrue(core_engine_classify.classify_core_engine_change(["src\\scheduler.py"]))


class ParseChangedFilesFromDiffTest(unittest.TestCase):
    def test_single_file_diff(self):
        diff_text = (
            "diff --git a/src/scheduler.py b/src/scheduler.py\n"
            "index abc123..def456 100644\n"
            "--- a/src/scheduler.py\n"
            "+++ b/src/scheduler.py\n"
            "@@ -1,3 +1,3 @@\n"
            "-old\n"
            "+new\n"
        )
        self.assertEqual(
            core_engine_classify.parse_changed_files_from_diff(diff_text), ["src/scheduler.py"]
        )

    def test_multiple_files_diff(self):
        diff_text = (
            "diff --git a/src/scheduler.py b/src/scheduler.py\n"
            "--- a/src/scheduler.py\n"
            "+++ b/src/scheduler.py\n"
            "@@ -1,1 +1,1 @@\n"
            "-a\n"
            "+b\n"
            "diff --git a/frontend/app.js b/frontend/app.js\n"
            "--- a/frontend/app.js\n"
            "+++ b/frontend/app.js\n"
            "@@ -1,1 +1,1 @@\n"
            "-a\n"
            "+b\n"
        )
        self.assertEqual(
            core_engine_classify.parse_changed_files_from_diff(diff_text),
            ["src/scheduler.py", "frontend/app.js"],
        )

    def test_empty_diff_returns_empty_list(self):
        self.assertEqual(core_engine_classify.parse_changed_files_from_diff(""), [])

    def test_none_diff_returns_empty_list(self):
        self.assertEqual(core_engine_classify.parse_changed_files_from_diff(None), [])


if __name__ == "__main__":
    unittest.main()