From 5b2538cd3cd5cb012021b7043a2ef427b7ace89a Mon Sep 17 00:00:00 2001 From: Bruno Wagner Goncalves and Patrick Maia Date: Thu, 14 Aug 2014 12:11:48 -0300 Subject: Update mail with new tags should be working now --- service/app/adapter/mail_service.py | 17 +++++++++++++ service/app/pixelated_user_agent.py | 3 ++- service/test/adapter/mail_service_test.py | 42 +++++++++++++++++++++++-------- 3 files changed, 51 insertions(+), 11 deletions(-) (limited to 'service') diff --git a/service/app/adapter/mail_service.py b/service/app/adapter/mail_service.py index b5ae09f2..fb5b52c3 100644 --- a/service/app/adapter/mail_service.py +++ b/service/app/adapter/mail_service.py @@ -54,6 +54,23 @@ class MailService: def mails(self, query): return self.mailbox.messages or [] + def update_mail(self, dict_mail): + # Iterating over messages because messages.getUID() is not trustworthy + mail = None + for message in self.mailbox.messages: + if message.getUID() == dict_mail['ident']: + mail = PixelatedMail(message) + + new_tags = mail.update_tags(dict_mail['tags']) + + self._update_tag_list(new_tags) + + return mail + + def _update_tag_list(self, tags): + for tag in tags: + self.tags.add(tag) + def _switch_mailbox(self, name): mailbox = None if name in self.SPECIAL_BOXES: diff --git a/service/app/pixelated_user_agent.py b/service/app/pixelated_user_agent.py index 75e84c3c..2d0dc4b8 100644 --- a/service/app/pixelated_user_agent.py +++ b/service/app/pixelated_user_agent.py @@ -49,7 +49,8 @@ def save_draft_or_send(): @app.route('/mails', methods=['PUT']) def update_draft(): - ident = mail_service.save_draft(converter.to_mail(request.json, account)) + raw_mail = json.parse(request.json) + ident = mail_service.update_mail(raw_mail) return respond_json({'ident': ident}) diff --git a/service/test/adapter/mail_service_test.py b/service/test/adapter/mail_service_test.py index 0828f20a..4751413d 100644 --- a/service/test/adapter/mail_service_test.py +++ b/service/test/adapter/mail_service_test.py @@ -1,17 +1,39 @@ import unittest from app.adapter.mail_service import MailService - - -class MailboxCollision(Exception): - pass - - -class MailboxException(Exception): - pass +from mock import Mock, MagicMock, patch +import test_helper +from app.tags import Tag class TestMailService(unittest.TestCase): - def setUp(self): - self.mail_service = MailService() + def _raw_mail(self): + return { + "header": + { + "to":["p@k.s"], + "from":"a@y.t", + "subject":"Test", + "date":"2007-09-28T06:11:03-03:00" + }, + "ident":6, + "tags":["instagramer"], + "status":[], + "security_casing":{}, + "draft_reply_for":[], + "body":"teste" + } + + def test_custom_tags_get_created_if_not_exists(self): + MailService._open_leap_session = lambda self: None + MailService.mailbox = Mock(messages=[test_helper.leap_mail(uid=6)]) + MailService.account = Mock(return_value=MagicMock()) + + mailservice = MailService() + + raw_mail = self._raw_mail() + raw_mail['tags'].append('my_new_tag') + mails = mailservice.update_mail(raw_mail) + + self.assertIn(Tag('my_new_tag'), mailservice.all_tags()) -- cgit v1.2.3