diff --git a/tests/unit/test_patterns.py b/tests/unit/test_patterns.py new file mode 100644 index 0000000..c749c7d --- /dev/null +++ b/tests/unit/test_patterns.py @@ -0,0 +1,114 @@ +"""Unit tests for patterns.""" + +import pytest +from vibeguard.patterns.definitions import Severity, Pattern, Issue +from vibeguard.patterns.manager import PatternManager + + +class TestPatternDefinitions: + """Tests for pattern definitions.""" + + def test_severity_order(self): + """Test severity ordering.""" + assert Severity.CRITICAL.value == "critical" + assert Severity.ERROR.value == "error" + assert Severity.WARNING.value == "warning" + assert Severity.INFO.value == "info" + + def test_pattern_creation(self): + """Test pattern creation.""" + pattern = Pattern( + id="TEST001", + name="Test Pattern", + description="A test pattern", + severity=Severity.WARNING, + languages=["python"], + message="Test message", + suggestion="Test suggestion", + ) + + assert pattern.id == "TEST001" + assert pattern.name == "Test Pattern" + assert pattern.severity == Severity.WARNING + assert "python" in pattern.languages + + def test_issue_to_dict(self): + """Test issue to dictionary conversion.""" + issue = Issue( + pattern_id="TEST001", + file="test.py", + line=10, + severity=Severity.WARNING, + message="Test message", + suggestion="Test suggestion", + ) + + result = issue.to_dict() + + assert result["pattern"] == "TEST001" + assert result["file"] == "test.py" + assert result["line"] == 10 + assert result["severity"] == "warning" + + +class TestPatternManager: + """Tests for pattern manager.""" + + def test_load_patterns(self): + """Test loading all patterns.""" + manager = PatternManager() + manager.load_all_patterns() + + assert len(manager.patterns) > 0 + + def test_get_pattern(self): + """Test getting a pattern by ID.""" + manager = PatternManager() + manager.load_all_patterns() + + pattern = manager.get_pattern("PY001") + assert pattern is not None + assert pattern.id == "PY001" + + def test_get_patterns_by_language(self): + """Test getting patterns for a specific language.""" + manager = PatternManager() + manager.load_all_patterns() + + python_patterns = manager.get_patterns_by_language("python") + assert len(python_patterns) > 0 + + for pattern in python_patterns: + assert "python" in pattern.languages or "all" in pattern.languages + + def test_get_patterns_by_severity(self): + """Test getting patterns by severity.""" + manager = PatternManager() + manager.load_all_patterns() + + error_patterns = manager.get_patterns_by_severity(Severity.ERROR) + for pattern in error_patterns: + assert pattern.severity == Severity.ERROR + + def test_to_dict(self): + """Test converting patterns to dictionary.""" + manager = PatternManager() + manager.load_all_patterns() + + result = manager.to_dict() + + assert isinstance(result, dict) + assert len(result) > 0 + for pattern_id, pattern_data in result.items(): + assert "id" in pattern_data + assert "name" in pattern_data + assert "severity" in pattern_data + + def test_pattern_categories(self): + """Test that patterns have proper categories.""" + manager = PatternManager() + manager.load_all_patterns() + + for pattern in manager.patterns.values(): + assert pattern.category is not None + assert len(pattern.category) > 0