When using message_post, the body format must be explicitly specified. If html is expected, a Markup object should be used. If text is given, the content will be escaped. Before this PR: message_post was unaware if the content of a message was HTML or text. This lead to multiple situation where the content was incorrectly considered as HTML and led to display errors. In self.message_post(body="Hello %s!" % self.name) if the name contained HTML, it would be evaluated. In self.message_post(body="Contact Raoul <raoul@caramail.be>") the email would not be displayed as considered as unknown HTML and discarded by the sanitizer Now each call must explict the type of content. Use the escape() helper to properly combine Markup and translations. It would also be acceptable to use Markup() to wrap a static translation but escape is better as one can not guarantee the content of a translation. closes odoo/odoo#111850 Related: odoo/documentation#3612 Related: odoo/enterprise#36728 Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
86 lines
3.6 KiB
Python
86 lines
3.6 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from markupsafe import Markup
|
|
|
|
from odoo import Command
|
|
from odoo.tests.common import users, tagged, TransactionCase
|
|
|
|
|
|
@tagged('post_install', '-at_install')
|
|
class TestImLivechatMessage(TransactionCase):
|
|
def setUp(self):
|
|
super().setUp()
|
|
self.users = self.env['res.users'].create([
|
|
{
|
|
'email': 'e.e@example.com',
|
|
'groups_id': [Command.link(self.env.ref('base.group_user').id)],
|
|
'login': 'emp',
|
|
'name': 'Ernest Employee',
|
|
'notification_type': 'inbox',
|
|
'odoobot_state': 'disabled',
|
|
'signature': '--\nErnest',
|
|
},
|
|
{'name': 'test1', 'login': 'test1', 'email': 'test1@example.com'},
|
|
])
|
|
|
|
@users('emp')
|
|
def test_message_format(self):
|
|
im_livechat_channel = self.env['im_livechat.channel'].sudo().create({'name': 'support', 'user_ids': [Command.link(self.users[0].id)]})
|
|
self.users[0].im_status = 'online' # make available for livechat (ignore leave)
|
|
channel_livechat_1 = self.env['mail.channel'].browse(im_livechat_channel._open_livechat_mail_channel(anonymous_name='anon 1', previous_operator_id=self.users[0].partner_id.id, user_id=self.users[1].id, country_id=self.env.ref('base.in').id)['id'])
|
|
record_rating = self.env['rating.rating'].create({
|
|
'res_model_id': self.env['ir.model']._get('mail.channel').id,
|
|
'res_id': channel_livechat_1.id,
|
|
'parent_res_model_id': self.env['ir.model']._get('im_livechat.channel').id,
|
|
'parent_res_id': im_livechat_channel.id,
|
|
'rated_partner_id': self.users[0].partner_id.id,
|
|
'partner_id': self.users[1].partner_id.id,
|
|
'rating': 5,
|
|
'consumed': True,
|
|
})
|
|
message = channel_livechat_1.message_post(
|
|
author_id=record_rating.partner_id.id,
|
|
body=Markup("<img src='%s' alt=':%s/5' style='width:18px;height:18px;float:left;margin-right: 5px;'/>%s")
|
|
% (record_rating.rating_image_url, record_rating.rating, record_rating.feedback),
|
|
rating_id=record_rating.id,
|
|
)
|
|
self.assertEqual(message.message_format(), [{
|
|
'attachment_ids': [],
|
|
'author': {
|
|
'id': self.users[1].partner_id.id,
|
|
'name': "test1",
|
|
},
|
|
'body': message.body,
|
|
'date': message.date,
|
|
'guestAuthor': [('clear',)],
|
|
'history_partner_ids': [],
|
|
'id': message.id,
|
|
'default_subject': channel_livechat_1.name,
|
|
'is_discussion': False,
|
|
'is_note': True,
|
|
'linkPreviews': [],
|
|
'message_type': 'notification',
|
|
'messageReactionGroups': [],
|
|
'model': 'mail.channel',
|
|
'module_icon': '/mail/static/description/icon.png',
|
|
'needaction_partner_ids': [],
|
|
'notifications': [],
|
|
'pinned_at': False,
|
|
'rating': {
|
|
'id': record_rating.id,
|
|
'ratingImageUrl': record_rating.rating_image_url,
|
|
'ratingText': record_rating.rating_text,
|
|
},
|
|
'recipients': [],
|
|
'record_name': "test1 Ernest Employee",
|
|
'res_id': channel_livechat_1.id,
|
|
'scheduledDatetime': False,
|
|
'sms_ids': [],
|
|
'starred_partner_ids': [],
|
|
'subject': False,
|
|
'subtype_description': False,
|
|
'subtype_id': (self.env.ref('mail.mt_note').id, 'Note'),
|
|
'trackingValues': [],
|
|
}])
|