"""Autonomous idempotency (server/dedup.py).""" import pytest from server import dedup from server.schema import Event @pytest.fixture(autouse=True) def _clean(): dedup.reset() yield dedup.reset() def _ev(title="Dinner", start="2026-06-06T18:00:00"): return Event(title=title, start=start) def test_filter_new_drops_repeats_across_calls(): first = dedup.filter_new([_ev()]) assert len(first) == 1 second = dedup.filter_new([_ev()]) assert second == [] # same event, already seen def test_filter_new_keeps_distinct(): dedup.filter_new([_ev()]) out = dedup.filter_new([_ev(title="Lunch", start="2026-06-07T12:00:00")]) assert len(out) == 1 def test_event_key_normalizes_title_and_minute(): a = dedup.event_key(_ev(title=" Dinner ", start="2026-06-06T18:00:00")) b = dedup.event_key(_ev(title="dinner", start="2026-06-06T18:00:30")) assert a == b # case/space-insensitive, start rounded to the minute def test_mixed_batch_returns_only_new(): dedup.filter_new([_ev()]) out = dedup.filter_new([_ev(), _ev(title="New", start="2026-06-08T09:00:00")]) assert [e.title for e in out] == ["New"]