summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorPatrick Maia and Victor Shyba <pixelated-team+pmaia+vshyba@thoughtworks.com>2014-08-22 17:12:56 +0000
committerPatrick Maia <pmaia@thoughtworks.com>2014-08-22 17:13:22 +0000
commit4685e3d8e6188951a897c25a4772ef227eb27683 (patch)
tree3b1b02c746a8b433dc27c85bd53272ad50c4d0db /service
parent285f3e706195631e1094791e0399de4530f9a70d (diff)
fixes bug in which inbox special tag was being duplicated
Diffstat (limited to 'service')
-rw-r--r--service/pixelated/adapter/mail_service.py8
-rw-r--r--service/pixelated/tags.py3
-rw-r--r--service/test/adapter/mail_service_test.py33
-rw-r--r--service/test/adapter/pixelated_mail_test.py18
-rw-r--r--service/test/adapter/test_helper.py4
5 files changed, 32 insertions, 34 deletions
diff --git a/service/pixelated/adapter/mail_service.py b/service/pixelated/adapter/mail_service.py
index 6498a2e7..fc8002a1 100644
--- a/service/pixelated/adapter/mail_service.py
+++ b/service/pixelated/adapter/mail_service.py
@@ -30,7 +30,11 @@ class MailService:
self.provider = LeapProvider(self.server_name, self.leap_config)
self.leap_session = LeapSessionFactory(self.provider).create(LeapCredentials(self.username, self.password))
self.account = self.leap_session.account
- self.mailbox = self.account.getMailbox(self.mailbox_name)
+
+ @property
+ def mailbox(self):
+ return self.account.getMailbox(self.mailbox_name)
+
def mails(self, query):
mails = self.mailbox.messages or []
@@ -49,7 +53,7 @@ class MailService:
self.tags.add(tag)
def _update_flags(self, new_tags, mail_id):
- new_tags_flag_name = ['tag_' + tag.name for tag in new_tags]
+ new_tags_flag_name = ['tag_' + tag.name for tag in new_tags if tag.name not in Tags.SPECIAL_TAGS]
self.set_flags(mail_id, new_tags_flag_name)
def set_flags(self, mail_id, new_tags_flag_name):
diff --git a/service/pixelated/tags.py b/service/pixelated/tags.py
index 7452b7d6..cae5987e 100644
--- a/service/pixelated/tags.py
+++ b/service/pixelated/tags.py
@@ -27,6 +27,9 @@ class Tag:
}
}
+ def __repr__(self):
+ return self.name
+
class Tags:
diff --git a/service/test/adapter/mail_service_test.py b/service/test/adapter/mail_service_test.py
index 0c6538dc..1219307e 100644
--- a/service/test/adapter/mail_service_test.py
+++ b/service/test/adapter/mail_service_test.py
@@ -5,38 +5,19 @@ from mock import Mock, MagicMock, patch
import test_helper
from pixelated.tags import Tag
-
class TestMailService(unittest.TestCase):
- 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"
- }
-
@patch.object(MailService, 'set_flags', return_value=None)
- def test_custom_tags_get_created_if_not_exists(self, setFlags):
+ def test_custom_tags_get_created_if_not_exists(self, mockSetFlags):
MailService._open_leap_session = lambda self: None
- MailService.mailbox = Mock(messages=[test_helper.leap_mail(uid=6)])
+ MailService.mailbox = Mock(messages=[test_helper.leap_mail(uid=6, leap_flags=['\\Recent'])])
MailService.account = Mock(return_value=MagicMock())
mailservice = MailService()
- new_tags = ['test']
- mails = mailservice.update_tags(6, new_tags)
-
- for tag in mailservice.all_tags():
- print tag.name
+ new_tags = ['test', 'inbox']
+ updated_tags = mailservice.update_tags(6, new_tags)
- self.assertIn(Tag('test'), mailservice.all_tags())
+ self.assertEquals(set([Tag('test'), Tag('inbox')]), set(updated_tags))
+ # make sure that special tags are skipped when setting leap flags (eg.: tag_inbox)
+ mockSetFlags.assert_called_with(6, ['tag_test'])
diff --git a/service/test/adapter/pixelated_mail_test.py b/service/test/adapter/pixelated_mail_test.py
index 923398ed..ae444098 100644
--- a/service/test/adapter/pixelated_mail_test.py
+++ b/service/test/adapter/pixelated_mail_test.py
@@ -8,15 +8,24 @@ import test_helper
class TestPixelatedMail(unittest.TestCase):
- def test_leap_flags_that_are_tags_are_handled(self):
- pixelated_mail = PixelatedMail(test_helper.leap_mail())
+ def test_leap_recent_flag_is_translated_to_inbox_tag(self):
+ pixelated_mail = PixelatedMail(test_helper.leap_mail(leap_flags=['\\Recent']))
self.assertIn(Tag('inbox'), pixelated_mail.tags)
+
+ def test_leap_deleted_flag_is_translated_to_trash_tag(self):
+ pixelated_mail = PixelatedMail(test_helper.leap_mail(leap_flags=['\\Deleted']))
self.assertIn(Tag('trash'), pixelated_mail.tags)
+
+ def test_leap_draft_flag_is_translated_to_draft_tag(self):
+ pixelated_mail = PixelatedMail(test_helper.leap_mail(leap_flags=['\\Draft']))
self.assertIn(Tag('drafts'), pixelated_mail.tags)
- def test_leap_flags_that_are_status_are_handled(self):
- pixelated_mail = PixelatedMail(test_helper.leap_mail())
+ def test_leap_seen_flag_is_translated_to_read_status(self):
+ pixelated_mail = PixelatedMail(test_helper.leap_mail(leap_flags=['\\Seen']))
self.assertIn('read', pixelated_mail.status)
+
+ def test_leap_answered_flag_is_translated_to_replied_status(self):
+ pixelated_mail = PixelatedMail(test_helper.leap_mail(leap_flags=['\\Answered']))
self.assertIn('replied', pixelated_mail.status)
def test_leap_flags_that_are_custom_tags_are_handled(self):
@@ -26,3 +35,4 @@ class TestPixelatedMail(unittest.TestCase):
def test_custom_tags_containing_our_prefix_are_handled(self):
pixelated_mail = PixelatedMail(test_helper.leap_mail(extra_flags=['tag_tag_work_tag_']))
self.assertIn(Tag('tag_work_tag_'), pixelated_mail.tags)
+
diff --git a/service/test/adapter/test_helper.py b/service/test/adapter/test_helper.py
index 3731dfe8..dd063bc4 100644
--- a/service/test/adapter/test_helper.py
+++ b/service/test/adapter/test_helper.py
@@ -10,8 +10,8 @@ LEAP_FLAGS = ['\\Seen',
'List']
-def leap_mail(uid=0, extra_flags=[], headers={'date': str(datetime.now())}):
- flags = LEAP_FLAGS + extra_flags
+def leap_mail(uid=0, leap_flags=LEAP_FLAGS, extra_flags=[], headers={'date': str(datetime.now())}):
+ flags = leap_flags + extra_flags
return Mock(getUID=Mock(return_value=uid),
getFlags=Mock(return_value=flags),
bdoc=Mock(content={'raw': 'test'}),