From 9712b180af268731595a504f2b4e9fdcc0584215 Mon Sep 17 00:00:00 2001 From: Victor Shyba Date: Fri, 17 Jul 2015 16:44:47 +0200 Subject: fix test_soledad_querier --- .../soledad/soledad_duplicate_removal_mixin.py | 19 ++++++++----- .../adapter/soledad/soledad_facade_mixin.py | 2 +- service/test/integration/test_soledad_querier.py | 33 ++++++++++++---------- .../test/support/integration/app_test_client.py | 9 ++++-- .../test/support/integration/soledad_test_base.py | 2 +- 5 files changed, 38 insertions(+), 27 deletions(-) diff --git a/service/pixelated/adapter/soledad/soledad_duplicate_removal_mixin.py b/service/pixelated/adapter/soledad/soledad_duplicate_removal_mixin.py index 0dd3d497..a2b4b6d7 100644 --- a/service/pixelated/adapter/soledad/soledad_duplicate_removal_mixin.py +++ b/service/pixelated/adapter/soledad/soledad_duplicate_removal_mixin.py @@ -14,28 +14,33 @@ # You should have received a copy of the GNU Affero General Public License # along with Pixelated. If not, see . from pixelated.adapter.soledad.soledad_facade_mixin import SoledadDbFacadeMixin +from twisted.internet import defer class SoledadDuplicateRemovalMixin(SoledadDbFacadeMixin, object): + @defer.inlineCallbacks def remove_duplicates(self): for mailbox in ['INBOX', 'DRAFTS', 'SENT', 'TRASH']: - self._remove_dup_inboxes(mailbox) - self._remove_dup_recent(mailbox) + yield self._remove_dup_inboxes(mailbox) + yield self._remove_dup_recent(mailbox) + @defer.inlineCallbacks def _remove_many(self, docs): - [self.delete_doc(doc) for doc in docs] + [(yield self.delete_doc(doc)) for doc in docs] + @defer.inlineCallbacks def _remove_dup_inboxes(self, mailbox_name): - mailboxes = self.get_mbox(mailbox_name) + mailboxes = yield self.get_mbox(mailbox_name) if len(mailboxes) == 0: return mailboxes_to_remove = sorted(mailboxes, key=lambda x: x.content['created'])[1:len(mailboxes)] - self._remove_many(mailboxes_to_remove) + yield self._remove_many(mailboxes_to_remove) + @defer.inlineCallbacks def _remove_dup_recent(self, mailbox_name): - rct = self.get_recent_by_mbox(mailbox_name) + rct = yield self.get_recent_by_mbox(mailbox_name) if len(rct) == 0: return rct_to_remove = sorted(rct, key=lambda x: len(x.content['rct']), reverse=True)[1:len(rct)] - self._remove_many(rct_to_remove) + yield self._remove_many(rct_to_remove) diff --git a/service/pixelated/adapter/soledad/soledad_facade_mixin.py b/service/pixelated/adapter/soledad/soledad_facade_mixin.py index d3baa64b..1f191ab2 100644 --- a/service/pixelated/adapter/soledad/soledad_facade_mixin.py +++ b/service/pixelated/adapter/soledad/soledad_facade_mixin.py @@ -77,7 +77,7 @@ class SoledadDbFacadeMixin(object): @defer.inlineCallbacks def get_lastuid(self, mbox): if isinstance(mbox, str): - mbox = (yield defer.maybeDeferred(self.get_mbox(mbox)))[0] + mbox = (yield defer.maybeDeferred(self.get_mbox, mbox))[0] indexer = MailboxIndexer(self.soledad) last_uuid = yield indexer.get_last_uid(mbox.content['uuid']) diff --git a/service/test/integration/test_soledad_querier.py b/service/test/integration/test_soledad_querier.py index ea20fda7..ebe2f13c 100644 --- a/service/test/integration/test_soledad_querier.py +++ b/service/test/integration/test_soledad_querier.py @@ -24,8 +24,8 @@ from twisted.internet import defer class SoledadQuerierTest(SoledadTestBase): def setUp(self): - SoledadTestBase.setUp(self) self.maxDiff = None + return SoledadTestBase.setUp(self) def _get_empty_mailbox(self): return MailboxWrapper() @@ -43,43 +43,46 @@ class SoledadQuerierTest(SoledadTestBase): @defer.inlineCallbacks def test_remove_dup_mailboxes_keeps_the_one_with_the_highest_last_uid(self): yield self.add_multiple_to_mailbox(3, 'INBOX') # by now we already have one inbox with 3 mails - yield self._create_mailbox('INBOX') # now we have a duplicate + duplicated_mbox = yield self._create_mailbox('INBOX') # now we have a duplicate - # make sure we have two + # make sure we have two and duplicated is one of them inboxes = yield self._get_mailboxes_from_soledad('INBOX') self.assertEqual(2, len(inboxes)) + self.assertIn(duplicated_mbox, inboxes) - self.soledad_querier.remove_duplicates() + yield self.soledad_querier.remove_duplicates() - # make sure we only have one, and the one with the right lastuid - inboxes = self._get_mailboxes_from_soledad('INBOX') + # make sure we only have one, and it is not the duplicated one + inboxes = yield self._get_mailboxes_from_soledad('INBOX') self.assertEqual(1, len(inboxes)) - self.assertEqual(3, inboxes[0].content['lastuid']) + self.assertNotIn(duplicated_mbox, inboxes) + @defer.inlineCallbacks def test_all_mails_skips_incomplete_mails(self): # creating incomplete mail, we will only save the fdoc fdoc, hdoc, bdoc = MailBuilder().build_input_mail().get_for_save(1, 'INBOX') - self.soledad.create_doc(fdoc) + yield self.soledad.create_doc(fdoc) - mails = self.soledad_querier.all_mails() + mails = yield self.soledad_querier.all_mails() self.assertEqual(0, len(mails)) # mail is incomplete since it only has fdoc # adding the hdoc still doesn't complete the mail - self.soledad.create_doc(hdoc) + yield self.soledad.create_doc(hdoc) - mails = self.soledad_querier.all_mails() + mails = yield self.soledad_querier.all_mails() self.assertEqual(0, len(mails)) # now the mail is complete - self.soledad.create_doc(bdoc) + yield self.soledad.create_doc(bdoc) - mails = self.soledad_querier.all_mails() + mails = yield self.soledad_querier.all_mails() self.assertEqual(1, len(mails)) + @defer.inlineCallbacks def test_get_mails_by_chash(self): - mails = self.add_multiple_to_mailbox(3, 'INBOX') + mails = yield self.add_multiple_to_mailbox(3, 'INBOX') chashes = [mail.ident for mail in mails] - fetched_mails = self.soledad_querier.mails(chashes) + fetched_mails = yield self.soledad_querier.mails(chashes) self.assertEquals([m.as_dict() for m in fetched_mails], [m.as_dict() for m in mails]) diff --git a/service/test/support/integration/app_test_client.py b/service/test/support/integration/app_test_client.py index 80b399ed..e5c845cc 100644 --- a/service/test/support/integration/app_test_client.py +++ b/service/test/support/integration/app_test_client.py @@ -23,7 +23,7 @@ import uuid from leap.mail.imap.account import IMAPAccount from leap.soledad.client import Soledad -from mock import MagicMock, Mock +from mock import Mock from twisted.internet import reactor, defer from twisted.internet.defer import succeed from twisted.web.resource import getChildForRequest @@ -66,12 +66,15 @@ class AppTestClient(object): self.search_engine = SearchEngine(self.INDEX_KEY, agent_home=soledad_test_folder) self.mail_sender = self._create_mail_sender() - self.account = IMAPAccount(self.ACCOUNT, self.soledad, MagicMock()) + account_ready_cb = defer.Deferred() + self.account = IMAPAccount(self.ACCOUNT, self.soledad, account_ready_cb) + yield account_ready_cb self.mailboxes = Mailboxes(self.account, self.soledad_querier, self.search_engine) self.draft_service = DraftService(self.mailboxes) self.mail_service = self._create_mail_service(self.mailboxes, self.mail_sender, self.soledad_querier, self.search_engine) - self.search_engine.index_mails((yield self.mail_service.all_mails())) + mails = yield self.mail_service.all_mails() + self.search_engine.index_mails(mails) self.resource = RootResource() self.resource.initialize(self.keymanager, self.search_engine, self.mail_service, self.draft_service) diff --git a/service/test/support/integration/soledad_test_base.py b/service/test/support/integration/soledad_test_base.py index c49de00a..979b1f96 100644 --- a/service/test/support/integration/soledad_test_base.py +++ b/service/test/support/integration/soledad_test_base.py @@ -23,7 +23,7 @@ class SoledadTestBase(unittest.TestCase, AppTestClient): DEFERRED_TIMEOUT_LONG = 300 def setUp(self): - self.start_client() + return self.start_client() def tearDown(self): self.cleanup() -- cgit v1.2.3