jarvis-assist/Claude outputs/tests/test_email.py

69 lines
2.3 KiB
Python

import base64
import os
import sys
from unittest.mock import MagicMock, patch
sys.path.insert(0, os.path.join(os.path.dirname(__file__), ".."))
import main
def _encoded_subject(text: str) -> bytes:
return b"=?utf-8?B?" + base64.b64encode(text.encode("utf-8")) + b"?="
def _header_bytes(subject_bytes: bytes) -> bytes:
return (
b"From: Sender <sender@example.com>\r\n"
b"Subject: " + subject_bytes + b"\r\n"
b"Date: Fri, 11 Sep 2026 15:47:02 +0000\r\n\r\n"
)
def test_list_recent_emails_decodes_subject_and_marks_unread():
fake_conn = MagicMock()
fake_conn.search.return_value = ("OK", [b"1"])
fake_conn.fetch.return_value = (
"OK",
[(b"1 (FLAGS () BODY[HEADER.FIELDS (FROM SUBJECT DATE)] {123}", _header_bytes(_encoded_subject("Ümlaut Betreff")))],
)
with patch.object(main.imaplib, "IMAP4", return_value=fake_conn):
emails = main._list_recent_emails_sync(limit=1)
assert len(emails) == 1
assert emails[0]["subject"] == "Ümlaut Betreff"
assert emails[0]["from"] == "Sender <sender@example.com>"
assert emails[0]["unread"] is True
fake_conn.login.assert_called_once_with(main.EMAIL_USER, main.EMAIL_PASSWORD)
def test_list_recent_emails_marks_seen_messages_as_read():
fake_conn = MagicMock()
fake_conn.search.return_value = ("OK", [b"1"])
fake_conn.fetch.return_value = (
"OK",
[(b"1 (FLAGS (\\Seen) BODY[HEADER.FIELDS (FROM SUBJECT DATE)] {123}", _header_bytes(b"Plain Subject"))],
)
with patch.object(main.imaplib, "IMAP4", return_value=fake_conn):
emails = main._list_recent_emails_sync(limit=1)
assert emails[0]["unread"] is False
assert emails[0]["subject"] == "Plain Subject"
def test_send_email_calls_smtp_with_composed_message():
fake_smtp = MagicMock()
with patch.object(main.smtplib, "SMTP_SSL", return_value=fake_smtp):
result = main._send_email_sync("empfaenger@example.com", "Betreff", "Text")
fake_smtp.login.assert_called_once_with(main.EMAIL_USER, main.EMAIL_PASSWORD)
fake_smtp.send_message.assert_called_once()
sent_msg = fake_smtp.send_message.call_args[0][0]
assert sent_msg["To"] == "empfaenger@example.com"
assert sent_msg["Subject"] == "Betreff"
assert sent_msg["Date"] is not None
assert result == {"to": "empfaenger@example.com", "subject": "Betreff", "sent": True}