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); +});