We don't want to notify inactive followers, especially in the case of oddobot that was considered as a inactive partner in _notify_compute_recipients. The computed recipient data for odoobot are (pid:2 active:False pshare:True notif:None) It was considered as a partner and notified by email. This fix simply removes inactive partner from partner to notify. closes odoo/odoo#31734 Signed-off-by: Toufik Benjaa (tbe) <tbe@odoo.com>
163 lines
9.5 KiB
Python
163 lines
9.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo.addons.test_mail.tests.common import BaseFunctionalTest, TestRecipients, MockEmails
|
|
from odoo.addons.test_mail.tests.common import mail_new_test_user
|
|
|
|
|
|
class TestChatterTweaks(BaseFunctionalTest, TestRecipients):
|
|
|
|
def test_post_no_subscribe_author(self):
|
|
original = self.test_record.message_follower_ids
|
|
self.test_record.sudo(self.user_employee).with_context({'mail_create_nosubscribe': True}).message_post(
|
|
body='Test Body', message_type='comment', subtype='mt_comment')
|
|
self.assertEqual(self.test_record.message_follower_ids.mapped('partner_id'), original.mapped('partner_id'))
|
|
self.assertEqual(self.test_record.message_follower_ids.mapped('channel_id'), original.mapped('channel_id'))
|
|
|
|
def test_post_no_subscribe_recipients(self):
|
|
original = self.test_record.message_follower_ids
|
|
self.test_record.sudo(self.user_employee).with_context({'mail_create_nosubscribe': True}).message_post(
|
|
body='Test Body', message_type='comment', subtype='mt_comment', partner_ids=[(4, self.partner_1.id), (4, self.partner_2.id)])
|
|
self.assertEqual(self.test_record.message_follower_ids.mapped('partner_id'), original.mapped('partner_id'))
|
|
self.assertEqual(self.test_record.message_follower_ids.mapped('channel_id'), original.mapped('channel_id'))
|
|
|
|
def test_post_subscribe_recipients(self):
|
|
original = self.test_record.message_follower_ids
|
|
self.test_record.sudo(self.user_employee).with_context({'mail_create_nosubscribe': True, 'mail_post_autofollow': True}).message_post(
|
|
body='Test Body', message_type='comment', subtype='mt_comment', partner_ids=[(4, self.partner_1.id), (4, self.partner_2.id)])
|
|
self.assertEqual(self.test_record.message_follower_ids.mapped('partner_id'), original.mapped('partner_id') | self.partner_1 | self.partner_2)
|
|
self.assertEqual(self.test_record.message_follower_ids.mapped('channel_id'), original.mapped('channel_id'))
|
|
|
|
def test_post_subscribe_recipients_partial(self):
|
|
original = self.test_record.message_follower_ids
|
|
self.test_record.sudo(self.user_employee).with_context({'mail_create_nosubscribe': True, 'mail_post_autofollow': True, 'mail_post_autofollow_partner_ids': [self.partner_2.id]}).message_post(
|
|
body='Test Body', message_type='comment', subtype='mt_comment', partner_ids=[(4, self.partner_1.id), (4, self.partner_2.id)])
|
|
self.assertEqual(self.test_record.message_follower_ids.mapped('partner_id'), original.mapped('partner_id') | self.partner_2)
|
|
self.assertEqual(self.test_record.message_follower_ids.mapped('channel_id'), original.mapped('channel_id'))
|
|
|
|
def test_chatter_mail_create_nolog(self):
|
|
""" Test disable of automatic chatter message at create """
|
|
rec = self.env['mail.test.simple'].sudo(self.user_employee).with_context({'mail_create_nolog': True}).create({'name': 'Test'})
|
|
self.assertEqual(rec.message_ids, self.env['mail.message'])
|
|
|
|
rec = self.env['mail.test.simple'].sudo(self.user_employee).with_context({'mail_create_nolog': False}).create({'name': 'Test'})
|
|
self.assertEqual(len(rec.message_ids), 1)
|
|
|
|
def test_chatter_mail_notrack(self):
|
|
""" Test disable of automatic value tracking at create and write """
|
|
rec = self.env['mail.test.track'].sudo(self.user_employee).with_context({'mail_notrack': False}).create({'name': 'Test', 'user_id': self.user_employee.id})
|
|
self.assertEqual(len(rec.sudo().mapped('message_ids.tracking_value_ids')), 1)
|
|
|
|
rec = self.env['mail.test.track'].sudo(self.user_employee).with_context({'mail_notrack': True}).create({'name': 'Test', 'user_id': self.user_employee.id})
|
|
self.assertEqual(rec.sudo().mapped('message_ids.tracking_value_ids'), self.env['mail.tracking.value'])
|
|
|
|
rec.write({'user_id': self.user_admin.id})
|
|
self.assertEqual(rec.sudo().mapped('message_ids.tracking_value_ids'), self.env['mail.tracking.value'])
|
|
|
|
rec.with_context({'mail_notrack': False}).write({'user_id': self.user_employee.id})
|
|
self.assertEqual(len(rec.sudo().mapped('message_ids.tracking_value_ids')), 1)
|
|
|
|
def test_chatter_tracking_disable(self):
|
|
""" Test disable of all chatter features at create and write """
|
|
rec = self.env['mail.test.track'].sudo(self.user_employee).with_context({'tracking_disable': True}).create({'name': 'Test', 'user_id': self.user_employee.id})
|
|
self.assertEqual(rec.sudo().message_ids, self.env['mail.message'])
|
|
self.assertEqual(rec.sudo().mapped('message_ids.tracking_value_ids'), self.env['mail.tracking.value'])
|
|
|
|
rec.write({'user_id': self.user_admin.id})
|
|
self.assertEqual(rec.sudo().mapped('message_ids.tracking_value_ids'), self.env['mail.tracking.value'])
|
|
|
|
rec.with_context({'tracking_disable': False}).write({'user_id': self.user_employee.id})
|
|
self.assertEqual(len(rec.sudo().mapped('message_ids.tracking_value_ids')), 1)
|
|
|
|
rec = self.env['mail.test.track'].sudo(self.user_employee).with_context({'tracking_disable': False}).create({'name': 'Test', 'user_id': self.user_employee.id})
|
|
self.assertEqual(len(rec.sudo().message_ids), 2)
|
|
self.assertEqual(len(rec.sudo().mapped('message_ids.tracking_value_ids')), 1)
|
|
|
|
|
|
class TestNotifications(BaseFunctionalTest, MockEmails):
|
|
|
|
def setUp(self):
|
|
super(TestNotifications, self).setUp()
|
|
self.partner_1 = self.env['res.partner'].with_context(BaseFunctionalTest._test_context).create({
|
|
'name': 'Valid Lelitre',
|
|
'email': 'valid.lelitre@agrolait.com'})
|
|
|
|
(self.user_employee | self.user_admin).write({'notification_type': 'inbox'})
|
|
|
|
def test_needaction(self):
|
|
with self.assertNotifications(partner_employee=(1, 'inbox', 'unread'), partner_admin=(0, '', '')):
|
|
self.test_record.message_post(
|
|
body='Test', message_type='comment', subtype='mail.mt_comment',
|
|
partner_ids=[self.user_employee.partner_id.id])
|
|
|
|
self.test_record.message_subscribe([self.partner_1.id])
|
|
with self.assertNotifications(partner_employee=(1, 'inbox', 'unread'), partner_admin=(0, '', ''), partner_1=(1, 'email', 'read')):
|
|
self.test_record.message_post(
|
|
body='Test', message_type='comment', subtype='mail.mt_comment',
|
|
partner_ids=[self.user_employee.partner_id.id])
|
|
|
|
def test_inactive_follower(self):
|
|
# In some case odoobot is follower of a record.
|
|
# Even if it shouldn't be the case, we want to be sure that odoobot is not notified
|
|
self.test_record._message_subscribe(self.user_employee.partner_id.ids)
|
|
with self.assertNotifications(partner_employee=(1, 'inbox', 'unread')):
|
|
self.test_record.message_post(
|
|
body='Test', message_type='comment', subtype='mail.mt_comment')
|
|
self.user_employee.active = False
|
|
# at this point, partner is still active and would receive an email notification
|
|
self.user_employee.partner_id._write({'active': False})
|
|
with self.assertNotifications(partner_employee=(0, '', '')):
|
|
self.test_record.message_post(
|
|
body='Test', message_type='comment', subtype='mail.mt_comment')
|
|
|
|
def test_set_message_done_user(self):
|
|
with self.assertNotifications(partner_employee=(0, '', '')):
|
|
message = self.test_record.message_post(
|
|
body='Test', message_type='comment', subtype='mail.mt_comment',
|
|
partner_ids=[self.user_employee.partner_id.id])
|
|
message.sudo(self.user_employee).set_message_done()
|
|
|
|
def test_set_message_done_portal(self):
|
|
user_portal = mail_new_test_user(self.env, login='chell', groups='base.group_portal', name='Chell Gladys', notification_type='inbox')
|
|
self.partner_portal = user_portal.partner_id
|
|
|
|
with self.assertNotifications(partner_employee=(1, 'inbox', 'unread'), partner_portal=(1, 'inbox', 'read')):
|
|
message = self.test_record.message_post(
|
|
body='Test', message_type='comment', subtype='mail.mt_comment',
|
|
partner_ids=[self.user_employee.partner_id.id, user_portal.partner_id.id])
|
|
message.sudo(user_portal).set_message_done()
|
|
|
|
def test_set_star(self):
|
|
msg = self.test_record.sudo(self.user_admin).message_post(body='My Body', subject='1')
|
|
msg_emp = self.env['mail.message'].sudo(self.user_employee).browse(msg.id)
|
|
|
|
# Admin set as starred
|
|
msg.toggle_message_starred()
|
|
self.assertTrue(msg.starred)
|
|
|
|
# Employee set as starred
|
|
msg_emp.toggle_message_starred()
|
|
self.assertTrue(msg_emp.starred)
|
|
|
|
# Do: Admin unstars msg
|
|
msg.toggle_message_starred()
|
|
self.assertFalse(msg.starred)
|
|
self.assertTrue(msg_emp.starred)
|
|
|
|
|
|
class TestChatterMisc(BaseFunctionalTest):
|
|
|
|
def test_alias_setup(self):
|
|
alias = self.env['mail.alias'].with_context(alias_model_name='mail.test').create({'alias_name': 'b4r+_#_R3wl$$'})
|
|
self.assertEqual(alias.alias_name, 'b4r+_-_r3wl-', 'Disallowed chars should be replaced by hyphens')
|
|
|
|
def test_cache_invalidation(self):
|
|
""" Test that creating a mail-thread record does not invalidate the whole cache. """
|
|
# make a new record in cache
|
|
record = self.env['res.partner'].new({'name': 'Brave New Partner'})
|
|
self.assertTrue(record.name)
|
|
|
|
# creating a mail-thread record should not invalidate the whole cache
|
|
self.env['res.partner'].create({'name': 'Actual Partner'})
|
|
self.assertTrue(record.name)
|