From ba1d6edfc144c0549e88392a8414a147a9f30931 Mon Sep 17 00:00:00 2001 From: Folker Bernitt Date: Tue, 21 Jul 2015 14:48:52 +0000 Subject: Fixed MarkAsReadUnreadTest#test_mark_single_as_read and underlying implementation. --- service/pixelated/adapter/model/mail.py | 15 +++++++++------ service/pixelated/adapter/services/mail_service.py | 8 +++++--- service/pixelated/resources/mails_resource.py | 10 ++++++++-- service/test/integration/test_mark_as_read_unread.py | 11 +++++++---- service/test/support/integration/app_test_client.py | 2 +- 5 files changed, 30 insertions(+), 16 deletions(-) diff --git a/service/pixelated/adapter/model/mail.py b/service/pixelated/adapter/model/mail.py index dd32d665..5002974f 100644 --- a/service/pixelated/adapter/model/mail.py +++ b/service/pixelated/adapter/model/mail.py @@ -426,18 +426,21 @@ class PixelatedMail(Mail): yield self._persist_mail_tags(tags) defer.returnValue(self.tags) + @defer.inlineCallbacks def mark_as_read(self): if Status.SEEN in self.flags: - return self - self.flags.append(Status.SEEN) - self.save() - return self + defer.returnValue(self) + else: + self.flags.append(Status.SEEN) + yield self.save() + defer.returnValue(self) + @defer.inlineCallbacks def mark_as_unread(self): if Status.SEEN in self.flags: self.flags.remove(Status.SEEN) - self.save() - return self + yield self.save() + defer.returnValue(self) def mark_as_not_recent(self): if Status.RECENT in self.flags: diff --git a/service/pixelated/adapter/services/mail_service.py b/service/pixelated/adapter/services/mail_service.py index a22ca394..91eeb28f 100644 --- a/service/pixelated/adapter/services/mail_service.py +++ b/service/pixelated/adapter/services/mail_service.py @@ -88,13 +88,15 @@ class MailService(object): yield (yield self.mailboxes.drafts).remove(last_draft_ident) defer.returnValue((yield (yield self.mailboxes.sent).add(mail))) + @defer.inlineCallbacks def mark_as_read(self, mail_id): - mail = self.mail(mail_id) - mail.mark_as_read() + mail = yield self.mail(mail_id) + yield mail.mark_as_read() self.search_engine.index_mail(mail) + @defer.inlineCallbacks def mark_as_unread(self, mail_id): - mail = self.mail(mail_id) + mail = yield self.mail(mail_id) mail.mark_as_unread() self.search_engine.index_mail(mail) diff --git a/service/pixelated/resources/mails_resource.py b/service/pixelated/resources/mails_resource.py index ef112900..0651a909 100644 --- a/service/pixelated/resources/mails_resource.py +++ b/service/pixelated/resources/mails_resource.py @@ -5,6 +5,7 @@ from twisted.web.server import NOT_DONE_YET from pixelated.resources import respond_json, respond_json_deferred from twisted.web.resource import Resource from twisted.web import server +from twisted.internet import defer from leap.common.events import ( register, catalog as events @@ -34,10 +35,15 @@ class MailsReadResource(Resource): def render_POST(self, request): idents = json.load(request.content).get('idents') + deferreds = [] for ident in idents: - self._mail_service.mark_as_read(ident) + deferreds.append(self._mail_service.mark_as_read(ident)) - return respond_json(None, request) + d = defer.gatherResults(deferreds, consumeErrors=True) + d.addCallback(lambda _: respond_json_deferred(None, request)) + d.addErrback(lambda _: respond_json_deferred(None, request, status_code=500)) + + return NOT_DONE_YET class MailsDeleteResource(Resource): diff --git a/service/test/integration/test_mark_as_read_unread.py b/service/test/integration/test_mark_as_read_unread.py index 6119f121..896a51d1 100644 --- a/service/test/integration/test_mark_as_read_unread.py +++ b/service/test/integration/test_mark_as_read_unread.py @@ -14,22 +14,25 @@ # You should have received a copy of the GNU Affero General Public License # along with Pixelated. If not, see . +from twisted.internet import defer + from test.support.integration import SoledadTestBase, MailBuilder from pixelated.adapter.model.status import Status class MarkAsReadUnreadTest(SoledadTestBase): + @defer.inlineCallbacks def test_mark_single_as_read(self): input_mail = MailBuilder().build_input_mail() - self.add_mail_to_inbox(input_mail) + yield self.add_mail_to_inbox(input_mail) - mails = self.get_mails_by_tag('inbox') + mails = yield self.get_mails_by_tag('inbox') self.assertNotIn('read', mails[0].status) - self.mark_many_as_read([input_mail.ident]) + yield self.mark_many_as_read([input_mail.ident]) - mails = self.get_mails_by_tag('inbox') + mails = yield self.get_mails_by_tag('inbox') self.assertIn('read', mails[0].status) def test_mark_single_as_unread(self): diff --git a/service/test/support/integration/app_test_client.py b/service/test/support/integration/app_test_client.py index e139d879..a76d4948 100644 --- a/service/test/support/integration/app_test_client.py +++ b/service/test/support/integration/app_test_client.py @@ -214,7 +214,7 @@ class AppTestClient(object): def mark_many_as_read(self, idents): res, req = self.post('/mails/read', json.dumps({'idents': idents})) - return req + return res def get_contacts(self, query): res, req = self.get('/contacts', get_args={'q': query}) -- cgit v1.2.3