diff options
Diffstat (limited to 'service/test/unit')
-rw-r--r-- | service/test/unit/adapter/test_mail_service.py | 10 | ||||
-rw-r--r-- | service/test/unit/adapter/test_mailboxes.py | 40 | ||||
-rw-r--r-- | service/test/unit/fixtures/mailset/cur/.keep | 0 | ||||
-rw-r--r-- | service/test/unit/fixtures/mailset/new/mbox00000000 (renamed from service/test/unit/fixtures/mailset/mbox00000000) | 0 | ||||
-rw-r--r-- | service/test/unit/fixtures/mailset/new/mbox00000001 (renamed from service/test/unit/fixtures/mailset/mbox00000001) | 0 | ||||
-rw-r--r-- | service/test/unit/fixtures/mailset/tmp/.keep | 0 | ||||
-rw-r--r-- | service/test/unit/maintenance/test_commands.py | 110 |
7 files changed, 116 insertions, 44 deletions
diff --git a/service/test/unit/adapter/test_mail_service.py b/service/test/unit/adapter/test_mail_service.py index 34fec708..f4b89f57 100644 --- a/service/test/unit/adapter/test_mail_service.py +++ b/service/test/unit/adapter/test_mail_service.py @@ -101,3 +101,13 @@ class TestMailService(unittest.TestCase): self.mail_service.delete_mail(1) verify(self.mailboxes).move_to_trash(1) + + def test_recover_mail(self): + mail_to_recover = PixelatedMail.from_soledad(*leap_mail(), soledad_querier=None) + when(self.mail_service).mail(1).thenReturn(mail_to_recover) + when(self.mailboxes).move_to_inbox(1).thenReturn(mail_to_recover) + + self.mail_service.recover_mail(1) + + verify(self.mailboxes).move_to_inbox(1) + verify(self.search_engine).index_mail(mail_to_recover) diff --git a/service/test/unit/adapter/test_mailboxes.py b/service/test/unit/adapter/test_mailboxes.py new file mode 100644 index 00000000..5b4548eb --- /dev/null +++ b/service/test/unit/adapter/test_mailboxes.py @@ -0,0 +1,40 @@ +# +# 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 <http://www.gnu.org/licenses/>. +import unittest + +from pixelated.adapter.model.mail import PixelatedMail +from pixelated.adapter.services.mailboxes import Mailboxes +from mockito import mock, when, verify +from test.support import test_helper +from mock import MagicMock + + +class PixelatedMailboxesTest(unittest.TestCase): + def setUp(self): + self.querier = mock() + self.search_engine = mock() + self.account = MagicMock() + self.mailboxes = Mailboxes(self.account, self.querier, self.search_engine) + + def test_move_to_inbox(self): + mail = PixelatedMail.from_soledad(*test_helper.leap_mail(), soledad_querier=self.querier) + when(self.querier).mail(1).thenReturn(mail) + when(mail).save().thenReturn(None) + + mail.set_mailbox('TRASH') + recovered_mail = self.mailboxes.move_to_inbox(1) + self.assertEquals('INBOX', recovered_mail.mailbox_name) + verify(mail).save() diff --git a/service/test/unit/fixtures/mailset/cur/.keep b/service/test/unit/fixtures/mailset/cur/.keep new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/service/test/unit/fixtures/mailset/cur/.keep diff --git a/service/test/unit/fixtures/mailset/mbox00000000 b/service/test/unit/fixtures/mailset/new/mbox00000000 index 3d01c203..3d01c203 100644 --- a/service/test/unit/fixtures/mailset/mbox00000000 +++ b/service/test/unit/fixtures/mailset/new/mbox00000000 diff --git a/service/test/unit/fixtures/mailset/mbox00000001 b/service/test/unit/fixtures/mailset/new/mbox00000001 index fc76bba2..fc76bba2 100644 --- a/service/test/unit/fixtures/mailset/mbox00000001 +++ b/service/test/unit/fixtures/mailset/new/mbox00000001 diff --git a/service/test/unit/fixtures/mailset/tmp/.keep b/service/test/unit/fixtures/mailset/tmp/.keep new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/service/test/unit/fixtures/mailset/tmp/.keep diff --git a/service/test/unit/maintenance/test_commands.py b/service/test/unit/maintenance/test_commands.py index f23655d8..6f993106 100644 --- a/service/test/unit/maintenance/test_commands.py +++ b/service/test/unit/maintenance/test_commands.py @@ -19,74 +19,96 @@ import email from pixelated.maintenance import delete_all_mails, load_mails from pixelated.bitmask_libraries.session import LeapSession from leap.mail.imap.account import SoledadBackedAccount +from leap.mail.imap.fields import WithMsgFields from leap.soledad.client import Soledad from leap.soledad.common.document import SoledadDocument from mock import MagicMock, ANY from os.path import join, dirname +from twisted.internet import defer, reactor class TestCommands(unittest.TestCase): - def setUp(self): - self.leap_session = MagicMock(spec=LeapSession) - self.soledad = MagicMock(spec=Soledad) - self.account = MagicMock(spec=SoledadBackedAccount) - self.mailbox = MagicMock() - self.leap_session.account = self.account - self.account.getMailbox.return_value = self.mailbox + def setUp(self): + self.leap_session = MagicMock(spec=LeapSession) + self.soledad = MagicMock(spec=Soledad) + self.account = MagicMock(spec=SoledadBackedAccount) + self.mailbox = MagicMock() + self.leap_session.account = self.account + self.account.getMailbox.return_value = self.mailbox - self.args = (self.leap_session, self.soledad) + self.args = (self.leap_session, self.soledad) - def test_delete_all_mails_supports_empty_doclist(self): - self.soledad.get_all_docs.return_value = (1, []) + def test_delete_all_mails_supports_empty_doclist(self): + self.soledad.get_all_docs.return_value = (1, []) - delete_all_mails(self.args) + delete_all_mails(self.args) - self.assertFalse(self.soledad.delete_doc.called) + self.assertFalse(self.soledad.delete_doc.called) - def test_delete_all_mails(self): - doc = MagicMock(spec=SoledadDocument) - doc.content = {'type': 'head'} - self.soledad.get_all_docs.return_value = (1, [doc]) + def test_delete_all_mails(self): + doc = MagicMock(spec=SoledadDocument) + doc.content = {'type': 'head'} + self.soledad.get_all_docs.return_value = (1, [doc]) - delete_all_mails(self.args) + delete_all_mails(self.args) - self.soledad.delete_doc.assert_called_once_with(doc) + self.soledad.delete_doc.assert_called_once_with(doc) - def test_only_mail_documents_are_deleted(self): - docs = self._create_docs_of_type(['head', 'cnt', 'flags', 'mbx', 'foo', None]) - self.soledad.get_all_docs.return_value = (1, docs) + def test_only_mail_documents_are_deleted(self): + docs = self._create_docs_of_type(['head', 'cnt', 'flags', 'mbx', 'foo', None]) + self.soledad.get_all_docs.return_value = (1, docs) - delete_all_mails(self.args) + delete_all_mails(self.args) - for doc in docs: - if doc.content['type'] in ['head', 'cnt', 'flags']: - self.soledad.delete_doc.assert_any_call(doc) - self.assertEqual(3, len(self.soledad.delete_doc.mock_calls)) + for doc in docs: + if doc.content['type'] in ['head', 'cnt', 'flags']: + self.soledad.delete_doc.assert_any_call(doc) + self.assertEqual(3, len(self.soledad.delete_doc.mock_calls)) - def _create_docs_of_type(self, type_list): - return [self._create_doc_type(t) for t in type_list] + def _create_docs_of_type(self, type_list): + return [self._create_doc_type(t) for t in type_list] - def _create_doc_type(self, doc_type): - doc = MagicMock(spec=SoledadDocument) - doc.content = {'type': doc_type} - return doc + def _create_doc_type(self, doc_type): + doc = MagicMock(spec=SoledadDocument) + doc.content = {'type': doc_type} + return doc - def test_load_mails_empty_path_list(self): - load_mails(self.args, []) + def test_load_mails_empty_path_list(self): + load_mails(self.args, []) - self.assertFalse(self.mailbox.called) + self.assertFalse(self.mailbox.called) - def test_load_mails_adds_mails(self): - mail_root = join(dirname(__file__), '..', 'fixtures', 'mailset') + def test_load_mails_adds_mails(self): + # given + mail_root = join(dirname(__file__), '..', 'fixtures', 'mailset') + firstMailDeferred = defer.Deferred() + secondMailDeferred = defer.Deferred() + self.mailbox.addMessage.side_effect = [firstMailDeferred, secondMailDeferred] - foo = load_mails(self.args, [mail_root]) + # when + d = load_mails(self.args, [mail_root]) + # then + def assert_mails_added(_): self.assertTrue(self.mailbox.addMessage.called) - self.mailbox.addMessage.assert_any_call(self._mail_content(join(mail_root, 'mbox00000000')), flags=("\\RECENT",), notify_on_disk=False) - self.mailbox.addMessage.assert_any_call(self._mail_content(join(mail_root, 'mbox00000001')), flags=("\\RECENT",), notify_on_disk=False) + self.mailbox.addMessage.assert_any_call(self._mail_content(join(mail_root, 'new', 'mbox00000000')), flags=(WithMsgFields.RECENT_FLAG,), notify_on_disk=False) + self.mailbox.addMessage.assert_any_call(self._mail_content(join(mail_root, 'new', 'mbox00000001')), flags=(WithMsgFields.RECENT_FLAG,), notify_on_disk=False) - def _mail_content(self, mail_file): - with open(mail_file, 'r') as fp: - m = email.message_from_file(fp) - return m.as_string() + def error_callack(err): + print err + self.assertTrue(False) + + d.addCallback(assert_mails_added) + d.addErrback(error_callack) + + # trigger callbacks for both mails + reactor.callLater(0, firstMailDeferred.callback, None) + reactor.callLater(0, secondMailDeferred.callback, None) + + return d + + def _mail_content(self, mail_file): + with open(mail_file, 'r') as fp: + m = email.message_from_file(fp) + return m.as_string() |