"""Tests for diff parser module.""" import pytest from auto_commit_service.git.diff_parser import summarize_diff, DiffSummary class TestSummarizeDiff: """Tests for summarize_diff function.""" def test_empty_diff(self) -> None: """Test parsing empty diff.""" summary = summarize_diff("") assert summary.files_modified == 0 assert summary.files_added == 0 assert summary.files_deleted == 0 assert summary.additions == 0 assert summary.deletions == 0 def test_modified_file(self, sample_diff: str) -> None: """Test parsing diff with modified file.""" summary = summarize_diff(sample_diff) assert summary.files_modified == 1 # src/app.py assert summary.files_added == 1 # src/utils.py assert summary.additions > 0 assert "src/app.py" in summary.key_files assert "src/utils.py" in summary.key_files def test_file_types_tracking(self, sample_diff: str) -> None: """Test that file types are tracked.""" summary = summarize_diff(sample_diff) assert ".py" in summary.file_types assert summary.file_types[".py"] == 2 def test_diff_excerpt_truncation(self) -> None: """Test that large diffs are truncated.""" # Create a large diff large_diff = "\n".join([f"+line {i}" for i in range(500)]) large_diff = f"diff --git a/big.txt b/big.txt\n{large_diff}" summary = summarize_diff(large_diff, max_excerpt_lines=50) assert "truncated" in summary.diff_excerpt.lower() assert len(summary.diff_excerpt.split("\n")) <= 52 # 50 + truncation message def test_total_properties(self, sample_diff: str) -> None: """Test total_files and total_changes properties.""" summary = summarize_diff(sample_diff) assert summary.total_files == summary.files_modified + summary.files_added + summary.files_deleted assert summary.total_changes == summary.additions + summary.deletions class TestDiffSummary: """Tests for DiffSummary dataclass.""" def test_default_values(self) -> None: """Test default values.""" summary = DiffSummary() assert summary.files_modified == 0 assert summary.file_types == {} assert summary.key_files == [] assert summary.diff_excerpt == "" def test_total_files(self) -> None: """Test total_files property.""" summary = DiffSummary( files_modified=5, files_added=3, files_deleted=2, ) assert summary.total_files == 10