from job_research.apec.dedupe import dedupe_apec_listings from job_research.models import ApecListing def test_dedupe_apec_listings_by_url_preserves_first_listing() -> None: first = ApecListing( source="apec", url="https://example.test/job/1", fetched_at="2026-06-01T10:00:00Z", ) second = ApecListing( source="apec", url="https://example.test/job/1", fetched_at="2026-06-01T10:01:00Z", ) deduped = dedupe_apec_listings([first, second]) assert deduped == [first] def test_dedupe_apec_listings_by_source_job_id_ignores_url_changes() -> None: first = ApecListing( source="apec", source_job_id="job-123", url="https://example.test/job/1", fetched_at="2026-06-01T10:00:00Z", ) second = ApecListing( source="apec", source_job_id="job-123", url="https://example.test/job/2", fetched_at="2026-06-01T10:01:00Z", ) deduped = dedupe_apec_listings([first, second]) assert deduped == [first] def test_dedupe_apec_listings_collapses_mixed_key_duplicates() -> None: first = ApecListing( source="apec", source_job_id="job-123", url="https://example.test/job/1", fetched_at="2026-06-01T10:00:00Z", ) second = ApecListing( source="apec", source_job_id=None, url="https://example.test/job/1", fetched_at="2026-06-01T10:01:00Z", ) deduped = dedupe_apec_listings([first, second]) assert deduped == [first]