summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorBruno Wagner Goncalves <bwagner@thoughtworks.com>2014-08-13 14:27:00 -0300
committerBruno Wagner Goncalves <bwagner@thoughtworks.com>2014-08-13 14:27:00 -0300
commite61fdb9721872614f8672b715dadb9cbd23a84ee (patch)
tree3b27d8fdc19469479500d35f21213d1492ff2791 /service
parent39b6faf7b1ce4a20cc43bdd4951997f8760f45b7 (diff)
Pixelated mail class and test
Diffstat (limited to 'service')
-rw-r--r--service/app/adapter/pixelated_mail.py62
-rw-r--r--service/test/adapter/pixelated_mail_test.py33
2 files changed, 95 insertions, 0 deletions
diff --git a/service/app/adapter/pixelated_mail.py b/service/app/adapter/pixelated_mail.py
new file mode 100644
index 00000000..412414ed
--- /dev/null
+++ b/service/app/adapter/pixelated_mail.py
@@ -0,0 +1,62 @@
+from app.tags import Tag
+
+
+class PixelatedMail:
+
+ LEAP_FLAGS = ['\\Seen',
+ '\\Answered',
+ '\\Flagged',
+ '\\Deleted',
+ '\\Draft',
+ '\\Recent',
+ 'List']
+
+ LEAP_FLAGS_STATUSES = {
+ '\\Seen': 'read',
+ '\\Answered': 'replied'
+ }
+
+ LEAP_FLAGS_TAGS = {
+ '\\Deleted': 'trash',
+ '\\Draft': 'drafts',
+ '\\Recent': 'inbox'
+ }
+
+ def __init__(self, leap_mail):
+ self.leap_mail = leap_mail
+ self.body = leap_mail.bdoc.content['raw']
+ self.headers = self.extract_headers(leap_mail)
+ self.ident = leap_mail.getUID()
+ self.status = self.extract_status(leap_mail)
+ self.security_casing = {}
+ self.tags = self.extract_tags(leap_mail)
+
+ def extract_status(self, leap_mail):
+ flags = leap_mail.getFlags()
+ return [converted for flag, converted in self.LEAP_FLAGS_STATUSES.items() if flag in flags]
+
+ def extract_headers(self, leap_mail):
+ temporary_headers = {}
+ for header, value in leap_mail.hdoc.content['headers'].items():
+ temporary_headers[header.lower()] = value
+ return temporary_headers
+
+ def extract_tags(self, leap_mail):
+ flags = leap_mail.getFlags()
+ converted_tags = [Tag(converted) for flag, converted in self.LEAP_FLAGS_TAGS.items() if flag in flags]
+ tags = converted_tags + [Tag(flag) for flag in leap_mail.getFlags() if flag not in self.LEAP_FLAGS]
+ return tags
+
+ def has_tag(self, tag):
+ return Tag(tag) in self.tags
+
+ def as_dict(self):
+ tags = [tag.name for tag in self.tags]
+ return {
+ 'header': self.headers,
+ 'ident': self.ident,
+ 'tags': tags,
+ 'status': self.status,
+ 'security_casing': self.security_casing,
+ 'body': self.body
+ }
diff --git a/service/test/adapter/pixelated_mail_test.py b/service/test/adapter/pixelated_mail_test.py
new file mode 100644
index 00000000..9193464b
--- /dev/null
+++ b/service/test/adapter/pixelated_mail_test.py
@@ -0,0 +1,33 @@
+import unittest
+
+from app.adapter.pixelated_mail import PixelatedMail
+from mock import Mock
+from app.tags import Tag
+
+
+class TestPixelatedMail(unittest.TestCase):
+
+ LEAP_FLAGS = ['\\Seen',
+ '\\Answered',
+ '\\Flagged',
+ '\\Deleted',
+ '\\Draft',
+ '\\Recent',
+ 'List']
+
+ def setUp(self):
+ self.leap_mail = Mock(getUID=Mock(return_value=0),
+ getFlags=Mock(return_value=self.LEAP_FLAGS),
+ bdoc=Mock(content={'raw': 'test'}),
+ hdoc=Mock(content={'headers': {}}))
+
+ def test_leap_flags_that_are_tags_are_handled(self):
+ pixelated_mail = PixelatedMail(self.leap_mail)
+ self.assertIn(Tag('inbox'), pixelated_mail.tags)
+ self.assertIn(Tag('trash'), pixelated_mail.tags)
+ self.assertIn(Tag('drafts'), pixelated_mail.tags)
+
+ def test_leap_flags_that_are_status_are_handled(self):
+ pixelated_mail = PixelatedMail(self.leap_mail)
+ self.assertIn('read', pixelated_mail.status)
+ self.assertIn('replied', pixelated_mail.status)