Completed
Push — main ( eac31d...478f4a )
by Alexander
01:30
created

MyTestCase.test_upload_msg_to_server()   A

Complexity

Conditions 2

Size

Total Lines 14
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 11
nop 1
dl 0
loc 14
rs 9.85
c 0
b 0
f 0
1
#!/usr/bin/env python3
2
# -*- coding: utf-8 -*-
3
4
"""Module documentation goes here."""
5
6
import email
7
import logging
8
import unittest
9
from src.mailbox_cleaner import MailboxCleaner
10
11
12
class MyTestCase(unittest.TestCase):
13
    """Class documentation goes here."""
14
15
    class _Namespace:  # pylint: disable=R0903
16
        """Helper class for arguments."""
17
18
        def __init__(self, **kwargs):
19
            self.__dict__.update(kwargs)
20
21
    def setUp(self):
22
        logging.basicConfig(level=logging.DEBUG)
23
        self.args = self._Namespace(server='example.org',
24
                                    max_size=20,
25
                                    skip_download=False,
26
                                    detach=False,
27
                                    target='/tmp/mailbox_cleaner')
28
29
    def test_get_tags(self):
30
        """Testing flag extraction."""
31
32
        test_input = [(b'1 (RFC822 {242020}', b'\r\n'),
33
                      b' UID 142377 FLAGS (\\Seen \\Recent NotJunk)']
34
        test_output = MailboxCleaner.get_flags_from_struct(test_input)
35
        print("Result: ", test_output)
36
        self.assertTrue("Seen" in test_output)
37
        self.assertTrue("NotJunk" in test_output)
38
        self.assertFalse("Recent" in test_output)
39
40
    @unittest.skip("set timezone or change comparison first")
41
    def test_convert_date(self):
42
        """Testing date conversion."""
43
44
        test_input = "Thu, 22 Oct 2020 12:38:26 +0200"
45
        test_output = MailboxCleaner.convert_date(test_input)
46
        test_expectation = '"22-Oct-2020 12:38:26 +0200"'
47
        print("Result: ", test_output)
48
        self.assertEqual(test_output, test_expectation)
49
50
    def test_convert_filename(self):
51
        """Testing decoding filenames."""
52
53
        test_input = "=?iso-8859-1?Q?2=5FB=FCrg=5F_Br?= =?iso-8859-1?Q?l.p?="
54
        test_output = MailboxCleaner.convert_filename(test_input)
55
        test_expectation = '2_Bürg_ Brl.p'
56
        print("Result: ", test_output)
57
        self.assertEqual(test_output, test_expectation)
58
59
        test_input = "file/with/slash.pdf"
60
        test_output = MailboxCleaner.convert_filename(test_input)
61
        test_expectation = 'file_with_slash.pdf'
62
        print("Result: ", test_output)
63
        self.assertEqual(test_output, test_expectation)
64
65
    def test_detach_attachment(self):
66
        """Testing detaching attachments."""
67
68
        test_input = 'tests/test.eml'
69
        test_expectation = 'removed-fed00c051c9f991a8a2d19dcadcf5ff3.jpg.txt'
70
71
        with open(test_input) as filepointer:
72
            msg = email.message_from_file(filepointer)
73
74
        self.assertFalse(test_expectation in msg.as_string())
75
        cleaner = MailboxCleaner(self.args)
76
        modified = cleaner.download_and_detach_attachments(msg)
77
        self.assertTrue(modified)
78
        self.assertTrue(test_expectation in msg.as_string())
79
        modified = cleaner.download_and_detach_attachments(msg)
80
        self.assertFalse(modified)
81
82
    @unittest.skip("local testing only, as uploading to server")
83
    def test_upload_msg_to_server(self):
84
        """Testing local eml file upload."""
85
86
        cleaner = MailboxCleaner(self.args)
87
        cleaner.login()
88
        test_input = 'tests/test.eml'
89
        msg_flags = '\\Seen'
90
        msg_folder = 'TEST'
91
        with open(test_input) as filepointer:
92
            msg = email.message_from_file(filepointer)
93
94
        status = cleaner.upload_msg_to_server(msg, msg_flags, msg_folder)
95
        self.assertEqual(status, 'OK')
96
97
98
if __name__ == '__main__':
99
    unittest.main()
100