diff options
-rw-r--r-- | service/pixelated/adapter/mail_service.py | 10 | ||||
-rw-r--r-- | service/pixelated/adapter/pixelated_mail.py | 4 | ||||
-rw-r--r-- | service/pixelated/adapter/pixelated_mail_sender.py | 2 | ||||
-rw-r--r-- | service/pixelated/adapter/pixelated_mailbox.py | 3 | ||||
-rw-r--r-- | service/pixelated/adapter/pixelated_mailboxes.py | 9 | ||||
-rw-r--r-- | service/pixelated/user_agent.py | 7 | ||||
-rw-r--r-- | service/test/adapter/mail_service_test.py | 8 | ||||
-rw-r--r-- | service/test/adapter/pixelated_mail_test.py | 3 | ||||
-rw-r--r-- | service/test/adapter/pixelated_mailbox_test.py | 19 | ||||
-rw-r--r-- | service/test/adapter/pixelated_mailboxes_test.py | 1 | ||||
-rw-r--r-- | service/test/user_agent_test.py | 31 |
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 |