Completed
Push — master ( b032ab...3a61ee )
by Bart
01:17
created

EmailUtilTests.test_sendmail_attachment()   A

Complexity

Conditions 2

Size

Total Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
c 1
b 0
f 0
dl 0
loc 9
rs 9.6666
1
# -*- coding: utf-8 -*-
2
import unittest
3
4
from oe_utils.email.smtp import SMTPClient
5
from tests import load_fixture
6
7
try:
8
    from unittest.mock import Mock, patch, MagicMock, call, ANY
9
except:
10
    from mock import Mock, patch, MagicMock, call, ANY
11
12
exception = Exception('test')
13
smtp_obj_mock2 = MagicMock()
14
smtp_obj_mock2.sendmail = Mock(side_effect=exception)
15
16
17
class EmailUtilTests(unittest.TestCase):
18
    def setUp(self):
19
        self.smtp_obj_mock = MagicMock()
20
        self.smtp_obj_mock.sendmail = Mock(return_value=True)
21
        self.email_content = u"""Dear,
22
23
Thank you for your e-mail. Your message has been forwarded to Darth Vader for action as I am in a galaxy far far away.
24
25
Kind regards,
26
27
The Emperor
28
    """
29
30
    def test_sendmail(self):
31
        with patch('oe_utils.email.smtp.SMTPClient.smtp_obj') as smtp_mock:
32
            smtp_mock.__get__ = Mock(return_value=self.smtp_obj_mock)
33
            email_engine = SMTPClient('smtp', '[email protected]')
34
            email_engine.send_mail(['[email protected]'], 'test subject', self.email_content)
35
            self.assertEqual(self.smtp_obj_mock.sendmail.call_count, 1)
36
            self.smtp_obj_mock.sendmail.assert_called_once_with('[email protected]', ['[email protected]'], ANY)
37
38
    def test_sendmail_html(self):
39
        with patch('oe_utils.email.smtp.SMTPClient.smtp_obj') as smtp_mock:
40
            smtp_mock.__get__ = Mock(return_value=self.smtp_obj_mock)
41
            email_engine = SMTPClient('smtp', '[email protected]')
42
            email_engine.send_mail(['[email protected]'], 'test subject', self.email_content, self.email_content)
43
            self.assertEqual(self.smtp_obj_mock.sendmail.call_count, 1)
44
            self.smtp_obj_mock.sendmail.assert_called_once_with('[email protected]', ['[email protected]'], ANY)
45
46
    def test_sendmail_exception(self):
47
        with patch('oe_utils.email.smtp.SMTPClient.smtp_obj') as smtp_mock:
48
            smtp_mock.__get__ = Mock(return_value=smtp_obj_mock2)
49
            email_engine = SMTPClient('smtp', '[email protected]')
50
            self.assertRaises(Exception, email_engine.send_mail, ['[email protected]'], 'test subject', self.email_content)
51
            self.assertEqual(smtp_obj_mock2.sendmail.call_count, 1)
52 View Code Duplication
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
53
    def test_sendmail_cc(self):
54
        with patch('oe_utils.email.smtp.SMTPClient.smtp_obj') as smtp_mock:
55
            smtp_mock.__get__ = Mock(return_value=self.smtp_obj_mock)
56
            email_engine = SMTPClient('smtp', '[email protected]')
57
            email_engine.send_mail(['[email protected]'], 'test subject', self.email_content,
58
                                   cc=['[email protected]'])
59
            self.assertEqual(self.smtp_obj_mock.sendmail.call_count, 1)
60
            content = self.smtp_obj_mock.sendmail.mock_calls[0][1][2]
61
            self.smtp_obj_mock.sendmail.assert_called_once_with('[email protected]',
62
                                                                ['[email protected]', '[email protected]'], ANY)
63
            self.assertIn('CC', content)
64
            self.assertIn('galatic-empire', content)
65 View Code Duplication
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
66
    def test_sendmail_bcc(self):
67
        with patch('oe_utils.email.smtp.SMTPClient.smtp_obj') as smtp_mock:
68
            smtp_mock.__get__ = Mock(return_value=self.smtp_obj_mock)
69
            email_engine = SMTPClient('smtp', '[email protected]')
70
            email_engine.send_mail(['[email protected]'], 'test subject', self.email_content,
71
                                   bcc=['[email protected]'])
72
            self.assertEqual(self.smtp_obj_mock.sendmail.call_count, 1)
73
            content = self.smtp_obj_mock.sendmail.mock_calls[0][1][2]
74
            self.smtp_obj_mock.sendmail.assert_called_once_with('[email protected]',
75
                                                                ['[email protected]', '[email protected]'], ANY)
76
            self.assertIn('BCC', content)
77
            self.assertIn('galatic-empire', content)
78
79
    def test_sendmail_attachment(self):
80
        with patch('oe_utils.email.smtp.SMTPClient.smtp_obj') as smtp_mock:
81
            attachments = [
82
                {'name': 'test.pdf', 'mime': 'application/pdf', 'data': load_fixture('fixtures/Test_document.pdf')}]
83
            smtp_mock.__get__ = Mock(return_value=self.smtp_obj_mock)
84
            email_engine = SMTPClient('smtp', '[email protected]')
85
            email_engine.send_mail(['[email protected]'], 'test subject', self.email_content, files=attachments)
86
            self.assertEqual(self.smtp_obj_mock.sendmail.call_count, 1)
87
            self.smtp_obj_mock.sendmail.assert_called_once_with('[email protected]', ['[email protected]'], ANY)
88