from pathlib import Path import pytest from apps.sources.adapters.email_alert import EmailAlertAdapter from apps.sources.models import MailboxConnection from apps.sources.platforms import PLATFORM_ALERTS def test_email_adapter_extracts_job_links_and_skips_unsubscribe(): raw = Path("fixtures/emails/sample_alert.eml").read_bytes() result = EmailAlertAdapter().extract_message(raw) urls = {job.url for job in result.jobs} assert "https://jobs.example.org/vacatures/infrastructure-engineer" in urls assert "https://www.linkedin.com/jobs/view/123456" in urls assert all("unsubscribe" not in url for url in urls) def test_email_adapter_recognizes_sanitized_vdab_alert(): raw = Path("fixtures/emails/vdab_job_alert.eml").read_bytes() result = EmailAlertAdapter().extract_message(raw) assert {job.title for job in result.jobs} == {"Python developer", "Cloud engineer"} assert all(job.raw["alert_provider"] == "vdab" for job in result.jobs) assert all(job.raw["target_domain"] == "www.vdab.be" for job in result.jobs) assert all("uitschrijven" not in job.url for job in result.jobs) @pytest.mark.parametrize( ("provider", "fixture", "title", "domain"), ( ("linkedin", "linkedin_job_alert.eml", "Software Engineer bij Example", "linkedin.com"), ("ictjob", "ictjob_job_alert.eml", "Cloud Engineer", "ictjob.be"), ("jobat", "jobat_job_alert.eml", "Data Engineer", "jobat.be"), ("stepstone", "stepstone_job_alert.eml", "Software Developer", "stepstone.be"), ("careerjet", "careerjet_job_alert.eml", "System Engineer", "careerjet.be"), ("randstad", "randstad_job_alert.eml", "Infrastructure Engineer", "randstad.be"), ("roberthalf", "roberthalf_job_alert.eml", "Network Engineer", "roberthalf.com"), ), ) def test_platform_bound_alert_extracts_only_expected_https_jobboard_link( provider, fixture, title, domain ): raw = (Path("fixtures/emails") / fixture).read_bytes() result = EmailAlertAdapter().extract_message(raw, expected_provider=provider) assert [job.title for job in result.jobs] == [title] assert result.jobs[0].raw["alert_provider"] == provider assert result.jobs[0].raw["target_domain"].endswith(domain) assert result.jobs[0].url.startswith("https://") assert "outside.example.invalid" not in result.jobs[0].url def test_mailbox_platform_choices_and_alert_catalog_stay_in_sync(): assert set(MailboxConnection.Platform.values) == set(PLATFORM_ALERTS)