Legal-Document-Intelligence / tests /test_feedback.py
sahilfarib's picture
Upload folder using huggingface_hub
db3715a verified
Raw
History Blame Contribute Delete
3.62 kB
"""
tests/test_feedback.py — Tests for feedback loop (no API required)
"""
import sys
import tempfile
from pathlib import Path
import pytest
sys.path.insert(0, str(Path(__file__).parent.parent))
from feedback.diff_engine import DiffEngine
from feedback.pattern_store import PatternStore
class TestDiffEngine:
def setup_method(self):
self.engine = DiffEngine()
def test_identical_texts(self):
diff = self.engine.compute("hello world", "hello world")
assert diff.change_ratio == 0.0
assert diff.additions == []
assert diff.deletions == []
def test_added_content(self):
diff = self.engine.compute("line one", "line one\nline two")
assert len(diff.additions) > 0
assert diff.change_ratio > 0
def test_deleted_content(self):
diff = self.engine.compute("line one\nline two", "line one")
assert len(diff.deletions) > 0
def test_replaced_content(self):
diff = self.engine.compute("old text here", "new text here")
assert len(diff.additions) > 0
assert len(diff.deletions) > 0
def test_change_ratio_range(self):
diff = self.engine.compute("aaa", "zzz")
assert 0.0 <= diff.change_ratio <= 1.0
def test_large_edit(self):
original = "Section 1\nContent A\nSection 2\nContent B"
edited = "Section 1\nContent A Modified\nSection 2\nContent B\nSection 3\nNew content"
diff = self.engine.compute(original, edited)
assert diff.change_ratio > 0.05
class TestPatternStore:
@pytest.fixture
def store(self):
with tempfile.TemporaryDirectory() as tmpdir:
yield PatternStore(db_path=Path(tmpdir) / "test.db")
def test_save_and_retrieve(self, store):
pid = store.save_pattern("Always list dates chronologically", "contract")
patterns = store.get_active_patterns()
assert len(patterns) == 1
assert patterns[0][1] == "Always list dates chronologically"
def test_deactivate_pattern(self, store):
pid = store.save_pattern("Test pattern", "memo")
store.deactivate_pattern(pid)
patterns = store.get_active_patterns()
assert len(patterns) == 0
def test_update_pattern(self, store):
pid = store.save_pattern("Old rule", "contract")
store.update_pattern(pid, "New improved rule")
patterns = store.get_active_patterns()
assert patterns[0][1] == "New improved rule"
def test_pattern_count(self, store):
assert store.pattern_count() == 0
store.save_pattern("Rule 1", "contract")
store.save_pattern("Rule 2", "memo")
assert store.pattern_count() == 2
def test_draft_history(self, store):
store.save_draft("d1", "Case Fact Summary", "file.pdf", "Draft text here")
draft = store.get_draft("d1")
assert draft is not None
assert draft["draft_type"] == "Case Fact Summary"
def test_feedback_log(self, store):
store.log_feedback("d1", "original", "edited", 0.15, "p1")
def test_filter_by_doc_type(self, store):
store.save_pattern("Contract rule", "contract")
store.save_pattern("Memo rule", "memo")
contract_patterns = store.get_active_patterns(doc_type="contract")
assert len(contract_patterns) == 1
assert "Contract" in contract_patterns[0][1]
def test_get_all_patterns(self, store):
store.save_pattern("Rule A", "contract")
store.save_pattern("Rule B", "memo")
all_p = store.get_all_patterns()
assert len(all_p) == 2
assert "pattern" in all_p[0]