aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/python/pytest-localserver/py2/tests/test_smtp.py
blob: 010f29d1138d7c75c3714f6d5efa573d35fc056b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import smtplib

try:  # python 3
    from email.mime.text import MIMEText
except ImportError:  # python 2?
    from email.MIMEText import MIMEText

from pytest_localserver import plugin, smtp


def send_plain_email(to, from_, subject, txt, server=('localhost', 25)):
    """
    Sends a simple plain text message via SMTP.
    """
    if type(to) in (tuple, list):
        to = ', '.join(to)

    # Create a text/plain message
    msg = MIMEText(txt)
    msg['Subject'] = subject
    msg['From'] = from_
    msg['To'] = to

    host, port = server[:2]
    server = smtplib.SMTP(host, port)
    server.set_debuglevel(1)
    server.sendmail(from_, to, msg.as_string())
    server.quit()


# define test fixture here again in order to run tests without having to
# install the plugin anew every single time
smtpserver = plugin.smtpserver


def test_smtpserver_funcarg(smtpserver):
    assert isinstance(smtpserver, smtp.Server)
    assert smtpserver.is_alive()
    assert smtpserver.accepting and smtpserver.addr


def test_server_is_killed(smtpserver):
    assert smtpserver.is_alive()
    smtpserver.stop()
    assert not smtpserver.is_alive()


def test_server_is_deleted(smtpserver):
    assert smtpserver.is_alive()
    smtpserver.__del__()  # need to call magic method here!
    assert not smtpserver.is_alive()


def test_smtpserver_has_empty_outbox_at_startup(smtpserver):
    assert len(smtpserver.outbox) == 0


def test_send_email(smtpserver):
    # send one e-mail
    send_plain_email(
        'alice@example.com', 'webmaster@example.com',
        'Your e-mail is getting there', 'Seems like this test actually works!',
        smtpserver.addr)
    msg = smtpserver.outbox[-1]
    assert msg['To'] == 'alice@example.com'
    assert msg['From'] == 'webmaster@example.com'
    assert msg['Subject'] == 'Your e-mail is getting there'
    assert msg.details.rcpttos == ['alice@example.com']
    assert msg.details.peer
    assert msg.details.mailfrom

    # send another e-mail
    send_plain_email(
        'bob@example.com', 'webmaster@example.com',
        'His e-mail too', 'Seems like this test actually works!',
        smtpserver.addr)

    msg = smtpserver.outbox[-1]
    assert msg['To'] == 'bob@example.com'
    assert msg['From'] == 'webmaster@example.com'
    assert msg['Subject'] == 'His e-mail too'

    # two mails are now in outbox
    assert len(smtpserver.outbox) == 2