diff --git a/tests/test_detection.py b/tests/test_detection.py new file mode 100644 index 0000000..ca5e689 --- /dev/null +++ b/tests/test_detection.py @@ -0,0 +1,126 @@ +"""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