From e61fdb9721872614f8672b715dadb9cbd23a84ee Mon Sep 17 00:00:00 2001 From: Bruno Wagner Goncalves Date: Wed, 13 Aug 2014 14:27:00 -0300 Subject: Pixelated mail class and test --- service/app/adapter/pixelated_mail.py | 62 +++++++++++++++++++++++++++++ service/test/adapter/pixelated_mail_test.py | 33 +++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 service/app/adapter/pixelated_mail.py create mode 100644 service/test/adapter/pixelated_mail_test.py (limited to 'service') 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) -- cgit v1.2.3