From 5421b5aab20daa59bc378191522db009a557aa68 Mon Sep 17 00:00:00 2001 From: kaeff Date: Fri, 4 Sep 2015 18:24:38 +0200 Subject: Prepare removing SoledadQuerier from Mail Discovered that Mail#save was still using SoledadQuerier. There were 3 methods using it: - update_tags: Covered by MailService -> moved test & fixed impl - mark_as_read: Already implemented on MailService -> removed - mark_as_unread: Still needs to be moved - remove_all_tags: Unused -> deleted - mark_as_not_recent: Unused -> deleted Issue: #432 --- service/pixelated/adapter/model/mail.py | 37 ---------------------- service/pixelated/adapter/services/mail_service.py | 2 +- service/test/unit/adapter/test_mail.py | 22 ------------- service/test/unit/adapter/test_mail_service.py | 11 +++++++ 4 files changed, 12 insertions(+), 60 deletions(-) (limited to 'service') diff --git a/service/pixelated/adapter/model/mail.py b/service/pixelated/adapter/model/mail.py index 733678db..53b86aaf 100644 --- a/service/pixelated/adapter/model/mail.py +++ b/service/pixelated/adapter/model/mail.py @@ -436,46 +436,9 @@ class PixelatedMail(Mail): def flags(self): return self.fdoc.content['flags'] - def save(self): - return self.querier.save_mail(self) - def set_mailbox(self, mailbox_name): self.fdoc.content['mbox'] = mailbox_name - def remove_all_tags(self): - return self.update_tags(set([])) - - @defer.inlineCallbacks - def update_tags(self, tags): - yield self._persist_mail_tags(tags) - defer.returnValue(self.tags) - - @defer.inlineCallbacks - def mark_as_read(self): - if Status.SEEN in self.flags: - defer.returnValue(self) - else: - self.flags.append(Status.SEEN) - yield self.save() - defer.returnValue(self) - - @defer.inlineCallbacks - def mark_as_unread(self): - if Status.SEEN in self.flags: - self.flags.remove(Status.SEEN) - yield self.save() - defer.returnValue(self) - - def mark_as_not_recent(self): - if Status.RECENT in self.flags: - self.flags.remove(Status.RECENT) - self.save() - return self - - def _persist_mail_tags(self, current_tags): - self.fdoc.content['tags'] = json.dumps(list(current_tags)) - return self.save() - def has_tag(self, tag): return tag in self.tags diff --git a/service/pixelated/adapter/services/mail_service.py b/service/pixelated/adapter/services/mail_service.py index 789d159e..d9cb6517 100644 --- a/service/pixelated/adapter/services/mail_service.py +++ b/service/pixelated/adapter/services/mail_service.py @@ -51,7 +51,7 @@ class MailService(object): raise ValueError('None of the following words can be used as tags: ' + ' '.join(reserved_words)) new_tags = self._favor_existing_tags_casing(new_tags) mail = yield self.mail(mail_id) - mail.tags |= set(new_tags) + mail.tags = set(new_tags) yield self.mail_store.update_mail(mail) defer.returnValue(mail) diff --git a/service/test/unit/adapter/test_mail.py b/service/test/unit/adapter/test_mail.py index 03a37c1f..79039b75 100644 --- a/service/test/unit/adapter/test_mail.py +++ b/service/test/unit/adapter/test_mail.py @@ -91,28 +91,6 @@ class TestPixelatedMail(unittest.TestCase): self.assertEqual(mail.headers['Date'], date_expected) - @defer.inlineCallbacks - def test_update_tags_return_a_set_with_the_current_tags(self): - soledad_docs = test_helper.leap_mail(extra_headers={'X-tags': '["custom_1", "custom_2"]'}) - pixelated_mail = PixelatedMail.from_soledad(*soledad_docs, soledad_querier=self.querier) - - current_tags = yield pixelated_mail.update_tags({'custom_1', 'custom_3'}) - self.assertEquals({'custom_3', 'custom_1'}, current_tags) - - def test_mark_as_read(self): - mail = PixelatedMail.from_soledad(*test_helper.leap_mail(flags=[]), soledad_querier=self.querier) - - mail.mark_as_read() - - self.assertEquals(mail.fdoc.content['flags'], ['\\Seen']) - - def test_mark_as_not_recent(self): - mail = PixelatedMail.from_soledad(*test_helper.leap_mail(flags=['\\Recent']), soledad_querier=self.querier) - - mail.mark_as_not_recent() - - self.assertEquals(mail.fdoc.content['flags'], []) - def test_get_for_save_adds_from(self): InputMail.FROM_EMAIL_ADDRESS = 'me@pixelated.org' headers = {'Subject': 'The subject', diff --git a/service/test/unit/adapter/test_mail_service.py b/service/test/unit/adapter/test_mail_service.py index 677745f2..7dd68706 100644 --- a/service/test/unit/adapter/test_mail_service.py +++ b/service/test/unit/adapter/test_mail_service.py @@ -138,3 +138,14 @@ class TestMailService(unittest.TestCase): attachment = yield self.mail_service.attachment('some attachment id') self.assertEqual(attachment_dict, attachment) + + @defer.inlineCallbacks + def test_update_tags_return_a_set_with_the_current_tags(self): + mail = LeapMail(1, 'INBOX', tags={'custom_1', 'custom_2'}) + when(self.mail_store).get_mail(1, include_body=True).thenReturn(mail) + when(self.search_engine).tags(query='', skip_default_tags=True).thenReturn([]) + + updated_mail = yield self.mail_service.update_tags(1, {'custom_1', 'custom_3'}) + + verify(self.mail_store).update_mail(mail) + self.assertEqual({'custom_1', 'custom_3'}, updated_mail.tags) -- cgit v1.2.3