From 337397eec5570fc9b3938d655a1ec0e4efcd73d9 Mon Sep 17 00:00:00 2001 From: "Didier (did)" Date: Fri, 11 Dec 2020 09:34:01 +0000 Subject: [FIX] mail: clean sub-queries when searching error message MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Thread search with `message_has_error` should only return threads containing messages with failure of which the current user is author. Follow up on https://github.com/odoo/odoo/pull/52403 that changed how sub-queries were built. The current fix using `_search` is a non-ideal solution until task-2366651 brings a new domain operator for this use case. task-2409543 closes odoo/odoo#62813 Signed-off-by: Sébastien Theys (seb) --- .../test_mail/tests/test_mail_thread_internals.py | 23 ++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'addons/test_mail') diff --git a/addons/test_mail/tests/test_mail_thread_internals.py b/addons/test_mail/tests/test_mail_thread_internals.py index ee44cb43756..afdf252210c 100644 --- a/addons/test_mail/tests/test_mail_thread_internals.py +++ b/addons/test_mail/tests/test_mail_thread_internals.py @@ -167,6 +167,29 @@ class TestDiscuss(TestMailCommon, TestRecipients): messages = self.env['mail.message'].with_user(user2).message_fetch(domain=[['needaction', '=', True]]) self.assertEqual(len(messages), 2) + def test_notification_has_error_filter(self): + """Ensure message_has_error filter is only returning threads for which + the current user is author of a failed message.""" + message = self.test_record.with_user(self.user_admin).message_post( + body='Test', message_type='comment', subtype_xmlid='mail.mt_comment', + partner_ids=[self.user_employee.partner_id.id] + ) + self.assertFalse(message.has_error) + with self.mock_mail_gateway(sim_error='connect_smtp_notfound'): + self.user_admin.notification_type = 'email' + message2 = self.test_record.with_user(self.user_employee).message_post( + body='Test', message_type='comment', subtype_xmlid='mail.mt_comment', + partner_ids=[self.user_admin.partner_id.id] + ) + self.assertTrue(message2.has_error) + # employee is author of message which has a failure + threads_employee = self.test_record.with_user(self.user_employee).search([('message_has_error', '=', True)]) + self.assertEqual(len(threads_employee), 1) + # admin is also author of a message, but it doesn't have a failure + # and the failure from employee's message should not be taken into account for admin + threads_admin = self.test_record.with_user(self.user_admin).search([('message_has_error', '=', True)]) + self.assertEqual(len(threads_admin), 0) + @tagged('-at_install', 'post_install') class TestMultiCompany(HttpCase): -- cgit v1.2.3