1
0
Fork 0

Actually fixing Python 3 support; verified both IMAP and POP3. Fixes #13 (seriously this time).

This commit is contained in:
Adam Coddington 2014-04-25 16:37:51 -07:00
parent 4002d5c222
commit 3b2d60a903
9 changed files with 145 additions and 16 deletions

View file

@ -1,3 +1,4 @@
from .test_mailbox import *
from .test_message_flattening import *
from .test_process_email import *
from .test_transports import *

View file

@ -1,8 +1,9 @@
import email
import os.path
import six
from django.test import TestCase
import sys
from django_mailbox import models
from django_mailbox.models import Mailbox, Message
@ -22,7 +23,7 @@ class EmailMessageTestCase(TestCase):
self.mailbox = Mailbox.objects.create()
super(EmailMessageTestCase, self).setUp()
def _get_email_object(self, name):
def _get_email_as_text(self, name):
with open(
os.path.join(
os.path.dirname(__file__),
@ -31,10 +32,14 @@ class EmailMessageTestCase(TestCase):
),
'rb'
) as f:
if sys.version_info < (3, 0):
return email.message_from_string(f.read())
else:
return email.message_from_bytes(f.read())
return f.read()
def _get_email_object(self, name):
copy = self._get_email_as_text(name)
if six.PY3:
return email.message_from_bytes(copy)
else:
return email.message_from_string(copy)
def _headers_identical(self, left, right, header=None):
""" Check if headers are (close enough to) identical.

View file

@ -0,0 +1,87 @@
import mock
import six
from django_mailbox.tests.base import EmailMessageTestCase
from django_mailbox.transports import ImapTransport, Pop3Transport
class TestImapTransport(EmailMessageTestCase):
def setUp(self):
self.arbitrary_hostname = 'one.two.three'
self.arbitrary_port = 100
self.ssl = False
self.transport = ImapTransport(
self.arbitrary_hostname,
self.arbitrary_port,
self.ssl
)
self.transport.server = None
super(TestImapTransport, self).setUp()
def test_get_email_message(self):
with mock.patch.object(self.transport, 'server') as server:
server.search.return_value = (
'OK',
[
'One', # This is totally arbitrary
]
)
server.fetch.return_value = (
'OK',
[
[
'1 (RFC822 {8190}', # Wat?
self._get_email_as_text('generic_message.eml')
],
')',
]
)
actual_messages = list(self.transport.get_message())
self.assertEqual(len(actual_messages), 1)
actual_message = actual_messages[0]
expected_message = self._get_email_object('generic_message.eml')
self.assertEqual(expected_message, actual_message)
class TestPop3Transport(EmailMessageTestCase):
def setUp(self):
self.arbitrary_hostname = 'one.two.three'
self.arbitrary_port = 100
self.ssl = False
self.transport = Pop3Transport(
self.arbitrary_hostname,
self.arbitrary_port,
self.ssl
)
self.transport.server = None
super(TestPop3Transport, self).setUp()
def test_get_email_message(self):
with mock.patch.object(self.transport, 'server') as server:
# Consider this value arbitrary, the second parameter
# should have one entry per message in the inbox
server.list.return_value = [None, ['some_msg']]
server.retr.return_value = [
'+OK message follows',
[
line.encode('ascii')
for line in self._get_email_as_text(
'generic_message.eml'
).decode('ascii').split('\n')
],
10018, # Some arbitrary size, ideally matching the above
]
actual_messages = list(self.transport.get_message())
self.assertEqual(len(actual_messages), 1)
actual_message = actual_messages[0]
expected_message = self._get_email_object('generic_message.eml')
self.assertEqual(expected_message, actual_message)