From 98312c7b9bad1dc50dcce91b2da8eb7a70d33513 Mon Sep 17 00:00:00 2001 From: arvarik <9952627+arvarik@users.noreply.github.com> Date: Tue, 23 Jun 2026 21:31:08 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=A7=AA=20Add=20tests=20for=20infrastructu?= =?UTF-8?q?re=20detection=20in=20ProjectDetector?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> --- tests/test_detector.py | 50 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/tests/test_detector.py b/tests/test_detector.py index 65c45e1..1647e8d 100644 --- a/tests/test_detector.py +++ b/tests/test_detector.py @@ -174,3 +174,53 @@ def test_detects_source_dirs(self, python_fastapi: Path) -> None: detector = ProjectDetector() profile = detector.detect(python_fastapi) assert any(d.name == "src" for d in profile.source_dirs) + +class TestInfrastructureDetection: + """Test infrastructure detection logic.""" + + def test_detects_docker_compose(self, empty_project: Path) -> None: + (empty_project / "docker-compose.yml").touch() + detector = ProjectDetector() + profile = detector.detect(empty_project) + + assert profile.language == "yaml" + assert Topology.INFRASTRUCTURE in profile.topologies + assert profile.manifest_file is not None + assert profile.manifest_file.name == "docker-compose.yml" + + def test_detects_terraform(self, empty_project: Path) -> None: + (empty_project / "main.tf").touch() + detector = ProjectDetector() + profile = detector.detect(empty_project) + + assert profile.language == "yaml" + assert Topology.INFRASTRUCTURE in profile.topologies + + def test_detects_kubernetes(self, empty_project: Path) -> None: + # Test k8s directory + k8s_dir = empty_project / "k8s" + k8s_dir.mkdir() + detector = ProjectDetector() + profile = detector.detect(empty_project) + + assert profile.language == "yaml" + assert Topology.INFRASTRUCTURE in profile.topologies + + # Cleanup for next part + k8s_dir.rmdir() + + # Test kubernetes directory + (empty_project / "kubernetes").mkdir() + profile = detector.detect(empty_project) + assert Topology.INFRASTRUCTURE in profile.topologies + + def test_skips_infrastructure_if_app_code_present(self, empty_project: Path) -> None: + (empty_project / "package.json").write_text("{}") + (empty_project / "docker-compose.yml").touch() + + detector = ProjectDetector() + profile = detector.detect(empty_project) + + # Should be detected as javascript/typescript, not yaml infrastructure + assert profile.language in ("javascript", "typescript") + assert Topology.INFRASTRUCTURE not in profile.topologies