summaryrefslogtreecommitdiff
path: root/service/test/unit
diff options
context:
space:
mode:
Diffstat (limited to 'service/test/unit')
-rw-r--r--service/test/unit/adapter/test_mail_service.py10
-rw-r--r--service/test/unit/adapter/test_mailboxes.py40
-rw-r--r--service/test/unit/fixtures/mailset/cur/.keep0
-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/.keep0
-rw-r--r--service/test/unit/maintenance/test_commands.py110
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()