"""Tests for project detection functionality.""" from pathlib import Path from src.detectors.framework import FrameworkDetector from src.detectors.ide import IDEDetector from src.detectors.language import LanguageDetector class TestLanguageDetector: """Tests for LanguageDetector class.""" def test_detect_python_from_requirements(self, python_project: Path): """Test Python detection from requirements.txt.""" detector = LanguageDetector() languages = detector.detect(python_project) assert "python" in languages def test_detect_python_from_setup_py(self, python_project: Path): """Test Python detection from setup.py.""" detector = LanguageDetector() languages = detector.detect(python_project) assert "python" in languages def test_detect_nodejs_from_package_json(self, nodejs_project: Path): """Test Node.js detection from package.json.""" detector = LanguageDetector() languages = detector.detect(nodejs_project) assert "nodejs" in languages def test_detect_no_language_in_empty_dir(self, temp_project_dir: Path): """Test that empty directory has no detected languages.""" detector = LanguageDetector() languages = detector.detect(temp_project_dir) assert len(languages) == 0 def test_get_priority(self): """Test that detector returns correct priority.""" detector = LanguageDetector() assert detector.get_priority() == 100 def test_detect_from_content(self, python_project: Path): """Test detection from file content analysis.""" detector = LanguageDetector() language_files = detector.detect_from_content(python_project) assert "python" in language_files class TestFrameworkDetector: """Tests for FrameworkDetector class.""" def test_detect_django_from_manage_py(self, django_project: Path): """Test Django detection from manage.py.""" detector = FrameworkDetector() frameworks = detector.detect(django_project) assert "django" in frameworks def test_detect_react_from_package_json(self, react_project: Path): """Test React detection from package.json.""" detector = FrameworkDetector() frameworks = detector.detect(react_project) assert "react" in frameworks def test_get_priority(self): """Test that detector returns correct priority.""" detector = FrameworkDetector() assert detector.get_priority() == 90 def test_detect_no_framework_in_empty_dir(self, temp_project_dir: Path): """Test that empty directory has no detected frameworks.""" detector = FrameworkDetector() frameworks = detector.detect(temp_project_dir) assert len(frameworks) == 0 class TestIDEDetector: """Tests for IDEDetector class.""" def test_detect_vscode_from_config(self, vscode_project: Path): """Test VSCode detection from .vscode directory.""" detector = IDEDetector() ides = detector.detect(vscode_project) assert "vscode" in ides def test_detect_jetbrains_from_idea_dir(self, jetbrains_project: Path): """Test JetBrains detection from .idea directory.""" detector = IDEDetector() ides = detector.detect(jetbrains_project) assert "jetbrains" in ides def test_detect_vscode_specific_method(self, vscode_project: Path): """Test VSCode detection using specific method.""" detector = IDEDetector() assert detector.detect_vscode(vscode_project) is True def test_detect_jetbrains_specific_method(self, jetbrains_project: Path): """Test JetBrains detection using specific method.""" detector = IDEDetector() assert detector.detect_jetbrains(jetbrains_project) is True def test_get_priority(self): """Test that detector returns correct priority.""" detector = IDEDetector() assert detector.get_priority() == 80 def test_detect_no_ide_in_empty_dir(self, temp_project_dir: Path): """Test that empty directory has no detected IDEs.""" detector = IDEDetector() ides = detector.detect(temp_project_dir) assert len(ides) == 0 class TestMixedProjectDetection: """Tests for detection in mixed projects.""" def test_detect_multiple_languages(self, mixed_project: Path): """Test detection of multiple languages in mixed project.""" detector = LanguageDetector() languages = detector.detect(mixed_project) assert len(languages) >= 1 def test_detect_django_and_react(self, mixed_project: Path): """Test detection of Django and React in same project.""" framework_detector = FrameworkDetector() frameworks = framework_detector.detect(mixed_project) assert len(frameworks) >= 1