Files
auto-gitignore-cli/tests/test_detection.py

127 lines
4.8 KiB
Python

"""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