import pytest
from pathlib import Path
from domin8.tools.diff_utils import normalize_diff, FileChange
from domin8.git_ops import create_diff
def test_normalize_single_file_edit():
target = Path('docs/refactor_plan.md')
assert target.exists()
original = target.read_text()
new = original.replace('Phase 1 – Single Tool Contract', 'Phase 1 — Single Tool Contract')
diff = create_diff(original, new, str(target))
normalized = normalize_diff(diff)
assert isinstance(normalized, list)
assert len(normalized) == 1
fc: FileChange = normalized[0]
assert fc.repo_relative_path == 'docs/refactor_plan.md'
assert fc.action in ('edit', 'create', 'delete', 'rename')
assert isinstance(fc.hunks, list)
# For an edit, expect at least one hunk
assert len(fc.hunks) >= 1
assert fc.file_type == 'docs'
def test_normalize_multifile():
a = Path('docs/refactor_plan.md')
b = Path('docs/request_change_config.md')
assert a.exists() and b.exists()
a_orig = a.read_text()
a_new = a_orig.replace('Phase 1 – Single Tool Contract', 'Phase 1 — Single Tool Contract')
b_orig = b.read_text()
b_new = b_orig.replace('allow', 'allow (edited)')
diff_a = create_diff(a_orig, a_new, str(a))
diff_b = create_diff(b_orig, b_new, str(b))
multi = diff_a + "\n" + diff_b
normalized = normalize_diff(multi)
paths = [f.repo_relative_path for f in normalized]
assert 'docs/refactor_plan.md' in paths
assert 'docs/request_change_config.md' in paths
assert all(isinstance(f, FileChange) for f in normalized)