Skip to content
This repository has been archived by the owner on Jan 21, 2020. It is now read-only.

Commit

Permalink
split complex tests in dedicated functions
Browse files Browse the repository at this point in the history
  • Loading branch information
arnisoph committed Dec 20, 2015
1 parent a554919 commit 21b3cd5
Showing 1 changed file with 73 additions and 38 deletions.
111 changes: 73 additions & 38 deletions tests/integration/test_imap.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,31 +19,31 @@ class IMAPTest(TabellariusTest):
# for username, password in sorted(self.imap_users.items()): # TODO
# self.remove_imap_user(username)

def test_connect(self):
# Test simple plaintext imap connection
def test_connect_simple_plaintext(self):
username, password = self.create_imap_user()
self.assertEqual(imap.IMAP(logger=self.logger,
server='127.0.0.1',
port=10143,
username=username,
password=password).connect(logout=True), (True, b'Logging out'))

expect = "b'[AUTHENTICATIONFAILED] Authentication failed.'" # TODO looks strange

def test_connect_error_auth_failed(self):
username, password = self.create_imap_user()

expect = "b'[AUTHENTICATIONFAILED] Authentication failed.'" # TODO looks strange
self.assertEqual(imap.IMAP(logger=self.logger,
server='127.0.0.1',
port=10143,
username=username,
password='wrongpassword').connect(logout=True), (False, expect))

# Manually logging out
def test_connect_manual_logout(self):
username, password = self.create_imap_user()
imapconn = self.create_basic_imap_object(username, password)
self.assertEqual(imapconn.connect(logout=False), (True, b'Logged in'))
self.assertEqual(imapconn.disconnect(), (True, b'Logging out'))

# Test simple imap via STARTTLS connection
def test_connect_starttls(self):
username, password = self.create_imap_user()
self.assertEqual(imap.IMAP(logger=self.logger,
server='127.0.0.1',
Expand All @@ -54,7 +54,7 @@ def test_connect(self):
username=username,
password=password).connect(logout=True), (True, b'Logging out'))

# Test simple imaps connection
def test_connect_imaps(self):
username, password = self.create_imap_user()
self.assertEqual(imap.IMAP(logger=self.logger,
server='127.0.0.1',
Expand All @@ -65,7 +65,7 @@ def test_connect(self):
username=username,
password=password).connect(logout=True), (True, b'Logging out'))

# Test connection refused
def test_connect_error_refused(self):
username, password = self.create_imap_user()
self.assertTrue(imap.IMAP(logger=self.logger,
server='127.0.0.1',
Expand All @@ -74,15 +74,15 @@ def test_connect(self):
imaps=True,
tlsverify=False, # TODO test tls verification?
username=username,
password=password).connect()[1], '] Connection refused')
password=password).connect(), (False, '] Connection refused'))

def test_process_error(self):
try:
raise KeyError('test')
except KeyError as e:
username, password = self.create_imap_user()
imapconn = self.create_basic_imap_object(username, password)
self.assertEqual(imapconn.process_error(exception=e)[1], '\'test\'')
self.assertEqual(imapconn.process_error(exception=e), (False, '\'test\''))
self.assertIsInstance(imapconn.process_error(exception=e, simple_return=True), KeyError)

def test_list_mailboxes(self):
Expand All @@ -103,8 +103,7 @@ def test_list_mailboxes(self):
'name': 'Junk'}, {'delimiter': '/',
'flags': ['\\HasNoChildren'],
'name': 'INBOX'}]
self.assertEqual(imapconn.list_mailboxes()[1], expect)

self.assertEqual(imapconn.list_mailboxes(), (True, expect))
self.assertEqual(imapconn.disconnect(), (True, b'Logging out'))

# Test exception handling
Expand All @@ -118,8 +117,15 @@ def test_select_mailbox(self):
result = imapconn.select_mailbox(mailbox='INBOX')
self.assertEqual(result[1][b'FLAGS'], (b'\\Answered', b'\\Flagged', b'\\Deleted', b'\\Seen', b'\\Draft'))

self.assertEqual(imapconn.disconnect(), (True, b'Logging out'))

def test_select_mailbox_nonexisting_mailbox(self):
username, password = self.create_imap_user()
imapconn = self.create_basic_imap_object(username, password)
self.assertEqual(imapconn.connect(), (True, b'Logged in'))

result = imapconn.select_mailbox(mailbox='DoesNotExist')
self.assertEqual(result[1], 'select failed: Mailbox doesn\'t exist: DoesNotExist')
self.assertEqual(result, (False, 'select failed: Mailbox doesn\'t exist: DoesNotExist'))

self.assertEqual(imapconn.disconnect(), (True, b'Logging out'))

Expand All @@ -136,11 +142,11 @@ def test_add_mail(self):
imapconn.add_mail(mailbox='DoesNotExist',
message=self.create_email(),
flags=['FLAG', 'WAVE'],
msg_time=example_date)[1], 'append failed: [TRYCREATE] Mailbox doesn\'t exist: DoesNotExist')
msg_time=example_date), (False, 'append failed: [TRYCREATE] Mailbox doesn\'t exist: DoesNotExist'))

self.assertEqual(imapconn.disconnect(), (True, b'Logging out'))

def test_search_mail(self): # TODO see meth impl
def test_search_mail(self):
username, password = self.create_imap_user()
imapconn = self.create_basic_imap_object(username, password)
self.assertEqual(imapconn.connect(), (True, b'Logged in'))
Expand All @@ -151,16 +157,24 @@ def test_search_mail(self): # TODO see meth impl
self.assertTrue(imapconn.add_mail(mailbox='INBOX', message=self.create_email(), flags=['\\Seen'])[0])
self.assertTrue(imapconn.add_mail(mailbox='INBOX', message=self.create_email(), flags=['FLAG', 'WAVE'], msg_time=example_date)[0])

self.assertEqual(imapconn.search_mails(mailbox='INBOX', criteria='ALL')[1], [1, 2, 3])
self.assertEqual(imapconn.search_mails(mailbox='INBOX', criteria='UNSEEN')[1], [1, 3])
self.assertEqual(imapconn.search_mails(mailbox='INBOX', criteria='SEEN')[1], [2])
self.assertEqual(imapconn.search_mails(mailbox='INBOX', criteria='SINCE 13-Apr-2015')[1], [1, 2])
self.assertEqual(imapconn.search_mails(mailbox='INBOX', criteria='ALL'), (True, [1, 2, 3]))
self.assertEqual(imapconn.search_mails(mailbox='INBOX', criteria='UNSEEN'), (True, [1, 3]))
self.assertEqual(imapconn.search_mails(mailbox='INBOX', criteria='SEEN'), (True, [2]))
self.assertEqual(imapconn.search_mails(mailbox='INBOX', criteria='SINCE 13-Apr-2015'), (True, [1, 2]))

self.assertEqual(imapconn.disconnect(), (True, b'Logging out'))

def test_search_mail_errors(self):
username, password = self.create_imap_user()
imapconn = self.create_basic_imap_object(username, password)
self.assertEqual(imapconn.connect(), (True, b'Logged in'))

self.assertRaises(RuntimeError, imapconn.search_mails, mailbox='DoesNotExist', criteria='ALL') # tests do_select_mailbox
self.assertRaises(AttributeError, imapconn.search_mails, 'DoesNotExist', criteria='ALL') # tests do_select_mailbox
self.assertRaises(KeyError, imapconn.search_mails, criteria='ALL') # tests do_select_mailbox
self.assertEqual(imapconn.search_mails(mailbox='INBOX',
criteria='DoesNotExist')[1],
'SEARCH command error: BAD [b\'Error in IMAP command UID SEARCH: Unknown argument DOESNOTEXIST\']')
criteria='DoesNotExist'),
(False, 'SEARCH command error: BAD [b\'Error in IMAP command UID SEARCH: Unknown argument DOESNOTEXIST\']'))

self.assertEqual(imapconn.disconnect(), (True, b'Logging out'))

Expand All @@ -171,20 +185,20 @@ def test_fetch_mails(self):

# Adding some mails to search for
example_date = datetime.datetime(2009, 4, 5, 11, 0, 5, 0, imapclient.fixed_offset.FixedOffset(2 * 60))
self.assertEqual(imapconn.add_mail(mailbox='INBOX', message=self.create_email(), flags=['FLAG', 'WAVE'])[1], 1)
self.assertEqual(imapconn.add_mail(mailbox='INBOX', message=self.create_email(), flags=['\\Seen'])[1], 2)
self.assertEqual(imapconn.add_mail(mailbox='INBOX', message=self.create_email(), flags=['FLAG', 'WAVE']), (True, 1))
self.assertEqual(imapconn.add_mail(mailbox='INBOX', message=self.create_email(), flags=['\\Seen']), (True, 2))
self.assertEqual(imapconn.add_mail(mailbox='INBOX',
message=self.create_email(),
flags=['FLAG', 'WAVE'],
msg_time=example_date)[1], 3)
msg_time=example_date), (True, 3))

self.assertIn(b'RFC822', imapconn.fetch_mails(uids=[2], mailbox='INBOX', return_fields=[b'RFC822'])[1][2])
self.assertEqual(imapconn.fetch_mails(uids=[2], mailbox='INBOX')[1][2]['subject'], 'Testmäil')
self.assertEqual(imapconn.fetch_mails(uids=[1, 2], mailbox='INBOX')[1][2]['subject'], 'Testmäil')
self.assertEqual(imapconn.fetch_mails(uids=[1337], mailbox='INBOX')[1], {})
self.assertEqual(imapconn.fetch_mails(uids=[1337], mailbox='INBOX'), (True, {}))
self.assertEqual(imapconn.fetch_mails(uids=[-1337],
mailbox='INBOX')[1],
'FETCH command error: BAD [b\'Error in IMAP command UID FETCH: Invalid uidset\']')
mailbox='INBOX'),
(False, 'FETCH command error: BAD [b\'Error in IMAP command UID FETCH: Invalid uidset\']'))

self.assertEqual(imapconn.disconnect(), (True, b'Logging out'))

Expand All @@ -195,18 +209,22 @@ def test_move_mail(self):

# Adding some mails to search for
self.assertTrue(imapconn.add_mail(mailbox='INBOX',
message=self.create_email(headers={'Subject': 'Moved Mail'}),
message=self.create_email(headers={'Subject': 'Moved Mäil'}),
flags=['FLAG', 'WAVE'])[0])

message_id = imapconn.fetch_mails(uids=[1], mailbox='INBOX')[1][1].get('message-id')
self.assertTrue(message_id.startswith('<very_unique_id_'))

# Move
self.assertTrue(imapconn.move_mail(message_ids=[message_id], source='INBOX', destination='Trash')[0])
self.assertEqual(imapconn.search_mails(mailbox='Trash', criteria='HEADER Subject "Moved Mail"')[1], [1])

# Check old and copied
self.assertEqual(imapconn.fetch_mails(uids=[1], mailbox='INBOX'), (True, {}))
self.assertEqual(imapconn.fetch_mails(uids=[1], mailbox='Trash')[1][1].get('message-id'), message_id)

self.assertEqual(imapconn.disconnect(), (True, b'Logging out'))

# Test the test mode
def test_move_mail_testmode(self):
username, password = self.create_imap_user()
imapconn = self.create_basic_imap_object(username, password, test=True)
self.assertEqual(imapconn.connect(), (True, b'Logged in'))
Expand All @@ -222,12 +240,6 @@ def test_move_mail(self):
# Move
self.assertTrue(imapconn.move_mail(message_ids=[message_id], source='INBOX', destination='Trash')[0])

# Check old and copied
self.assertEqual(imapconn.fetch_mails(uids=[1], mailbox='INBOX')[1][1].get('message-id'), message_id)
self.assertEqual(imapconn.fetch_mails(uids=[1], mailbox='Trash')[1], {})

self.assertEqual(imapconn.disconnect(), (True, b'Logging out'))

def test_copy_mails(self):
username, password = self.create_imap_user()
imapconn = self.create_basic_imap_object(username, password)
Expand All @@ -238,11 +250,11 @@ def test_copy_mails(self):
self.assertTrue(imapconn.add_mail(mailbox='INBOX',
message=self.create_email(headers={'Subject': 'Copied Mäil'}),
flags=['FLAG', 'WAVE'])[0])
self.assertEqual(imapconn.add_mail(mailbox='INBOX', message=self.create_email(), flags=['\\Seen'])[1], 2)
self.assertEqual(imapconn.add_mail(mailbox='INBOX', message=self.create_email(), flags=['\\Seen']), (True, 2))
self.assertEqual(imapconn.add_mail(mailbox='INBOX',
message=self.create_email(),
flags=['FLAG', 'WAVE'],
msg_time=example_date)[1], 3)
msg_time=example_date), (True, 3))

message_id = imapconn.fetch_mails(uids=[1], mailbox='INBOX')[1][1].get('message-id')
self.assertTrue(message_id.startswith('<very_unique_id_'))
Expand All @@ -256,3 +268,26 @@ def test_copy_mails(self):
self.assertEqual(imapconn.fetch_mails(uids=[1], mailbox='Trash')[1][1].get('message-id'), message_id)

self.assertEqual(imapconn.disconnect(), (True, b'Logging out'))

def test_copy_mails_testmode(self):
username, password = self.create_imap_user()
imapconn = self.create_basic_imap_object(username, password, test=True)
self.assertEqual(imapconn.connect(), (True, b'Logged in'))

# Adding some mails to search for
example_date = datetime.datetime(2009, 4, 5, 11, 0, 5, 0, imapclient.fixed_offset.FixedOffset(2 * 60))
self.assertTrue(imapconn.add_mail(mailbox='INBOX',
message=self.create_email(headers={'Subject': 'Copied Mäil'}),
flags=['FLAG', 'WAVE'])[0])
self.assertEqual(imapconn.add_mail(mailbox='INBOX', message=self.create_email(), flags=['\\Seen']), (True, 2))
self.assertEqual(imapconn.add_mail(mailbox='INBOX',
message=self.create_email(),
flags=['FLAG', 'WAVE'],
msg_time=example_date), (True, 3))

message_id = imapconn.fetch_mails(uids=[1], mailbox='INBOX')[1][1].get('message-id')
self.assertTrue(message_id.startswith('<very_unique_id_'))

# Copy
print(imapconn.copy_mails(message_ids=[message_id], source='INBOX', destination='Trash'))
self.assertTrue(imapconn.copy_mails(message_ids=[message_id], source='INBOX', destination='Trash')[0])

0 comments on commit 21b3cd5

Please sign in to comment.