"""Tests for SusiMail — TDD: tests before implementation.""" import pytest from i2p_apps.susimail.config import MailConfig from i2p_apps.susimail.message import MailMessage, parse_email from i2p_apps.susimail.folder import MailFolder class TestMailConfig: def test_defaults(self): cfg = MailConfig() assert cfg.pop3_host == "127.0.0.1" assert cfg.pop3_port == 7660 assert cfg.smtp_host == "127.0.0.1" assert cfg.smtp_port == 7659 def test_custom(self): cfg = MailConfig(pop3_port=1110, smtp_port=2525) assert cfg.pop3_port == 1110 assert cfg.smtp_port == 2525 def test_identity(self): cfg = MailConfig(identity="user@mail.i2p") assert cfg.identity == "user@mail.i2p" class TestMailMessage: def test_creation(self): msg = MailMessage( sender="alice@mail.i2p", recipient="bob@mail.i2p", subject="Hello", body="Test message", ) assert msg.sender == "alice@mail.i2p" assert msg.subject == "Hello" def test_parse_email(self): raw = ( "From: alice@mail.i2p\r\n" "To: bob@mail.i2p\r\n" "Subject: Test\r\n" "\r\n" "Hello world\r\n" ) msg = parse_email(raw) assert msg.sender == "alice@mail.i2p" assert msg.recipient == "bob@mail.i2p" assert msg.subject == "Test" assert "Hello world" in msg.body def test_parse_minimal(self): raw = "From: x@y\r\nTo: a@b\r\nSubject: s\r\n\r\nbody" msg = parse_email(raw) assert msg.sender == "x@y" assert msg.body == "body" class TestMailFolder: def test_creation(self): folder = MailFolder(name="Inbox") assert folder.name == "Inbox" assert len(folder.messages) == 0 def test_add_message(self): folder = MailFolder(name="Inbox") msg = MailMessage("a@b", "c@d", "Test", "body") folder.add(msg) assert len(folder.messages) == 1 def test_delete_message(self): folder = MailFolder(name="Inbox") msg = MailMessage("a@b", "c@d", "Test", "body") folder.add(msg) folder.delete(0) assert len(folder.messages) == 0 def test_delete_out_of_range(self): folder = MailFolder(name="Inbox") with pytest.raises(IndexError): folder.delete(0)