diff --git a/addons/mail/models/mail_thread.py b/addons/mail/models/mail_thread.py index c83d4ae8705..ed0e9145344 100644 --- a/addons/mail/models/mail_thread.py +++ b/addons/mail/models/mail_thread.py @@ -589,6 +589,14 @@ class MailThread(models.AbstractModel): def _message_track_post_template(self, changes): if not changes: return True + # Clean the context to get rid of residual default_* keys + # that could cause issues afterward during the mail.message + # generation. Example: 'default_parent_id' would refer to + # the parent_id of the current record that was used during + # its creation, but could refer to wrong parent message id, + # leading to a traceback in case the related message_id + # doesn't exist + self = self.with_context(clean_context(self._context)) templates = self._track_template(changes) for field_name, (template, post_kwargs) in templates.items(): if not template: diff --git a/addons/test_mail/tests/test_message_track.py b/addons/test_mail/tests/test_message_track.py index 61d64a70abe..1c5d19aded4 100644 --- a/addons/test_mail/tests/test_message_track.py +++ b/addons/test_mail/tests/test_message_track.py @@ -206,3 +206,52 @@ class TestTracking(TestMailCommon): new_partner = Partner.search([('email', '=', email_new_partner)]) self.assertTrue(new_partner) self.assertEqual(new_partner.company_id, company1) + + def test_track_template(self): + # Test: Check that default_* keys are not taken into account in _message_track_post_template + magic_code = 'Up-Up-Down-Down-Left-Right-Left-Right-Square-Triangle' + + mt_name_changed = self.env['mail.message.subtype'].create({ + 'name': 'MAGIC CODE WOOP WOOP', + 'description': 'SPECIAL CONTENT UNLOCKED' + }) + self.env['ir.model.data'].create({ + 'name': 'mt_name_changed', + 'model': 'mail.message.subtype', + 'module': 'mail', + 'res_id': mt_name_changed.id + }) + mail_template = self.env['mail.template'].create({ + 'name': 'SPECIAL CONTENT UNLOCKED', + 'subject': 'SPECIAL CONTENT UNLOCKED', + 'model_id': self.env.ref('test_mail.model_mail_test').id, + 'auto_delete': True, + 'body_html': '''