77 lines
2.6 KiB
Python
77 lines
2.6 KiB
Python
"""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
|