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 \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 " 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}