summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorVictor Shyba <victor.shyba@gmail.com>2015-07-17 16:44:47 +0200
committerFolker Bernitt <fbernitt@thoughtworks.com>2015-08-11 17:00:24 +0200
commit9712b180af268731595a504f2b4e9fdcc0584215 (patch)
tree9e8247ee0b9b6c4ae81262a7c36a9f5842fcb746 /service
parentcf445be6de641fef29b3279cdb3783e33748b489 (diff)
fix test_soledad_querier
Diffstat (limited to 'service')
-rw-r--r--service/pixelated/adapter/soledad/soledad_duplicate_removal_mixin.py19
-rw-r--r--service/pixelated/adapter/soledad/soledad_facade_mixin.py2
-rw-r--r--service/test/integration/test_soledad_querier.py33
-rw-r--r--service/test/support/integration/app_test_client.py9
-rw-r--r--service/test/support/integration/soledad_test_base.py2
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 <http://www.gnu.org/licenses/>.
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()