auto-commit-service/tests/test_diff_parser.py

78 lines
2.6 KiB
Python
Raw Normal View History

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