feat(sp41): claim-id dedup at SFTP pre-flight (30-day window, configurable)

This commit is contained in:
Nora
2026-07-07 22:02:46 -06:00
parent 13dd240328
commit 0e130579b4
6 changed files with 138 additions and 10 deletions
+38
View File
@@ -0,0 +1,38 @@
"""Claim-id dedup at the SFTP pre-flight stage."""
from datetime import datetime
from cyclone.store.submission_dedup import (
DuplicateClaimError,
record_submission,
check_duplicate,
DEFAULT_WINDOW_DAYS,
)
def test_check_duplicate_returns_none_for_first_submission(tmp_path):
db = tmp_path / "test.db"
assert check_duplicate("ORIG-001", db_url=f"sqlite:///{db}") is None
def test_check_duplicate_raises_within_window(tmp_path):
db = tmp_path / "test.db"
record_submission("ORIG-002", submitted_at=datetime(2026, 6, 1), db_url=f"sqlite:///{db}")
try:
check_duplicate("ORIG-002", db_url=f"sqlite:///{db}",
now=datetime(2026, 6, 15))
except DuplicateClaimError as e:
assert e.claim_id == "ORIG-002"
assert e.original_submission_at == datetime(2026, 6, 1)
else:
raise AssertionError("expected DuplicateClaimError")
def test_check_duplicate_passes_after_window(tmp_path):
db = tmp_path / "test.db"
record_submission("ORIG-003", submitted_at=datetime(2026, 1, 1), db_url=f"sqlite:///{db}")
# 100 days later — past the 30-day default window
assert check_duplicate("ORIG-003", db_url=f"sqlite:///{db}",
now=datetime(2026, 4, 11)) is None
def test_default_window_is_30_days():
assert DEFAULT_WINDOW_DAYS == 30