summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorDylan Baker <dylan@pnwbakers.com>2018-08-01 11:14:52 -0700
committerDylan Baker <dylan@pnwbakers.com>2018-08-02 10:51:09 -0700
commit293bf7ad89c837d6a2ee9e08443c00703172d953 (patch)
tree8927a34a5b8aca0287e385f834457258cadfc8c4 /tests
parent834a658dfbe25707eebed34d5f5fdd10e1fddd60 (diff)
helper: replace email_as_* with email builtins
Python 3.3 added a new feature to the email module, policies (https://docs.python.org/3.5/library/email.policy.html). Policy objects allow precise control over how numerous features work when converting to and from str or bytes. With the `email.policy.SMTP` the behavior of email_as_bytes and email_as_string can be achieved using the builtin `.as_string()` and `.as_bytes()` methods, without custom code or the need to test it. Additionally these methods handle corner cases that we don't currently handle, such as multi-part messages with different encodings. Fixes #1257
Diffstat (limited to 'tests')
-rw-r--r--tests/db/utils_test.py5
-rw-r--r--tests/helper_test.py22
2 files changed, 3 insertions, 24 deletions
diff --git a/tests/db/utils_test.py b/tests/db/utils_test.py
index 23885067..7d50d888 100644
--- a/tests/db/utils_test.py
+++ b/tests/db/utils_test.py
@@ -8,6 +8,7 @@ import codecs
import email
import email.header
import email.mime.application
+import email.policy
import io
import os
import os.path
@@ -465,7 +466,7 @@ class TestMessageFromFile(TestCaseClassCleanup):
text = b'This is some text'
t = email.mime.text.MIMEText(text, 'plain', 'utf-8')
_, sig = crypto.detached_signature_for(
- helper.email_as_bytes(t), self.keys)
+ t.as_bytes(policy=email.policy.SMTP), self.keys)
s = email.mime.application.MIMEApplication(
sig, 'pgp-signature', email.encoders.encode_7or8bit)
m = email.mime.multipart.MIMEMultipart('signed', None, [t, s])
@@ -555,7 +556,7 @@ class TestMessageFromFile(TestCaseClassCleanup):
else:
text = b'This is some text'
t = email.mime.text.MIMEText(text, 'plain', 'utf-8')
- enc = crypto.encrypt(helper.email_as_bytes(t), self.keys)
+ enc = crypto.encrypt(t.as_bytes(policy=email.policy.SMTP), self.keys)
e = email.mime.application.MIMEApplication(
enc, 'octet-stream', email.encoders.encode_7or8bit)
diff --git a/tests/helper_test.py b/tests/helper_test.py
index b47e5eff..b87d77af 100644
--- a/tests/helper_test.py
+++ b/tests/helper_test.py
@@ -383,28 +383,6 @@ class TestCallCmd(unittest.TestCase):
self.assertEqual(code, 42)
-class TestEmailAsString(unittest.TestCase):
-
- def test_empty_message(self):
- message = email.message.Message()
- actual = helper.email_as_string(message)
- expected = '\r\n'
- self.assertEqual(actual, expected)
-
- def test_empty_message_with_unicode_header(self):
- """Test if unicode header keys can be used in an email that is
- converted to string with email_as_string()."""
- # This is what alot.db.envelope.Envelope.construct_mail() currently
- # does: It constructs a message object and then copies all headers from
- # the envelope to the message object. Some header names are stored as
- # unicode in the envelope.
- message = email.message.Message()
- message[u'X-Unicode-Header'] = 'dummy value'
- actual = helper.email_as_string(message)
- expected = 'X-Unicode-Header: dummy value\r\n\r\n'
- self.assertEqual(actual, expected)
-
-
class TestShorten(unittest.TestCase):
def test_lt_maxlen(self):