# # Copyright (c) 2014 ThoughtWorks, Inc. # # Pixelated is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Pixelated is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with Pixelated. If not, see . import time from test.support.integration import SoledadTestBase, MailBuilder from leap.mail.adaptors.soledad import MailboxWrapper from twisted.internet import defer class SoledadQuerierTest(SoledadTestBase): def setUp(self): self.maxDiff = None return SoledadTestBase.setUp(self) def _get_empty_mailbox(self): return MailboxWrapper() def _create_mailbox(self, mailbox_name): new_mailbox = self._get_empty_mailbox() new_mailbox.mbox = mailbox_name new_mailbox.created = int(time.time() * 10E2) return self.soledad.create_doc(new_mailbox.serialize()) @defer.inlineCallbacks def _get_mailboxes_from_soledad(self, mailbox_name): defer.returnValue([m for m in (yield self.soledad.get_from_index('by-type', 'mbox')) if m.content['mbox'] == mailbox_name]) @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 duplicated_mbox = yield self._create_mailbox('INBOX') # now we have a duplicate # 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) yield self.soledad_querier.remove_duplicates() # 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.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') yield self.soledad.create_doc(fdoc) 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 yield self.soledad.create_doc(hdoc) mails = yield self.soledad_querier.all_mails() self.assertEqual(0, len(mails)) # now the mail is complete yield self.soledad.create_doc(bdoc) mails = yield self.soledad_querier.all_mails() self.assertEqual(1, len(mails)) @defer.inlineCallbacks def test_get_mails_by_chash(self): mails = yield self.add_multiple_to_mailbox(3, 'INBOX') chashes = [mail.ident for mail in mails] 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])