diff --git a/tests/test_custom_patterns.py b/tests/test_custom_patterns.py new file mode 100644 index 0000000..59d1e40 --- /dev/null +++ b/tests/test_custom_patterns.py @@ -0,0 +1,151 @@ +"""Tests for custom patterns module.""" + +import pytest +from pathlib import Path + +from gitignore_cli.custom_patterns import ( + CustomPattern, + CustomPatternManager, +) + + +class TestCustomPattern: + """Tests for CustomPattern class.""" + + def test_custom_pattern_creation(self): + """Test creating a CustomPattern instance.""" + pattern = CustomPattern(pattern="*.log", description="Log files") + + assert pattern.pattern == "*.log" + assert pattern.description == "Log files" + assert pattern.enabled is True + + def test_custom_pattern_disabled(self): + """Test creating a disabled CustomPattern.""" + pattern = CustomPattern(pattern="*.tmp", enabled=False) + + assert pattern.enabled is False + + def test_custom_pattern_to_dict(self): + """Test converting pattern to dictionary.""" + pattern = CustomPattern(pattern="*.log", description="Logs", enabled=True) + data = pattern.to_dict() + + assert data["pattern"] == "*.log" + assert data["description"] == "Logs" + assert data["enabled"] is True + + def test_custom_pattern_from_dict(self): + """Test creating pattern from dictionary.""" + data = { + "pattern": "*.tmp", + "description": "Temporary files", + "enabled": False, + } + pattern = CustomPattern.from_dict(data) + + assert pattern.pattern == "*.tmp" + assert pattern.description == "Temporary files" + assert pattern.enabled is False + + def test_custom_pattern_repr(self): + """Test pattern string representation.""" + pattern = CustomPattern(pattern="*.log") + repr_str = repr(pattern) + + assert "*.log" in repr_str + + +class TestCustomPatternManager: + """Tests for CustomPatternManager class.""" + + def test_add_pattern(self, custom_pattern_manager: CustomPatternManager): + """Test adding a custom pattern.""" + result = custom_pattern_manager.add_pattern("*.log", "Log files") + + assert result is True + assert custom_pattern_manager.count() == 1 + + def test_add_duplicate_pattern(self, custom_pattern_manager: CustomPatternManager): + """Test adding a duplicate pattern.""" + custom_pattern_manager.add_pattern("*.log") + + result = custom_pattern_manager.add_pattern("*.log") + assert result is False + + def test_remove_pattern(self, custom_pattern_manager: CustomPatternManager): + """Test removing a custom pattern.""" + custom_pattern_manager.add_pattern("*.log") + + result = custom_pattern_manager.remove_pattern("*.log") + assert result is True + assert custom_pattern_manager.count() == 0 + + def test_remove_nonexistent_pattern(self, custom_pattern_manager: CustomPatternManager): + """Test removing a pattern that doesn't exist.""" + result = custom_pattern_manager.remove_pattern("*.nonexistent") + assert result is False + + def test_list_patterns(self, custom_pattern_manager: CustomPatternManager): + """Test listing custom patterns.""" + custom_pattern_manager.add_pattern("*.log", "Log files") + custom_pattern_manager.add_pattern("*.tmp") + custom_pattern_manager.toggle_pattern("*.tmp") + + patterns = custom_pattern_manager.list_patterns(include_disabled=True) + assert len(patterns) == 2 + + enabled = custom_pattern_manager.list_patterns(include_disabled=False) + assert len(enabled) == 1 + + def test_get_enabled_patterns(self, custom_pattern_manager: CustomPatternManager): + """Test getting enabled pattern strings.""" + custom_pattern_manager.add_pattern("*.log") + custom_pattern_manager.add_pattern("*.tmp") + custom_pattern_manager.toggle_pattern("*.tmp") + + patterns = custom_pattern_manager.get_enabled_patterns() + assert "*.log" in patterns + assert "*.tmp" not in patterns + + def test_toggle_pattern(self, custom_pattern_manager: CustomPatternManager): + """Test toggling a pattern's enabled state.""" + custom_pattern_manager.add_pattern("*.log") + + new_state = custom_pattern_manager.toggle_pattern("*.log") + assert new_state is False + + new_state = custom_pattern_manager.toggle_pattern("*.log") + assert new_state is True + + def test_toggle_nonexistent_pattern(self, custom_pattern_manager: CustomPatternManager): + """Test toggling a nonexistent pattern.""" + result = custom_pattern_manager.toggle_pattern("*.nonexistent") + assert result is None + + def test_get_patterns_content(self, custom_pattern_manager: CustomPatternManager): + """Test getting patterns content string.""" + custom_pattern_manager.add_pattern("*.log") + custom_pattern_manager.add_pattern("*.tmp") + + content = custom_pattern_manager.get_patterns_content() + + assert "*.log" in content + assert "*.tmp" in content + + def test_count_patterns(self, custom_pattern_manager: CustomPatternManager): + """Test counting patterns.""" + assert custom_pattern_manager.count() == 0 + + custom_pattern_manager.add_pattern("*.log") + custom_pattern_manager.add_pattern("*.tmp") + + assert custom_pattern_manager.count() == 2 + + def test_count_enabled(self, custom_pattern_manager: CustomPatternManager): + """Test counting enabled patterns.""" + custom_pattern_manager.add_pattern("*.log") + custom_pattern_manager.add_pattern("*.tmp") + custom_pattern_manager.toggle_pattern("*.tmp") + + assert custom_pattern_manager.count_enabled() == 1