From fbc4bb12966a3b97c920bb994b1fd7b6c3170f0d Mon Sep 17 00:00:00 2001 From: Lucas Hoffmann Date: Fri, 9 Jun 2017 09:29:35 +0200 Subject: Add test for db.utils.extract_headers --- tests/db/utils_test.py | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) (limited to 'tests') diff --git a/tests/db/utils_test.py b/tests/db/utils_test.py index 1ca127a3..2bbfaffd 100644 --- a/tests/db/utils_test.py +++ b/tests/db/utils_test.py @@ -91,3 +91,60 @@ class TestIsSubdirOf(unittest.TestCase): subpath = os.path.join(os.getcwd(), 'a/b/c/d.rst') result = utils.is_subdir_of(subpath, superpath) self.assertTrue(result) + + +class TestExtractHeader(unittest.TestCase): + + mailstring = '\n'.join([ + 'From: me', + 'To: you', + 'Subject: header field capitalisation', + 'Content-type: text/plain; charset=utf-8', + 'X-Header: param=one; and=two; or=three', + "X-Quoted: param=utf-8''%C3%9Cmlaut; second=plain%C3%9C", + 'X-UPPERCASE: PARAM1=ONE; PARAM2=TWO' + '\n', + 'content' + ]) + mail = email.message_from_string(mailstring) + + def test_default_arguments_yield_all_headers(self): + actual = utils.extract_headers(self.mail) + # collect all lines until the first empty line, hence all header lines + expected = [] + for line in self.mailstring.splitlines(): + if not line: + break + expected.append(line) + expected = u'\n'.join(expected) + u'\n' + self.assertEqual(actual, expected) + + def test_single_headers_can_be_retrieved(self): + actual = utils.extract_headers(self.mail, ['from']) + expected = u'from: me\n' + self.assertEqual(actual, expected) + + def test_multible_headers_can_be_retrieved_in_predevined_order(self): + headers = ['x-header', 'to', 'x-uppercase'] + actual = utils.extract_headers(self.mail, headers) + expected = u'x-header: param=one; and=two; or=three\nto: you\n' \ + u'x-uppercase: PARAM1=ONE; PARAM2=TWO\n' + self.assertEqual(actual, expected) + + def test_headers_can_be_retrieved_multible_times(self): + headers = ['from', 'from'] + actual = utils.extract_headers(self.mail, headers) + expected = u'from: me\nfrom: me\n' + self.assertEqual(actual, expected) + + def test_case_is_prserved_in_header_keys_but_irelevant(self): + headers = ['FROM', 'from'] + actual = utils.extract_headers(self.mail, headers) + expected = u'FROM: me\nfrom: me\n' + self.assertEqual(actual, expected) + + @unittest.expectedFailure + def test_header_values_are_not_decoded(self): + actual = utils.extract_headers(self.mail, ['x-quoted']) + expected = u"x-quoted: param=utf-8''%C3%9Cmlaut; second=plain%C3%9C\n", + self.assertEqual(actual, expected) -- cgit v1.2.3