A Python port of the Invisible Internet Project (I2P)
1"""Tests for SusiMail — TDD: tests before implementation."""
2
3import pytest
4from i2p_apps.susimail.config import MailConfig
5from i2p_apps.susimail.message import MailMessage, parse_email
6from i2p_apps.susimail.folder import MailFolder
7
8
9class TestMailConfig:
10 def test_defaults(self):
11 cfg = MailConfig()
12 assert cfg.pop3_host == "127.0.0.1"
13 assert cfg.pop3_port == 7660
14 assert cfg.smtp_host == "127.0.0.1"
15 assert cfg.smtp_port == 7659
16
17 def test_custom(self):
18 cfg = MailConfig(pop3_port=1110, smtp_port=2525)
19 assert cfg.pop3_port == 1110
20 assert cfg.smtp_port == 2525
21
22 def test_identity(self):
23 cfg = MailConfig(identity="user@mail.i2p")
24 assert cfg.identity == "user@mail.i2p"
25
26
27class TestMailMessage:
28 def test_creation(self):
29 msg = MailMessage(
30 sender="alice@mail.i2p",
31 recipient="bob@mail.i2p",
32 subject="Hello",
33 body="Test message",
34 )
35 assert msg.sender == "alice@mail.i2p"
36 assert msg.subject == "Hello"
37
38 def test_parse_email(self):
39 raw = (
40 "From: alice@mail.i2p\r\n"
41 "To: bob@mail.i2p\r\n"
42 "Subject: Test\r\n"
43 "\r\n"
44 "Hello world\r\n"
45 )
46 msg = parse_email(raw)
47 assert msg.sender == "alice@mail.i2p"
48 assert msg.recipient == "bob@mail.i2p"
49 assert msg.subject == "Test"
50 assert "Hello world" in msg.body
51
52 def test_parse_minimal(self):
53 raw = "From: x@y\r\nTo: a@b\r\nSubject: s\r\n\r\nbody"
54 msg = parse_email(raw)
55 assert msg.sender == "x@y"
56 assert msg.body == "body"
57
58
59class TestMailFolder:
60 def test_creation(self):
61 folder = MailFolder(name="Inbox")
62 assert folder.name == "Inbox"
63 assert len(folder.messages) == 0
64
65 def test_add_message(self):
66 folder = MailFolder(name="Inbox")
67 msg = MailMessage("a@b", "c@d", "Test", "body")
68 folder.add(msg)
69 assert len(folder.messages) == 1
70
71 def test_delete_message(self):
72 folder = MailFolder(name="Inbox")
73 msg = MailMessage("a@b", "c@d", "Test", "body")
74 folder.add(msg)
75 folder.delete(0)
76 assert len(folder.messages) == 0
77
78 def test_delete_out_of_range(self):
79 folder = MailFolder(name="Inbox")
80 with pytest.raises(IndexError):
81 folder.delete(0)