"""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