summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorLucas Hoffmann <l-m-h@web.de>2017-06-09 09:29:35 +0200
committerLucas Hoffmann <l-m-h@web.de>2017-06-21 09:17:55 +0200
commitfbc4bb12966a3b97c920bb994b1fd7b6c3170f0d (patch)
treec2484c427621ae1ca705776ac3fb8d3268977126 /tests
parent20cd2a8fe0f256411ce176b15e26cdc95d19ab3c (diff)
Add test for db.utils.extract_headers
Diffstat (limited to 'tests')
-rw-r--r--tests/db/utils_test.py57
1 files changed, 57 insertions, 0 deletions
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)