summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorLisa Junger <ljunger@thoughtworks.com>2014-09-10 17:45:04 +0200
committerPatrick Maia <pmaia@thoughtworks.com>2014-09-15 11:50:47 -0300
commit1ef6f1de8d698c3e70d3e5e6016099190d2ab342 (patch)
treed48e96a38af14536bcd2801537512063460adbb7 /service
parent4eeca4b0e3ba10ad08a937d08546384f1c67351c (diff)
added drafts.
Diffstat (limited to 'service')
-rw-r--r--service/pixelated/adapter/mail_service.py10
-rw-r--r--service/pixelated/adapter/pixelated_mail.py4
-rw-r--r--service/pixelated/adapter/pixelated_mail_sender.py2
-rw-r--r--service/pixelated/adapter/pixelated_mailbox.py3
-rw-r--r--service/pixelated/adapter/pixelated_mailboxes.py9
-rw-r--r--service/pixelated/user_agent.py7
-rw-r--r--service/test/adapter/mail_service_test.py8
-rw-r--r--service/test/adapter/pixelated_mail_test.py3
-rw-r--r--service/test/adapter/pixelated_mailbox_test.py19
-rw-r--r--service/test/adapter/pixelated_mailboxes_test.py1
-rw-r--r--service/test/user_agent_test.py31
11 files changed, 83 insertions, 14 deletions
diff --git a/service/pixelated/adapter/mail_service.py b/service/pixelated/adapter/mail_service.py
index debdc9b7..1183dae2 100644
--- a/service/pixelated/adapter/mail_service.py
+++ b/service/pixelated/adapter/mail_service.py
@@ -47,6 +47,13 @@ class MailService:
def send(self, mail):
self.mail_sender.sendmail(mail)
+ def create_draft(self, mail):
+ drafts = self.mailboxes.drafts()
+ drafts.add(mail)
+
+ def send_draft(self, mail):
+ pass
+
def all_tags(self):
return self.tag_service.all_tags()
@@ -74,9 +81,6 @@ class MailService:
def save_draft(self, draft):
raise NotImplementedError()
- def send_draft(self, draft):
- raise NotImplementedError()
-
def draft_reply_for(self, mail_id):
raise NotImplementedError()
diff --git a/service/pixelated/adapter/pixelated_mail.py b/service/pixelated/adapter/pixelated_mail.py
index 2aead409..df9b4bbe 100644
--- a/service/pixelated/adapter/pixelated_mail.py
+++ b/service/pixelated/adapter/pixelated_mail.py
@@ -142,9 +142,9 @@ class PixelatedMail:
mime_multipart.attach(MIMEText(self.body, 'plain'))
return mime_multipart
- def to_smtp_format(self, _from=None):
+ def to_smtp_format(self):
mime_multipart = self.to_mime_multipart()
- mime_multipart['From'] = _from
+ mime_multipart['From'] = PixelatedMail.from_email_address
return mime_multipart.as_string()
@staticmethod
diff --git a/service/pixelated/adapter/pixelated_mail_sender.py b/service/pixelated/adapter/pixelated_mail_sender.py
index 486816ac..4189517d 100644
--- a/service/pixelated/adapter/pixelated_mail_sender.py
+++ b/service/pixelated/adapter/pixelated_mail_sender.py
@@ -28,5 +28,5 @@ class PixelatedMailSender():
self.smtp_client.sendmail(
self.account_email_address,
recipients,
- mail.to_smtp_format(_from=self.account_email_address)
+ mail.to_smtp_format()
)
diff --git a/service/pixelated/adapter/pixelated_mailbox.py b/service/pixelated/adapter/pixelated_mailbox.py
index cc44ede7..191c171b 100644
--- a/service/pixelated/adapter/pixelated_mailbox.py
+++ b/service/pixelated/adapter/pixelated_mailbox.py
@@ -58,6 +58,9 @@ class PixelatedMailbox:
original_flags = mail.leap_mail.getFlags()
self.leap_mailbox.addMessage(mail.raw_message(), original_flags)
+ def add(self, mail):
+ self.leap_mailbox.messages.add_msg(mail.to_smtp_format())
+
@classmethod
def create(cls, account, mailbox_name='INBOX'):
return PixelatedMailbox(account.getMailbox(mailbox_name))
diff --git a/service/pixelated/adapter/pixelated_mailboxes.py b/service/pixelated/adapter/pixelated_mailboxes.py
index c003f3fd..50d0ddc4 100644
--- a/service/pixelated/adapter/pixelated_mailboxes.py
+++ b/service/pixelated/adapter/pixelated_mailboxes.py
@@ -2,9 +2,18 @@ from pixelated.adapter.pixelated_mailbox import PixelatedMailbox
class PixelatedMailBoxes():
+
def __init__(self, account):
self.account = account
+ def _create_or_get(self, mailbox_name):
+ if mailbox_name not in self.account.mailboxes:
+ self.account.addMailbox(mailbox_name)
+ return PixelatedMailbox.create(self.account, mailbox_name)
+
+ def drafts(self):
+ return self._create_or_get('DRAFTS')
+
@property
def mailboxes(self):
return [PixelatedMailbox.create(self.account, leap_mailbox_name) for leap_mailbox_name in
diff --git a/service/pixelated/user_agent.py b/service/pixelated/user_agent.py
index c018b1bb..643d0a30 100644
--- a/service/pixelated/user_agent.py
+++ b/service/pixelated/user_agent.py
@@ -51,7 +51,6 @@ def respond_json(entity):
@app.route('/disabled_features')
def disabled_features():
return respond_json([
- 'saveDraft',
'draftReply',
'signatureStatus',
'encryptionStatus',
@@ -62,7 +61,10 @@ def disabled_features():
@app.route('/mails', methods=['POST'])
def send_mail():
mail = PixelatedMail.from_dict(request.json)
- mail_service.send(mail)
+ if mail.ident:
+ mail_service.send_draft(mail)
+ else:
+ mail_service.create_draft(mail)
return respond_json(None)
@@ -163,6 +165,7 @@ def register_new_user(username):
def start_user_agent(debug_enabled):
leap_session = LeapSession.open(app.config['LEAP_USERNAME'], app.config['LEAP_PASSWORD'],
app.config['LEAP_SERVER_NAME'])
+ PixelatedMail.from_email_address = leap_session.account_email()
pixelated_mailboxes = PixelatedMailBoxes(leap_session.account)
pixelated_mail_sender = PixelatedMailSender(leap_session.account_email())
diff --git a/service/test/adapter/mail_service_test.py b/service/test/adapter/mail_service_test.py
index e96b7e11..96359d30 100644
--- a/service/test/adapter/mail_service_test.py
+++ b/service/test/adapter/mail_service_test.py
@@ -38,3 +38,11 @@ class TestMailService(unittest.TestCase):
self.mail_service.mark_as_read(1)
verify(mail).mark_as_read()
+
+ def test_create_draft(self):
+ drafts_mailbox = mock()
+ when(self.mailboxes).drafts().thenReturn(drafts_mailbox)
+
+ self.mail_service.create_draft('a new draft')
+
+ verify(drafts_mailbox).add('a new draft')
diff --git a/service/test/adapter/pixelated_mail_test.py b/service/test/adapter/pixelated_mail_test.py
index 9d7176a4..922c147d 100644
--- a/service/test/adapter/pixelated_mail_test.py
+++ b/service/test/adapter/pixelated_mail_test.py
@@ -91,9 +91,10 @@ class TestPixelatedMail(unittest.TestCase):
self.assertRegexpMatches(mime_multipart.as_string(), "\nEste \xe9 o corpo")
def test_smtp_format(self):
+ PixelatedMail.from_email_address = 'pixelated@org'
mail = PixelatedMail.from_dict(self.mail_dict)
- smtp_format = mail.to_smtp_format(_from='pixelated@org')
+ smtp_format = mail.to_smtp_format()
self.assertRegexpMatches(smtp_format, "\nFrom: pixelated@org")
diff --git a/service/test/adapter/pixelated_mailbox_test.py b/service/test/adapter/pixelated_mailbox_test.py
index 6574d407..ae63b157 100644
--- a/service/test/adapter/pixelated_mailbox_test.py
+++ b/service/test/adapter/pixelated_mailbox_test.py
@@ -15,8 +15,12 @@
# along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
import unittest
from mockito import *
+import leap
+import os
+from pixelated.adapter.pixelated_mail import PixelatedMail
import test_helper
from pixelated.adapter.pixelated_mailbox import PixelatedMailbox
+from mockito import *
class TestPixelatedMailbox(unittest.TestCase):
@@ -31,3 +35,18 @@ class TestPixelatedMailbox(unittest.TestCase):
mails = self.mailbox.mails()
self.assertIn('sent', mails[0].tags)
+
+ def test_add_message_to_mailbox(self):
+ PixelatedMail.from_email_address = 'pixel@ted.org'
+ mail = PixelatedMail.from_dict(test_helper.mail_dict())
+ mail.to_smtp_format = lambda: 'the mail in smtp format'
+
+ leap_mailbox_messages = mock()
+ leap_mailbox = test_helper.leap_mailbox(messages=[])
+ mailbox = PixelatedMailbox(leap_mailbox, self.db_file_path)
+ mailbox.leap_mailbox.messages = leap_mailbox_messages
+
+ mailbox.add(mail)
+
+ verify(leap_mailbox_messages).add_msg('the mail in smtp format')
+
diff --git a/service/test/adapter/pixelated_mailboxes_test.py b/service/test/adapter/pixelated_mailboxes_test.py
index 1ced8369..eebdc904 100644
--- a/service/test/adapter/pixelated_mailboxes_test.py
+++ b/service/test/adapter/pixelated_mailboxes_test.py
@@ -40,3 +40,4 @@ class PixelatedMailboxesTest(unittest.TestCase):
# then
self.assertEqual(1, len(mails))
self.assertEqual("mail", mails[0])
+
diff --git a/service/test/user_agent_test.py b/service/test/user_agent_test.py
index 7c701a54..10d7fc6c 100644
--- a/service/test/user_agent_test.py
+++ b/service/test/user_agent_test.py
@@ -16,7 +16,8 @@
import unittest
import pixelated.user_agent
-from mock import Mock
+from pixelated.adapter.pixelated_mail import PixelatedMail
+from mockito import *
import pixelated.adapter.pixelated_mail
@@ -24,11 +25,31 @@ class UserAgentTest(unittest.TestCase):
def setUp(self):
self.app = pixelated.user_agent.app.test_client()
+ self.mail_service = mock()
+ pixelated.user_agent.mail_service = self.mail_service
- def test_send_mail_should_add_user_account(self):
- pixelated.user_agent.mail_service = Mock()
- pixelated.adapter.pixelated_mail.from_dict = lambda self: 'mail'
+ def test_create_or_send_draft_should_create_draft_if_mail_has_no_ident(self):
+ mail = self.mail_without_ident()
+ pixelated.adapter.pixelated_mail.from_dict = lambda self: mail #has no ident
self.app.post('/mails', data='{}', content_type="application/json")
- pixelated.user_agent.mail_service.send.assert_called_with('mail')
+ verify(self.mail_service).create_draft(mail)
+
+ def test_create_or_send_draft_should_send_draft_if_mail_has_ident(self):
+ mail = self.mail_with_ident()
+ pixelated.adapter.pixelated_mail.from_dict = lambda self: mail #does have ident
+
+ self.app.post('/mails', data='{}', content_type="application/json")
+
+ verify(self.mail_service).send_draft(mail)
+
+ def mail_without_ident(self):
+ mail = PixelatedMail()
+ mail.ident = ''
+ return mail
+
+ def mail_with_ident(self):
+ mail = PixelatedMail()
+ mail.ident = 1
+ return mail