summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorBruno Wagner Goncalves <bwagner@thoughtworks.com>2014-08-07 18:31:22 -0300
committerBruno Wagner Goncalves <bwagner@thoughtworks.com>2014-08-07 18:32:15 -0300
commit5a0d81e35b97113df983d8fd3fcbdb995606f56a (patch)
treebfb2227e302931e51e4d893e066fef9020050bbf /service
parentd4cf82682a1cc586628922f18fd0f501772717eb (diff)
Closes #2 +@shyba +@bwagner - Implemented behavior when calling get /mails, only works with basic tag search yet
Diffstat (limited to 'service')
-rw-r--r--service/app/adapter/mail_service.py28
-rw-r--r--service/test/adapter/mail_service_test.py53
2 files changed, 73 insertions, 8 deletions
diff --git a/service/app/adapter/mail_service.py b/service/app/adapter/mail_service.py
index c2ba5e5e..a5bb1506 100644
--- a/service/app/adapter/mail_service.py
+++ b/service/app/adapter/mail_service.py
@@ -8,6 +8,9 @@ from app.bitmask_libraries.auth import LeapCredentials
class MailService:
+
+ SPECIAL_BOXES = ['inbox', 'sent', 'drafts', 'trash']
+
def __init__(self):
try:
self.username = 'test_user'
@@ -25,11 +28,32 @@ class MailService:
self.leap_config = LeapConfig(leap_home=self.leapdir)
self.provider = LeapProvider(self.server_name, self.leap_config)
self.leap_session = LeapSessionFactory(self.provider).create(LeapCredentials(self.username, self.password))
- self.mail_box = self.leap_session.account.getMailbox(self.mailbox_name)
+ self.account = self.leap_session.account
+ self.mailbox = self.account.getMailbox(self.mailbox_name)
def mails(self, query):
- return self.mail_box.messages
+ mailbox = self._switch_mailbox(query['tags'][0])
+ return mailbox.messages if mailbox else []
+ def _switch_mailbox(self, name):
+ mailbox = None
+ if name in self.SPECIAL_BOXES:
+ self._create_mailbox(name)
+ try:
+ mailbox = self.account.getMailbox(name)
+ except Exception, e:
+ if not 'MailboxException' == e.__class__.__name__:
+ raise e
+ return mailbox
+
+ def _create_mailbox(self, name):
+ created = False
+ try:
+ created = self.account.addMailbox(name)
+ except Exception, e:
+ if not 'MailboxCollision' == e.__class__.__name__:
+ raise e
+ return created
def drafts(self):
return []
diff --git a/service/test/adapter/mail_service_test.py b/service/test/adapter/mail_service_test.py
index dfaee058..84822038 100644
--- a/service/test/adapter/mail_service_test.py
+++ b/service/test/adapter/mail_service_test.py
@@ -1,16 +1,57 @@
import sys
import os
import unittest
+from mock import patch
+from mock import Mock
from app.adapter.mail_service import MailService
+class MailboxCollision(Exception):
+ pass
+
+
+class MailboxException(Exception):
+ pass
+
+
class TestMailService(unittest.TestCase):
- def test_initialization(self):
- mail_service = MailService()
+ def setUp(self):
+ self.mail_service = MailService()
+
+ def test_request_mail_has_mailbox(self):
+ with patch.object(self.mail_service, '_switch_mailbox', return_value=Mock()):
+ mails = self.mail_service.mails({'tags': ['inbox']})
+ self.assertIsNotNone(mails)
+
+ def test_request_mail_has_mailbox(self):
+ with patch.object(self.mail_service, '_switch_mailbox', return_value=None):
+ mails = self.mail_service.mails({'tags': ['inbox']})
+ self.assertEqual(mails, [])
+
+ def test_switch_mailbox_special_tag(self):
+ mailbox = Mock()
+ with patch.object(self.mail_service.account, 'getMailbox', return_value=mailbox):
+ new_mailbox = self.mail_service._switch_mailbox('sent')
+ self.assertEqual(new_mailbox, mailbox)
+
+ def test_switch_mailbox_custom_tag_exists(self):
+ mailbox = Mock()
+ with patch.object(self.mail_service.account, 'getMailbox', return_value=mailbox):
+ returned_mailbox = self.mail_service._switch_mailbox('custom')
+ self.assertEqual(mailbox, returned_mailbox)
+
+ def test_switch_mailbox_custom_tag_not_exists(self):
+ mailbox = Mock()
+ with patch.object(self.mail_service.account, 'getMailbox', side_effect=MailboxException()):
+ mailbox = self.mail_service._switch_mailbox('custom')
+ self.assertIsNone(mailbox)
+
+ def test_create_new_mailbox(self):
+ with patch.object(self.mail_service.account, 'addMailbox', return_value=True) as addMailbox:
+ self.assertTrue(self.mail_service._create_mailbox('teste'))
- def test_receive_mail(self):
- mail_service = MailService()
- mails = mail_service.mails("")
- self.assertIsNotNone(mails)
+ def test_create_existing_mailbox(self):
+ with patch.object(self.mail_service.account, 'addMailbox', side_effect=MailboxCollision()) as addMailbox:
+ self.assertFalse(self.mail_service._create_mailbox('teste'))