diff --git a/addons/mail/static/src/core/common/link_preview_model.js b/addons/mail/static/src/core/common/link_preview_model.js index 696810e37df..b484c927c80 100644 --- a/addons/mail/static/src/core/common/link_preview_model.js +++ b/addons/mail/static/src/core/common/link_preview_model.js @@ -9,13 +9,14 @@ export class LinkPreview extends Record { * @returns {LinkPreview} */ static insert(data) { - let linkPreview = data.message.linkPreviews.find((lp) => lp.id === data.id); + const message = this.store.Message.get(data.message.id); + let linkPreview = message?.linkPreviews.find((lp) => lp.id === data.id); if (linkPreview) { return Object.assign(linkPreview, data); } linkPreview = this.new(data); Object.assign(linkPreview, data); - this.store.Message.get(data.message.id)?.linkPreviews.push(linkPreview); + message?.linkPreviews.push(linkPreview); return linkPreview; } diff --git a/addons/mail/static/src/core/common/mail_core_common_service.js b/addons/mail/static/src/core/common/mail_core_common_service.js index 15d2f83e037..1acfe607acd 100644 --- a/addons/mail/static/src/core/common/mail_core_common_service.js +++ b/addons/mail/static/src/core/common/mail_core_common_service.js @@ -100,9 +100,7 @@ export class MailCoreCommon { const { LinkPreview: linkPreviews } = payload; if (linkPreviews) { for (const linkPreview of linkPreviews) { - this.store.Message.get(linkPreview.message.id)?.linkPreviews.push( - this.store.LinkPreview.insert(linkPreview) - ); + this.store.LinkPreview.insert(linkPreview); } } const { Message: messageData } = payload; 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 578c8870d8b..3d346c3f1f7 100644 --- a/addons/mail/static/tests/helpers/mock_server/controllers/discuss.js +++ b/addons/mail/static/tests/helpers/mock_server/controllers/discuss.js @@ -281,7 +281,7 @@ patch(MockServer.prototype, { _mockRouteMailLinkPreview(message_id, clear = false) { const linkPreviews = []; const [message] = this.pyEnv["mail.message"].searchRead([["id", "=", message_id]]); - if (message.body === "https://make-link-preview.com") { + if (message.body.includes("https://make-link-preview.com")) { if (clear) { const [linkPreview] = this.pyEnv["mail.link.preview"].searchRead([ ["message_id", "=", message_id], @@ -297,6 +297,7 @@ patch(MockServer.prototype, { } const linkPreviewId = this.pyEnv["mail.link.preview"].create({ + message_id: message.id, og_description: "test description", og_title: "Article title", og_type: "article", diff --git a/addons/mail/static/tests/helpers/mock_server/models/mail_link_preview.js b/addons/mail/static/tests/helpers/mock_server/models/mail_link_preview.js index 2a161104199..81de4b7edde 100644 --- a/addons/mail/static/tests/helpers/mock_server/models/mail_link_preview.js +++ b/addons/mail/static/tests/helpers/mock_server/models/mail_link_preview.js @@ -13,7 +13,7 @@ patch(MockServer.prototype, { _mockMailLinkPreviewFormat(linkPreview) { return { id: linkPreview.id, - message: { id: linkPreview.message_id }, + message: { id: linkPreview.message_id[0] }, image_mimetype: linkPreview.image_mimetype, og_description: linkPreview.og_description, og_image: linkPreview.og_image, diff --git a/addons/mail/static/tests/message/link_preview_test.js b/addons/mail/static/tests/message/link_preview_test.js index 92b3a365e58..9ffd48e9c77 100644 --- a/addons/mail/static/tests/message/link_preview_test.js +++ b/addons/mail/static/tests/message/link_preview_test.js @@ -3,6 +3,7 @@ import { click, contains, + insertText, nextAnimationFrame, start, startServer, @@ -342,3 +343,13 @@ QUnit.test( await contains(".o-mail-Message-bubble"); } ); + +QUnit.test("Sending message with link preview URL should show a link preview card", async () => { + const pyEnv = await startServer(); + const channelId = pyEnv["discuss.channel"].create({ name: "wololo" }); + const { openDiscuss } = await start(); + openDiscuss(channelId); + await insertText(".o-mail-Composer-input", "https://make-link-preview.com"); + await click("button:not([disabled])", { text: "Send" }); + await contains(".o-mail-LinkPreviewCard"); +});