| """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 == []
|
|
|
|
|
| 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
|
|
|
|
|
| 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"]
|
|
|