Add test files and configuration
This commit is contained in:
126
tests/test_detection.py
Normal file
126
tests/test_detection.py
Normal file
@@ -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
|
||||||
Reference in New Issue
Block a user