1
0
Fork 1
mirror of https://github.com/coddingtonbear/django-mailbox.git synced 2026-07-09 22:38:19 +02:00

Refactored the imap transport based on the tests

Testing the switch to uid-based IMAP calls required better testing
The better testing revealed some code that wasn't so pretty

I fixed the tests and the code
This commit is contained in:
Alex Lovell-Troy 2014-05-29 23:41:11 -06:00
parent b2abec1d40
commit ec18a01880
3 changed files with 88 additions and 88 deletions

View file

@ -1,12 +1,42 @@
import mock
import six
from django_mailbox.tests.base import EmailMessageTestCase
from django.test.utils import override_settings
from django_mailbox.tests.base import EmailMessageTestCase, get_email_as_text
from django_mailbox.transports import ImapTransport, Pop3Transport
FAKE_UID_SEARCH_ANSWER = ('OK', ['18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44'])
FAKE_UID_FETCH_SIZES = ('OK', ['1 (UID 18 RFC822.SIZE 58070000000)', '2 (UID 19 RFC822.SIZE 2593)'])
FAKE_UID_FETCH_MSG = ('OK', [('1 (UID 18 RFC822 {5807}', get_email_as_text('generic_message.eml') ),])
FAKE_UID_COPY_MSG = ('OK', ['[COPYUID 1 2 2] (Success)'])
FAKE_LIST_ARCHIVE_FOLDERS_ANSWERS = ('OK', ['(\\HasNoChildren \\All) "/" "[Gmail]/All Mail"'])
class TestImapTransport(EmailMessageTestCase):
class IMAPTestCase(EmailMessageTestCase):
def setUp(self):
def imap_server_uid_method(*args):
cmd = args[0]
arg2 = args[2]
if cmd == 'search':
return FAKE_UID_SEARCH_ANSWER
if cmd == 'copy':
return FAKE_UID_COPY_MSG
if cmd == 'fetch':
if arg2 == '(RFC822.SIZE)':
return FAKE_UID_FETCH_SIZES
if arg2 == '(RFC822)':
return FAKE_UID_FETCH_MSG
def imap_server_list_method(pattern=None):
return FAKE_LIST_ARCHIVE_FOLDERS_ANSWERS
self.imap_server = mock.Mock()
self.imap_server.uid = imap_server_uid_method
self.imap_server.list = imap_server_list_method
super(IMAPTestCase, self).setUp()
class TestImapTransport(IMAPTestCase):
def setUp(self):
super(TestImapTransport, self).setUp()
self.arbitrary_hostname = 'one.two.three'
self.arbitrary_port = 100
self.ssl = False
@ -15,42 +45,18 @@ class TestImapTransport(EmailMessageTestCase):
self.arbitrary_port,
self.ssl
)
self.transport.server = None
super(TestImapTransport, self).setUp()
self.transport.server = self.imap_server
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_messages = list(self.transport.get_message())
self.assertEqual(len(actual_messages), 27)
actual_message = actual_messages[0]
expected_message = self._get_email_object('generic_message.eml')
self.assertEqual(expected_message, actual_message)
class TestImapArchivedTransport(EmailMessageTestCase):
class TestImapArchivedTransport(TestImapTransport):
def setUp(self):
self.arbitrary_hostname = 'one.two.three'
self.arbitrary_port = 100
self.ssl = False
super(TestImapArchivedTransport, self).setUp()
self.archive = 'Archive'
self.transport = ImapTransport(
self.arbitrary_hostname,
@ -58,50 +64,34 @@ class TestImapArchivedTransport(EmailMessageTestCase):
self.ssl,
self.archive
)
self.transport.server = None
super(TestImapArchivedTransport, self).setUp()
self.transport.server = self.imap_server
class TestMaxSizeImapTransport(TestImapTransport):
@override_settings(DJANGO_MAILBOX_MAX_MESSAGE_SIZE=5807)
def setUp(self):
super(TestMaxSizeImapTransport, self).setUp()
self.transport = ImapTransport(
self.arbitrary_hostname,
self.arbitrary_port,
self.ssl,
)
self.transport.server = self.imap_server
def test_size_limit(self):
all_message_ids = self.transport._get_all_message_ids()
small_message_ids = self.transport._get_small_message_ids(all_message_ids)
self.assertEqual(len(small_message_ids), 1)
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')
],
')',
]
)
server.list.return_value = (
'OK',
[
'(\\HasNoChildren) "/" "Archive"'
]
)
server.copy.return_value = (
'OK',
[
'[COPYUID 1 2 2] (Success)'
]
)
actual_messages = list(self.transport.get_message())
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'
@ -139,3 +129,4 @@ class TestPop3Transport(EmailMessageTestCase):
expected_message = self._get_email_object('generic_message.eml')
self.assertEqual(expected_message, actual_message)