From c4c1f208629016d2bd3413d0dddedd2a699268e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Theys?= Date: Wed, 2 Sep 2020 10:00:40 +0000 Subject: [PATCH] [FIX] mail: prevent crash when switching mailbox in discuss mobile MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit task-2327203 closes odoo/odoo#56939 X-original-commit: 612a8f7edf3d01ec2b854839ee60be418cb141a7 Signed-off-by: Alexandre Kühn (aku) Signed-off-by: Sébastien Theys (seb) --- .../discuss_mobile_mailbox_selection.js | 6 +- .../discuss_mobile_mailbox_selection_tests.js | 98 +++++++++++++++++++ addons/mail/views/assets.xml | 6 ++ 3 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 addons/mail/static/src/components/discuss_mobile_mailbox_selection/discuss_mobile_mailbox_selection_tests.js diff --git a/addons/mail/static/src/components/discuss_mobile_mailbox_selection/discuss_mobile_mailbox_selection.js b/addons/mail/static/src/components/discuss_mobile_mailbox_selection/discuss_mobile_mailbox_selection.js index c2185a60dc0..d2fa4aa936a 100644 --- a/addons/mail/static/src/components/discuss_mobile_mailbox_selection/discuss_mobile_mailbox_selection.js +++ b/addons/mail/static/src/components/discuss_mobile_mailbox_selection/discuss_mobile_mailbox_selection.js @@ -73,7 +73,11 @@ class DiscussMobileMailboxSelection extends Component { * @param {MouseEvent} ev */ _onClick(ev) { - const { mailbox } = ev.currentTarget.dataset; + const { mailboxLocalId } = ev.currentTarget.dataset; + const mailbox = this.env.models['mail.thread'].get(mailboxLocalId); + if (!mailbox) { + return; + } mailbox.open(); } diff --git a/addons/mail/static/src/components/discuss_mobile_mailbox_selection/discuss_mobile_mailbox_selection_tests.js b/addons/mail/static/src/components/discuss_mobile_mailbox_selection/discuss_mobile_mailbox_selection_tests.js new file mode 100644 index 00000000000..261d8c4bf54 --- /dev/null +++ b/addons/mail/static/src/components/discuss_mobile_mailbox_selection/discuss_mobile_mailbox_selection_tests.js @@ -0,0 +1,98 @@ +odoo.define('mail/static/src/components/discuss_mobile_mailbox_selection/discuss_mobile_mailbox_selection_tests.js', function (require) { +'use strict'; + +const { + afterEach, + afterNextRender, + beforeEach, + start, +} = require('mail/static/src/utils/test_utils.js'); + +QUnit.module('mail', {}, function () { +QUnit.module('components', {}, function () { +QUnit.module('discuss_mobile_mailbox_selection', {}, function () { +QUnit.module('discuss_mobile_mailbox_selection_tests.js', { + beforeEach() { + beforeEach(this); + + this.start = async params => { + const { env, widget } = await start(Object.assign( + { + autoOpenDiscuss: true, + data: this.data, + env: { + browser: { + innerHeight: 640, + innerWidth: 360, + }, + device: { + isMobile: true, + }, + }, + hasDiscuss: true, + }, + params, + )); + this.env = env; + this.widget = widget; + }; + }, + afterEach() { + afterEach(this); + }, +}); + +QUnit.test('select another mailbox', async function (assert) { + assert.expect(7); + + await this.start(); + assert.containsOnce( + document.body, + '.o_Discuss', + "should display discuss initially" + ); + assert.hasClass( + document.querySelector('.o_Discuss'), + 'o-mobile', + "discuss should be opened in mobile mode" + ); + assert.containsOnce( + document.body, + '.o_Discuss_thread', + "discuss should display a thread initially" + ); + assert.strictEqual( + document.querySelector('.o_Discuss_thread').dataset.threadLocalId, + this.env.messaging.inbox.localId, + "inbox mailbox should be opened initially" + ); + assert.containsOnce( + document.body, + `.o_DiscussMobileMailboxSelection_button[ + data-mailbox-local-id="${this.env.messaging.starred.localId}" + ]`, + "should have a button to open starred mailbox" + ); + + await afterNextRender(() => + document.querySelector(`.o_DiscussMobileMailboxSelection_button[ + data-mailbox-local-id="${this.env.messaging.starred.localId}"] + `).click() + ); + assert.containsOnce( + document.body, + '.o_Discuss_thread', + "discuss should still have a thread after clicking on starred mailbox" + ); + assert.strictEqual( + document.querySelector('.o_Discuss_thread').dataset.threadLocalId, + this.env.messaging.starred.localId, + "starred mailbox should be opened after clicking on it" + ); +}); + +}); +}); +}); + +}); diff --git a/addons/mail/views/assets.xml b/addons/mail/views/assets.xml index 1b8d194df66..fce138c7ca4 100644 --- a/addons/mail/views/assets.xml +++ b/addons/mail/views/assets.xml @@ -296,5 +296,11 @@