Add test configuration and unit tests
Some checks failed
CI / test (push) Failing after 13s

This commit is contained in:
2026-02-02 15:57:37 +00:00
parent 4facb5d121
commit 61c5443e2b

View File

@@ -0,0 +1,107 @@
"""Tests for validator."""
import pytest
from gitignore_generator.validator import Validator, ValidationIssue
class TestValidator:
"""Tests for Validator class."""
@pytest.fixture
def validator(self):
"""Create validator instance."""
return Validator()
def test_valid_content(self, validator):
"""Test validation of valid content."""
content = "__pycache__/\n*.pyc\nnode_modules/\n"
summary = validator.get_summary(content)
assert summary["valid"] is True
assert summary["errors"] == 0
def test_trailing_slash_warning(self, validator):
"""Test detection of trailing slashes."""
content = "dir/\n"
summary = validator.get_summary(content)
assert summary["warnings"] >= 1
has_trailing = any(
"trailing_slash" in issue.issue_type
for issue in summary["issues"]
)
assert has_trailing
def test_duplicate_pattern_warning(self, validator):
"""Test detection of duplicate patterns."""
content = "__pycache__\n__pycache__\n"
summary = validator.get_summary(content)
assert summary["warnings"] >= 1
def test_backslash_escape_error(self, validator):
"""Test detection of invalid backslash escapes."""
content = "test\\nfile\n"
summary = validator.get_summary(content)
assert summary["errors"] >= 1
def test_double_star_warning(self, validator):
"""Test detection of problematic double star usage."""
content = "test**/file\n"
summary = validator.get_summary(content)
assert summary["warnings"] >= 1
def test_double_negation_warning(self, validator):
"""Test detection of consecutive negations."""
content = "!file.txt\n!other.txt\n"
summary = validator.get_summary(content)
assert summary["warnings"] >= 1
def test_validate_pattern_valid(self, validator):
"""Test validating a single valid pattern."""
issue = validator.validate_pattern("*.pyc")
assert issue is None
def test_validate_pattern_invalid(self, validator):
"""Test validating an invalid pattern."""
issue = validator.validate_pattern("test\\n")
assert issue is not None
assert issue.severity == "error"
def test_comments_ignored(self, validator):
"""Test that comments are ignored."""
content = "# This is a comment\n__pycache__/\n"
summary = validator.get_summary(content)
assert summary["valid"] is True
def test_empty_lines_ignored(self, validator):
"""Test that empty lines are ignored."""
content = "\n\n\n__pycache__/\n\n"
summary = validator.get_summary(content)
assert summary["valid"] is True
def test_is_valid_method(self, validator):
"""Test is_valid method."""
assert validator.is_valid("*.pyc") is True
assert validator.is_valid("test\\n") is False
def test_validation_issue_line_number(self, validator):
"""Test that line numbers are correct in issues."""
content = "valid_line.pyc\ntest\\n\n"
summary = validator.get_summary(content)
backslash_issue = next(
(i for i in summary["issues"] if i.issue_type == "invalid_escape"),
None
)
assert backslash_issue is not None
assert backslash_issue.line_number == 2
def test_empty_content_valid(self, validator):
"""Test that empty content is valid."""
summary = validator.get_summary("")
assert summary["valid"] is True
assert summary["errors"] == 0
def test_only_comments_valid(self, validator):
"""Test that only comments is valid."""
content = "# Comment 1\n# Comment 2\n"
summary = validator.get_summary(content)
assert summary["valid"] is True