From 41e0543932012d31e192ebfbfeebf8461d137c76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20K=C3=BChn?= Date: Fri, 14 Apr 2023 14:53:10 +0000 Subject: [PATCH] [FIX] mail: no crash on receiving link preview of non-known message MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This notification makes sense when we know this message. If we don't know it yet, then we should just ignore and receive data of link preview when fetching the message. closes odoo/odoo#118647 Signed-off-by: Alexandre Kühn (aku) --- .../mail/static/src/core/messaging_service.js | 2 +- .../mock_server/controllers/discuss.js | 4 +++- .../static/tests/message/link_preview_test.js | 24 ++++++++++++++++++- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/addons/mail/static/src/core/messaging_service.js b/addons/mail/static/src/core/messaging_service.js index e94d1f538a6..2eef3a96a0a 100644 --- a/addons/mail/static/src/core/messaging_service.js +++ b/addons/mail/static/src/core/messaging_service.js @@ -603,7 +603,7 @@ export class Messaging { const { LinkPreview: linkPreviews } = notif.payload; if (linkPreviews) { for (const linkPreview of linkPreviews) { - this.store.messages[linkPreview.message.id].linkPreviews.push( + this.store.messages[linkPreview.message.id]?.linkPreviews.push( new LinkPreview(linkPreview) ); } diff --git a/addons/mail/static/tests/helpers/mock_server/controllers/discuss.js b/addons/mail/static/tests/helpers/mock_server/controllers/discuss.js index e49443852c8..088271f5e4b 100644 --- a/addons/mail/static/tests/helpers/mock_server/controllers/discuss.js +++ b/addons/mail/static/tests/helpers/mock_server/controllers/discuss.js @@ -283,7 +283,9 @@ patch(MockServer.prototype, "mail/controllers/discuss", { if (message.model === "mail.channel") { target = this.pyEnv["mail.channel"].search([["id", "=", message.res_id]]); } - this.pyEnv["bus.bus"]._sendmany([[target, "mail.link.preview/insert", linkPreviews]]); + this.pyEnv["bus.bus"]._sendmany([ + [target, "mail.record/insert", { LinkPreview: linkPreviews }], + ]); } }, /** diff --git a/addons/mail/static/tests/message/link_preview_test.js b/addons/mail/static/tests/message/link_preview_test.js index 886bd2c618d..b7346333e64 100644 --- a/addons/mail/static/tests/message/link_preview_test.js +++ b/addons/mail/static/tests/message/link_preview_test.js @@ -1,6 +1,6 @@ /** @odoo-module **/ -import { click, start, startServer } from "@mail/../tests/helpers/test_utils"; +import { click, nextAnimationFrame, start, startServer } from "@mail/../tests/helpers/test_utils"; QUnit.module("link preview"); @@ -240,3 +240,25 @@ QUnit.test("Remove link preview image", async (assert) => { await click(".modal-footer button:contains(Ok)"); assert.containsNone($, ".o-mail-LinkPreviewImage"); }); + +QUnit.test("No crash on receiving link preview of non-known message", async (assert) => { + const pyEnv = await startServer(); + const linkPreviewId = pyEnv["mail.link.preview"].create({ + image_mimetype: "image/jpg", + source_url: + "https://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Siberischer_tiger_de_edit02.jpg/290px-Siberischer_tiger_de_edit02.jpg", + }); + const channelId = pyEnv["mail.channel"].create({ name: "wololo" }); + const messageId = pyEnv["mail.message"].create({ + body: "https://make-link-preview.com", + link_preview_ids: [linkPreviewId], + message_type: "comment", + model: "mail.channel", + res_id: channelId, + }); + const { env, openDiscuss } = await start(); + await openDiscuss(); + env.services.rpc("/mail/link_preview", { message_id: messageId }); + await nextAnimationFrame(); + assert.ok(true); +});