Files
VacatureRadar/tests/unit/test_email_adapter.py
T
2026-07-22 05:12:07 +02:00

57 lines
2.5 KiB
Python

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)