69 lines
2.3 KiB
Python
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}
|