from email.message import EmailMessage from routes.email_routes import ( _dedupe_unsubscribe_candidates, _email_unsubscribe_candidate_from_msg, _parse_list_unsubscribe_header, ) def test_parse_list_unsubscribe_mailto_and_url(): methods = _parse_list_unsubscribe_header( ', ' '' ) assert methods == [ { "kind": "mailto", "target": "list@example.com", "subject": "unsubscribe", "body": "remove me", "executable": True, }, { "kind": "url", "target": "https://example.com/unsubscribe/token", "executable": False, }, ] def test_unsubscribe_candidate_requires_unsubscribe_header(): msg = EmailMessage() msg["From"] = "Shop " msg["Subject"] = "Limited time discount" msg["Precedence"] = "bulk" assert _email_unsubscribe_candidate_from_msg(msg, "12", "INBOX") is None def test_unsubscribe_candidate_scores_bulk_newsletter(): msg = EmailMessage() msg["From"] = "Shop " msg["Subject"] = "Limited time discount" msg["Precedence"] = "bulk" msg["List-Id"] = "Shop Deals " msg["List-Unsubscribe"] = "" candidate = _email_unsubscribe_candidate_from_msg( msg, "12", "INBOX", spam_cached={"spam": True, "reason": "marketing blast"}, ) assert candidate is not None assert candidate["uid"] == "12" assert candidate["can_execute"] is True assert candidate["recommended_method"]["kind"] == "mailto" assert "marketing blast" in candidate["reasons"] def test_dedupe_unsubscribe_candidates_collapses_same_list(): first = EmailMessage() first["From"] = "Shop " first["Subject"] = "Sale one" first["List-Id"] = "Shop Deals " first["List-Unsubscribe"] = "" second = EmailMessage() second["From"] = "Shop " second["Subject"] = "Sale two" second["List-Id"] = "Shop Deals " second["List-Unsubscribe"] = "" candidates = [ _email_unsubscribe_candidate_from_msg(first, "12", "INBOX"), _email_unsubscribe_candidate_from_msg(second, "13", "INBOX"), ] deduped = _dedupe_unsubscribe_candidates(candidates) assert len(deduped) == 1 assert deduped[0]["duplicate_count"] == 2 assert deduped[0]["duplicate_uids"] == ["12", "13"]