From 8e57412dcd7fe8749ebed645e048309618ed01b5 Mon Sep 17 00:00:00 2001 From: Duda Dornelles Date: Thu, 18 Dec 2014 14:36:10 -0200 Subject: \#203 & #204 & #205: fixing client and api for buld mark as read/unread and delete, functional tests are still broken, investigating... --- service/pixelated/config/routes.py | 4 +--- service/pixelated/controllers/mails_controller.py | 10 --------- service/test/integration/delete_mail_test.py | 2 +- .../test/integration/mark_as_read_unread_test.py | 4 ++-- .../test/support/integration/soledad_test_base.py | 10 +-------- .../test/unit/controllers/mails_controller_test.py | 15 ++++++++------ web-ui/app/js/services/mail_service.js | 24 +++++++++++----------- web-ui/test/spec/services/mail_service.spec.js | 5 +++-- 8 files changed, 29 insertions(+), 45 deletions(-) diff --git a/service/pixelated/config/routes.py b/service/pixelated/config/routes.py index 334119fc..5efbbb28 100644 --- a/service/pixelated/config/routes.py +++ b/service/pixelated/config/routes.py @@ -2,13 +2,11 @@ def setup_routes(app, home_controller, mails_controller, tags_controller, featur attachments_controller, contacts_controller): # mails app.route('/mails', methods=['GET'])(mails_controller.mails) - app.route('/mail//read', methods=['POST'])(mails_controller.mark_mail_as_read) - app.route('/mail//unread', methods=['POST'])(mails_controller.mark_mail_as_unread) app.route('/mails/unread', methods=['POST'])(mails_controller.mark_many_mail_unread) app.route('/mails/read', methods=['POST'])(mails_controller.mark_many_mail_read) app.route('/mail/', methods=['GET'])(mails_controller.mail) app.route('/mail/', methods=['DELETE'])(mails_controller.delete_mail) - app.route('/mails', methods=['DELETE'])(mails_controller.delete_mails) + app.route('/mails/delete', methods=['POST'])(mails_controller.delete_mails) app.route('/mails', methods=['POST'])(mails_controller.send_mail) app.route('/mail//tags', methods=['POST'])(mails_controller.mail_tags) app.route('/mails', methods=['PUT'])(mails_controller.update_draft) diff --git a/service/pixelated/controllers/mails_controller.py b/service/pixelated/controllers/mails_controller.py index 7166a51d..eba97784 100644 --- a/service/pixelated/controllers/mails_controller.py +++ b/service/pixelated/controllers/mails_controller.py @@ -44,16 +44,6 @@ class MailsController: mail = self._mail_service.mail(mail_id) return respond_json(mail.as_dict(), request) - def mark_mail_as_read(self, request, mail_id): - mail = self._mail_service.mark_as_read(mail_id) - self._search_engine.index_mail(mail) - return "" - - def mark_mail_as_unread(self, request, mail_id): - mail = self._mail_service.mark_as_unread(mail_id) - self._search_engine.index_mail(mail) - return "" - def mark_many_mail_unread(self, request): content_dict = json.load(request.content) idents = content_dict.get('idents') diff --git a/service/test/integration/delete_mail_test.py b/service/test/integration/delete_mail_test.py index 28f55840..5a3a97fb 100644 --- a/service/test/integration/delete_mail_test.py +++ b/service/test/integration/delete_mail_test.py @@ -41,7 +41,7 @@ class DeleteMailTest(SoledadTestBase): def test_delete_mail_when_trashing_mail_from_trash_mailbox(self): mails = self.client.add_multiple_to_mailbox(1, 'trash') - self.delete_mail(mails[0].ident) + self.delete_mails([mails[0].ident]) trash_mails = self.get_mails_by_tag('trash') diff --git a/service/test/integration/mark_as_read_unread_test.py b/service/test/integration/mark_as_read_unread_test.py index 55467e9e..03da404f 100644 --- a/service/test/integration/mark_as_read_unread_test.py +++ b/service/test/integration/mark_as_read_unread_test.py @@ -33,7 +33,7 @@ class MarkAsReadUnreadTest(SoledadTestBase): mails = self.get_mails_by_tag('inbox') self.assertNotIn('read', mails[0].status) - self.mark_as_read(input_mail.ident) + self.mark_many_as_read([input_mail.ident]) mails = self.get_mails_by_tag('inbox') self.assertIn('read', mails[0].status) @@ -42,7 +42,7 @@ class MarkAsReadUnreadTest(SoledadTestBase): input_mail = MailBuilder().with_status([Status.SEEN]).build_input_mail() self.client.add_mail_to_inbox(input_mail) - self.mark_as_unread(input_mail.ident) + self.mark_many_as_unread([input_mail.ident]) mail = self.get_mails_by_tag('inbox')[0] self.assertNotIn('read', mail.status) diff --git a/service/test/support/integration/soledad_test_base.py b/service/test/support/integration/soledad_test_base.py index a000349e..6368d3e8 100644 --- a/service/test/support/integration/soledad_test_base.py +++ b/service/test/support/integration/soledad_test_base.py @@ -71,15 +71,7 @@ class SoledadTestBase(unittest.TestCase): return req def delete_mails(self, idents): - res, req = self.client.delete("/mails", json.dumps({'idents': idents})) - return req - - def mark_as_read(self, mail_ident): - res, req = self.client.post("/mail/%s/read" % mail_ident) - return req - - def mark_as_unread(self, mail_ident): - res, req = self.client.post("/mail/%s/unread" % mail_ident) + res, req = self.client.post("/mails/delete", json.dumps({'idents': idents})) return req def mark_many_as_unread(self, idents): diff --git a/service/test/unit/controllers/mails_controller_test.py b/service/test/unit/controllers/mails_controller_test.py index ab87c205..c9c2c7cf 100644 --- a/service/test/unit/controllers/mails_controller_test.py +++ b/service/test/unit/controllers/mails_controller_test.py @@ -15,6 +15,7 @@ # along with Pixelated. If not, see . import json import unittest +from io import BytesIO from klein.test_resource import requestMock from mock import MagicMock @@ -77,22 +78,24 @@ class TestMailsController(unittest.TestCase): def test_marking_mail_as_read_set_mail_as_read_on_the_service(self): mail = mock() - when(self.mail_service).mark_as_read(1).thenReturn(mail) + when(self.mail_service).mark_as_read("1").thenReturn(mail) when(self.search_engine).index_mail(mail).thenReturn(None) + self.dummy_request.content = BytesIO('{"idents":["1"]}') - self.mails_controller.mark_mail_as_read(None, 1) + self.mails_controller.mark_many_mail_read(self.dummy_request) - verify(self.mail_service).mark_as_read(1) + verify(self.mail_service).mark_as_read(u'1') verify(self.search_engine).index_mail(mail) def test_marking_mail_as_unread_set_mail_as_unread_on_the_service(self): mail = mock() - when(self.mail_service).mark_as_unread(1).thenReturn(mail) + when(self.mail_service).mark_as_unread("1").thenReturn(mail) when(self.search_engine).index_mail(mail).thenReturn(None) + self.dummy_request.content = BytesIO('{"idents":["1"]}') - self.mails_controller.mark_mail_as_unread(None, 1) + self.mails_controller.mark_many_mail_unread(self.dummy_request) - verify(self.mail_service).mark_as_unread(1) + verify(self.mail_service).mark_as_unread(u'1') verify(self.search_engine).index_mail(mail) def test_move_message_to_trash(self): diff --git a/web-ui/app/js/services/mail_service.js b/web-ui/app/js/services/mail_service.js index 58b70ed7..24bceb31 100644 --- a/web-ui/app/js/services/mail_service.js +++ b/web-ui/app/js/services/mail_service.js @@ -80,13 +80,13 @@ define( mailIdents = _.map(data.checkedMails, function (mail) { return mail.ident; }); - monitoredAjax(this, '/mails/read', { - type: 'POST', - data: {idents: JSON.stringify(mailIdents)} - }).done(this.triggerMailsRead(data.checkedMails)); } else { - monitoredAjax(this, '/mail/' + data.ident + '/read', {type: 'POST'}); + mailIdents = [data.ident]; } + monitoredAjax(this, '/mails/read', { + type: 'POST', + data: JSON.stringify({idents: mailIdents}) + }).done(this.triggerMailsRead(data.checkedMails)); }; this.unreadMail = function (ev, data) { @@ -95,13 +95,13 @@ define( mailIdents = _.map(data.checkedMails, function (mail) { return mail.ident; }); - monitoredAjax(this, '/mails/unread', { - type: 'POST', - data: {idents: JSON.stringify(mailIdents)} - }).done(this.triggerMailsRead(data.checkedMails)); } else { - monitoredAjax(this, '/mail/' + data.ident + '/read', {type: 'POST'}); + mailIdents = [data.ident]; } + monitoredAjax(this, '/mails/unread', { + type: 'POST', + data: JSON.stringify({idents: mailIdents}) + }).done(this.triggerMailsRead(data.checkedMails)); }; this.triggerMailsRead = function (mails) { @@ -137,8 +137,8 @@ define( return mail.ident; }); - monitoredAjax(this, '/mails', { - type: 'DELETE', + monitoredAjax(this, '/mails/delete', { + type: 'POST', dataType: 'json', contentType: 'application/json; charset=utf-8', data: JSON.stringify({idents: mailIdents}) diff --git a/web-ui/test/spec/services/mail_service.spec.js b/web-ui/test/spec/services/mail_service.spec.js index be10b934..55ca81c0 100644 --- a/web-ui/test/spec/services/mail_service.spec.js +++ b/web-ui/test/spec/services/mail_service.spec.js @@ -18,7 +18,8 @@ describeComponent('services/mail_service', function () { this.component.trigger(Pixelated.events.mail.read, {ident: 1}); - expect(readRequest.calls.mostRecent().args[0]).toEqual('/mail/1/read'); + expect(readRequest.calls.mostRecent().args[0]).toEqual('/mails/read'); + expect(readRequest.calls.mostRecent().args[1].data).toEqual('{"idents":[1]}'); }); describe('when marks many emails as read', function () { @@ -42,7 +43,7 @@ describeComponent('services/mail_service', function () { it('makes the correct request to the backend', function () { expect(readRequest.calls.mostRecent().args[0]).toEqual('/mails/read'); - expect(readRequest.calls.mostRecent().args[1].data).toEqual({idents: '[1,2]'}); + expect(readRequest.calls.mostRecent().args[1].data).toEqual('{"idents":[1,2]}') }); it('will trigger that a message has been deleted when it is done deleting', function() { -- cgit v1.2.3