57 lines
2.5 KiB
Python
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)
|