summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFolker Bernitt <fbernitt@thoughtworks.com>2015-08-03 11:17:32 +0200
committerFolker Bernitt <fbernitt@thoughtworks.com>2015-08-11 17:00:31 +0200
commit07df4eb5751d78189e60654a1b593bc8c7637521 (patch)
tree778f9ee32c855123abea1cddd78b06695f3ae32a
parent38d810d338ce671b6389cd47d665b87798bcd65c (diff)
Added move message in new data model.
-rw-r--r--service/pixelated/adapter/mailstore/leap_mailstore.py7
-rw-r--r--service/pixelated/adapter/mailstore/mailstore.py3
-rw-r--r--service/test/support/mockito/__init__.py40
-rw-r--r--service/test/unit/adapter/mailstore/test_leap_mailstore.py17
4 files changed, 65 insertions, 2 deletions
diff --git a/service/pixelated/adapter/mailstore/leap_mailstore.py b/service/pixelated/adapter/mailstore/leap_mailstore.py
index c1e9f0d8..87bfea04 100644
--- a/service/pixelated/adapter/mailstore/leap_mailstore.py
+++ b/service/pixelated/adapter/mailstore/leap_mailstore.py
@@ -126,7 +126,6 @@ class LeapMailStore(MailStore):
def copy_mail_to_mailbox(self, mail_id, mailbox_name):
message = yield self._fetch_msg_from_soledad(mail_id, load_body=True)
mailbox = yield self._get_or_create_mailbox(mailbox_name)
-
copy_wrapper = yield message.get_wrapper().copy(self.soledad, mailbox.uuid)
leap_message = Message(copy_wrapper)
@@ -135,6 +134,12 @@ class LeapMailStore(MailStore):
defer.returnValue(mail)
+ @defer.inlineCallbacks
+ def move_mail_to_mailbox(self, mail_id, mailbox_name):
+ mail_copy = yield self.copy_mail_to_mailbox(mail_id, mailbox_name)
+ yield self.delete_mail(mail_id)
+ defer.returnValue(mail_copy)
+
def _update_mail(self, message):
return message.get_wrapper().update(self.soledad)
diff --git a/service/pixelated/adapter/mailstore/mailstore.py b/service/pixelated/adapter/mailstore/mailstore.py
index 29d4fe67..425def92 100644
--- a/service/pixelated/adapter/mailstore/mailstore.py
+++ b/service/pixelated/adapter/mailstore/mailstore.py
@@ -49,6 +49,9 @@ class MailStore(object):
def copy_mail_to_mailbox(self, mail_id, mailbox_name):
pass
+ def move_mail_to_mailbox(self, mail_id, mailbox_name):
+ pass
+
def underscore_uuid(uuid):
return uuid.replace('-', '_')
diff --git a/service/test/support/mockito/__init__.py b/service/test/support/mockito/__init__.py
new file mode 100644
index 00000000..c8ffc55e
--- /dev/null
+++ b/service/test/support/mockito/__init__.py
@@ -0,0 +1,40 @@
+#
+# Copyright (c) 2015 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/>.
+from mockito.invocation import AnswerSelector, CompositeAnswer
+
+
+class FunctionReturn(object):
+ """
+ Instead of returning a constant value a function is called
+ """
+ def __init__(self, function_answer):
+ self.function_answer = function_answer
+
+ def answer(self):
+ return self.function_answer()
+
+
+def thenAnswer(self, answer_function):
+ """mockito does not support the thenAnswer style. This method monkey patches it into the library"""
+ if not self.answer:
+ self.answer = CompositeAnswer(FunctionReturn(answer_function))
+ self.invocation.stub_with(self.answer)
+ else:
+ self.answer.add(FunctionReturn(answer_function))
+
+ return self
+
+AnswerSelector.thenAnswer = thenAnswer
diff --git a/service/test/unit/adapter/mailstore/test_leap_mailstore.py b/service/test/unit/adapter/mailstore/test_leap_mailstore.py
index 322fa23d..92a4b63d 100644
--- a/service/test/unit/adapter/mailstore/test_leap_mailstore.py
+++ b/service/test/unit/adapter/mailstore/test_leap_mailstore.py
@@ -24,6 +24,7 @@ from twisted.trial.unittest import TestCase
from leap.mail import constants
from twisted.internet import defer
from mockito import mock, when, verify, any
+import test.support.mockito
from leap.mail.adaptors.soledad import SoledadMailAdaptor, MailboxWrapper
import pkg_resources
from leap.mail.mail import Message
@@ -246,6 +247,19 @@ class TestLeapMailStore(TestCase):
self._assert_message_docs_created(expected_message, mail, only_mdoc_and_fdoc=True)
+ @defer.inlineCallbacks
+ def test_move_to_mailbox(self):
+ expected_message = self._add_create_mail_mocks_to_soledad('mbox00000000')
+ mail_id, fdoc_id = self._add_mail_fixture_to_soledad('mbox00000000')
+ self._mock_get_mailbox('TRASH')
+ store = LeapMailStore(self.soledad)
+
+ mail = yield store.move_mail_to_mailbox(mail_id, 'TRASH')
+
+ self._assert_message_docs_created(expected_message, mail, only_mdoc_and_fdoc=True)
+ # verify(self.soledad).delete_doc(self.doc_by_id[mail_id])
+ # verify(self.soledad).delete_doc(self.doc_by_id[fdoc_id])
+
def _assert_message_docs_created(self, expected_message, actual_message, only_mdoc_and_fdoc=False):
wrapper = expected_message.get_wrapper()
@@ -311,7 +325,8 @@ class TestLeapMailStore(TestCase):
def _mock_soledad_doc(self, doc_id, doc):
soledad_doc = SoledadDocument(doc_id, json=json.dumps(doc.serialize()))
- when(self.soledad).get_doc(doc_id).thenReturn(defer.succeed(soledad_doc))
+ # when(self.soledad).get_doc(doc_id).thenReturn(defer.succeed(soledad_doc))
+ when(self.soledad).get_doc(doc_id).thenAnswer(lambda: defer.succeed(soledad_doc))
self.doc_by_id[doc_id] = soledad_doc