[FW][IMP] test_mail: add test for auto subscribe
We recently found a bug about generic internal subtypes not being correctly
propagated when doing auto subscribe.
For example: subscribe to a project, check an internal subtype like activities.
Auto subscribe done on project tasks should include actitivities subtype but
is currently not the case.
This test highlights the issue and a fix will be provided soon. In this test
we check both
* generic subtype propagation (comment- or activities- like subtypes);
* model-specific subtype propagation through parent relationship (like
following New Task on project to follow New on task);
* internal subtypes not being propagated to portal users;
* auto subscribe at create with both create and parent follower reasons;
LINKS
Task ID-2205643
COM PR #47336
X-original-commit: 1e29d48f5b10deca9ed7b991ea92ffc36f61c725
X-original-pr: odoo/odoo#47336
Co-authored-by: Thibault Delavallee <tde@odoo.com>
Co-authored-by: Priyanka kakadiya <pka@odoo.com>
This commit is contained in:
co-authored by
Priyanka kakadiya
parent
67106f6840
commit
ec874afd77
@@ -6,8 +6,10 @@ from psycopg2 import IntegrityError
|
||||
from odoo.tests import tagged, users
|
||||
from odoo.addons.test_mail.tests.common import TestMailCommon
|
||||
from odoo.tools.misc import mute_logger
|
||||
from odoo.tests import tagged
|
||||
|
||||
|
||||
@tagged('mail_followers')
|
||||
class BaseFollowersTest(TestMailCommon):
|
||||
|
||||
@classmethod
|
||||
@@ -156,7 +158,9 @@ class BaseFollowersTest(TestMailCommon):
|
||||
self.assertEqual(document.message_follower_ids.partner_id, self.partner_portal | customer)
|
||||
|
||||
|
||||
@tagged('mail_followers')
|
||||
class AdvancedFollowersTest(TestMailCommon):
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super(AdvancedFollowersTest, cls).setUpClass()
|
||||
@@ -171,17 +175,59 @@ class AdvancedFollowersTest(TestMailCommon):
|
||||
# clean demo data to avoid interferences
|
||||
Subtype.search([('res_model', 'in', ['mail.test.container', 'mail.test.track'])]).unlink()
|
||||
|
||||
cls.sub_nodef = Subtype.create({'name': 'Sub NoDefault', 'default': False, 'res_model': 'mail.test.container'})
|
||||
cls.sub_umb1 = Subtype.create({'name': 'Sub Container1', 'default': False, 'res_model': 'mail.test.track'})
|
||||
cls.sub_umb2 = Subtype.create({'name': 'Sub Container2', 'default': False, 'res_model': 'mail.test.track'})
|
||||
cls.umb_def = Subtype.create({'name': 'Container Default', 'default': True, 'res_model': 'mail.test.container'})
|
||||
# create subtypes for auto subscription from container to sub records
|
||||
cls.umb_sub_def = Subtype.create({
|
||||
'name': 'Container Sub1', 'default': True, 'res_model': 'mail.test.container',
|
||||
'parent_id': cls.sub_umb1.id, 'relation_field': 'container_id'})
|
||||
cls.umb_sub_nodef = Subtype.create({
|
||||
'name': 'Container Sub2', 'default': False, 'res_model': 'mail.test.container',
|
||||
'parent_id': cls.sub_umb2.id, 'relation_field': 'container_id'})
|
||||
# mail.test.track subtypes (aka: task records)
|
||||
cls.sub_track_1 = Subtype.create({
|
||||
'name': 'Track (with child relation) 1', 'default': False,
|
||||
'res_model': 'mail.test.track'
|
||||
})
|
||||
cls.sub_track_2 = Subtype.create({
|
||||
'name': 'Track (with child relation) 2', 'default': False,
|
||||
'res_model': 'mail.test.track'
|
||||
})
|
||||
cls.sub_track_nodef = Subtype.create({
|
||||
'name': 'Generic Track subtype', 'default': False, 'internal': False,
|
||||
'res_model': 'mail.test.track'
|
||||
})
|
||||
cls.sub_track_def = Subtype.create({
|
||||
'name': 'Default track subtype', 'default': True, 'internal': False,
|
||||
'res_model': 'mail.test.track'
|
||||
})
|
||||
|
||||
# mail.test.container subtypes (aka: project records)
|
||||
cls.umb_nodef = Subtype.create({
|
||||
'name': 'Container NoDefault', 'default': False,
|
||||
'res_model': 'mail.test.container'
|
||||
})
|
||||
cls.umb_def = Subtype.create({
|
||||
'name': 'Container Default', 'default': True,
|
||||
'res_model': 'mail.test.container'
|
||||
})
|
||||
cls.umb_def_int = Subtype.create({
|
||||
'name': 'Container Default', 'default': True, 'internal': True,
|
||||
'res_model': 'mail.test.container'
|
||||
})
|
||||
# -> subtypes for auto subscription from container to sub records
|
||||
cls.umb_autosub_def = Subtype.create({
|
||||
'name': 'Container AutoSub (default)', 'default': True, 'res_model': 'mail.test.container',
|
||||
'parent_id': cls.sub_track_1.id, 'relation_field': 'container_id'
|
||||
})
|
||||
cls.umb_autosub_nodef = Subtype.create({
|
||||
'name': 'Container AutoSub 2', 'default': False, 'res_model': 'mail.test.container',
|
||||
'parent_id': cls.sub_track_2.id, 'relation_field': 'container_id'
|
||||
})
|
||||
|
||||
# generic subtypes
|
||||
cls.sub_comment = cls.env.ref('mail.mt_comment')
|
||||
cls.sub_generic_int_nodef = Subtype.create({
|
||||
'name': 'Generic internal subtype',
|
||||
'default': False,
|
||||
'internal': True,
|
||||
})
|
||||
cls.sub_generic_int_def = Subtype.create({
|
||||
'name': 'Generic internal subtype (default)',
|
||||
'default': True,
|
||||
'internal': True,
|
||||
})
|
||||
|
||||
def test_auto_subscribe_create(self):
|
||||
""" Creator of records are automatically added as followers """
|
||||
@@ -244,30 +290,74 @@ class AdvancedFollowersTest(TestMailCommon):
|
||||
'name': 'Project-Like',
|
||||
})
|
||||
|
||||
container.message_subscribe(partner_ids=(self.partner_portal | self.partner_admin).ids)
|
||||
self.assertEqual(container.message_partner_ids, self.partner_portal | self.partner_admin)
|
||||
# have an inactive partner to check auto subscribe does not subscribe it
|
||||
user_root = self.env.ref('base.user_root')
|
||||
self.assertFalse(user_root.active)
|
||||
self.assertFalse(user_root.partner_id.active)
|
||||
|
||||
self.user_admin.active = False
|
||||
self.user_admin.flush()
|
||||
self.partner_admin.active = False
|
||||
self.partner_admin.flush()
|
||||
container.message_subscribe(partner_ids=(self.partner_portal | user_root.partner_id).ids)
|
||||
container.message_subscribe(partner_ids=self.partner_admin.ids, subtype_ids=(self.sub_comment | self.umb_autosub_nodef | self.sub_generic_int_nodef).ids)
|
||||
self.assertEqual(container.message_partner_ids, self.partner_portal | self.partner_admin)
|
||||
follower_por = container.message_follower_ids.filtered(lambda f: f.partner_id == self.partner_portal)
|
||||
follower_adm = container.message_follower_ids.filtered(lambda f: f.partner_id == self.partner_admin)
|
||||
self.assertEqual(
|
||||
follower_por.subtype_ids,
|
||||
self.sub_comment | self.umb_def | self.umb_autosub_def,
|
||||
'Subscribe: Default subtypes: comment (default generic) and two model-related defaults')
|
||||
self.assertEqual(
|
||||
follower_adm.subtype_ids,
|
||||
self.sub_comment | self.umb_autosub_nodef | self.sub_generic_int_nodef,
|
||||
'Subscribe: Asked subtypes when subscribing')
|
||||
|
||||
sub1 = self.env['mail.test.track'].with_user(self.user_employee).create({
|
||||
'name': 'Task-Like Test',
|
||||
'container_id': container.id,
|
||||
})
|
||||
|
||||
all_defaults = self.env['mail.message.subtype'].search([('default', '=', True), '|', ('res_model', '=', 'mail.test.track'), ('res_model', '=', False)])
|
||||
external_defaults = all_defaults.filtered(lambda subtype: not subtype.internal)
|
||||
self.assertEqual(
|
||||
sub1.message_partner_ids, self.partner_portal | self.partner_admin | self.user_employee.partner_id,
|
||||
'Followers: creator (employee) + auto subscribe from parent (portal)')
|
||||
follower_por = sub1.message_follower_ids.filtered(lambda fol: fol.partner_id == self.partner_portal)
|
||||
follower_adm = sub1.message_follower_ids.filtered(lambda fol: fol.partner_id == self.partner_admin)
|
||||
follower_emp = sub1.message_follower_ids.filtered(lambda fol: fol.partner_id == self.user_employee.partner_id)
|
||||
self.assertEqual(
|
||||
follower_por.subtype_ids, self.sub_comment | self.sub_track_1,
|
||||
'AutoSubscribe: comment (generic checked), Track (with child relation) 1 as Umbrella AutoSub (default) was checked'
|
||||
)
|
||||
self.assertEqual(
|
||||
follower_adm.subtype_ids, self.sub_comment | self.sub_track_2 | self.sub_generic_int_nodef,
|
||||
'AutoSubscribe: comment (generic checked), Track (with child relation) 2) as Umbrella AutoSub 2 was checked, Generic internal subtype (generic checked)'
|
||||
)
|
||||
self.assertEqual(
|
||||
follower_emp.subtype_ids, self.sub_comment | self.sub_track_def | self.sub_generic_int_def,
|
||||
'AutoSubscribe: only default one as no subscription on parent'
|
||||
)
|
||||
|
||||
# check portal generic subscribe
|
||||
sub1.message_unsubscribe(partner_ids=self.partner_portal.ids)
|
||||
sub1.message_subscribe(partner_ids=self.partner_portal.ids)
|
||||
follower_por = sub1.message_follower_ids.filtered(lambda fol: fol.partner_id == self.partner_portal)
|
||||
|
||||
self.assertEqual(sub1.message_partner_ids, self.partner_portal | self.user_employee.partner_id)
|
||||
self.assertEqual(sub1.message_follower_ids.partner_id, self.partner_portal | self.user_employee.partner_id)
|
||||
self.assertEqual(
|
||||
sub1.message_follower_ids.filtered(lambda fol: fol.partner_id == self.partner_portal).subtype_ids,
|
||||
external_defaults | self.sub_umb1)
|
||||
follower_por.subtype_ids, self.sub_comment | self.sub_track_def,
|
||||
'AutoSubscribe: only default one as no subscription on parent (no internal as portal)'
|
||||
)
|
||||
|
||||
# check auto subscribe as creator + auto subscribe as parent follower takes both subtypes
|
||||
container.message_subscribe(
|
||||
partner_ids=self.user_employee.partner_id.ids,
|
||||
subtype_ids=(self.sub_comment | self.sub_generic_int_nodef | self.umb_autosub_nodef).ids)
|
||||
sub2 = self.env['mail.test.track'].with_user(self.user_employee).create({
|
||||
'name': 'Task-Like Test',
|
||||
'container_id': container.id,
|
||||
})
|
||||
follower_emp = sub2.message_follower_ids.filtered(lambda fol: fol.partner_id == self.user_employee.partner_id)
|
||||
defaults = self.sub_comment | self.sub_track_def | self.sub_generic_int_def
|
||||
parents = self.sub_generic_int_nodef | self.sub_track_2
|
||||
self.assertEqual(
|
||||
sub1.message_follower_ids.filtered(lambda fol: fol.partner_id == self.user_employee.partner_id).subtype_ids,
|
||||
all_defaults)
|
||||
follower_emp.subtype_ids, defaults + parents,
|
||||
'AutoSubscribe: at create auto subscribe as creator + from parent take both subtypes'
|
||||
)
|
||||
|
||||
|
||||
class AdvancedResponsibleNotifiedTest(TestMailCommon):
|
||||
|
||||
Reference in New Issue
Block a user