[IMP] test_mail: add unit and performance tests about adding followers
Purpose of this commit is to test existing behavior of followers subscription as well as adding some query count tests about message_subscribe method. As followers subscription technical implementation may change in a near future in order to be optimized it is a good idea to have current behavior and query count validated. This commit adds * test for followers update using message_subscribe API. Tests are added with forced and unforced subtypes to ensure behavior will not change or will be changed while knowing it; * performance test about message_subscribe, about adding new followers, and subscribing already-existing followers in force mode or not; Query count performance test shows that message_subscribe could probably be improved. It does several things that require queries (check of access rights, check for existing subscriptions, ensure customers have no access to internal subtypes, ...). However we feel it could be improved in order to speed-up the subscription of followers. This is linked to task 49265; it is only the first steps of it.
This commit is contained in:
@@ -91,7 +91,21 @@ class BaseFollowersTest(common.BaseFunctionalTest):
|
||||
test_record.message_subscribe(partner_ids=[self.user_admin.partner_id.id], subtype_ids=[self.mt_mg_nodef.id, self.mt_al_nodef.id])
|
||||
self.assertEqual(test_record.message_partner_ids, self.user_admin.partner_id)
|
||||
self.assertEqual(test_record.message_channel_ids, self.env['mail.channel'])
|
||||
self.assertEqual(test_record.message_follower_ids.filtered(lambda fol: fol.partner_id == self.user_admin.partner_id).subtype_ids, self.mt_mg_nodef | self.mt_al_nodef)
|
||||
self.assertEqual(test_record.message_follower_ids.subtype_ids, self.mt_mg_nodef | self.mt_al_nodef)
|
||||
|
||||
def test_followers_multiple_subscription_noforce(self):
|
||||
test_record = self.test_record.sudo(self.user_employee)
|
||||
|
||||
test_record.message_subscribe(partner_ids=[self.user_admin.partner_id.id], subtype_ids=[self.mt_mg_nodef.id, self.mt_al_nodef.id])
|
||||
self.assertEqual(test_record.message_partner_ids, self.user_admin.partner_id)
|
||||
self.assertEqual(test_record.message_channel_ids, self.env['mail.channel'])
|
||||
self.assertEqual(test_record.message_follower_ids.subtype_ids, self.mt_mg_nodef | self.mt_al_nodef)
|
||||
|
||||
# set new subtypes with force=False, meaning no rewriting of the subscription is done -> result should not change
|
||||
test_record.message_subscribe(partner_ids=[self.user_admin.partner_id.id], force=False)
|
||||
self.assertEqual(test_record.message_partner_ids, self.user_admin.partner_id)
|
||||
self.assertEqual(test_record.message_channel_ids, self.env['mail.channel'])
|
||||
self.assertEqual(test_record.message_follower_ids.subtype_ids, self.mt_mg_nodef | self.mt_al_nodef)
|
||||
|
||||
def test_followers_no_DID(self):
|
||||
"""Test that a follower cannot suffer from dissociative identity disorder.
|
||||
|
||||
@@ -192,6 +192,10 @@ class TestHeavyMailPerformance(TransactionCase):
|
||||
self.env['ir.config_parameter'].sudo().set_param('mail.catchall.alias', 'test-catchall')
|
||||
self.env['ir.config_parameter'].sudo().set_param('mail.bounce.alias', 'test-bounce')
|
||||
|
||||
self.channel = self.env['mail.channel'].with_context(self._quick_create_ctx).create({
|
||||
'name': 'Listener',
|
||||
})
|
||||
|
||||
# prepare recipients to test for more realistic workload
|
||||
self.customer = self.env['res.partner'].with_context(self._quick_create_ctx).create({
|
||||
'name': 'Test Customer',
|
||||
@@ -266,6 +270,59 @@ class TestHeavyMailPerformance(TransactionCase):
|
||||
self.assertEqual(record.message_ids[0].body, '<p>Adding stuff on %s</p>' % record.name)
|
||||
self.assertEqual(record.message_ids[0].needaction_partner_ids, self.partners | self.user_portal.partner_id | self.customer)
|
||||
|
||||
@mute_logger('odoo.tests', 'odoo.addons.mail.models.mail_mail', 'odoo.models.unlink')
|
||||
@users('admin', 'emp')
|
||||
@warmup
|
||||
def test_complex_message_subscribe(self):
|
||||
pids = self.partners.ids
|
||||
cids = self.channel.ids
|
||||
subtypes = self.env.ref('mail.mt_comment') | self.env.ref('test_mail.st_mail_test_full_umbrella_upd')
|
||||
subtype_ids = subtypes.ids
|
||||
rec = self.env['mail.test.full'].create({
|
||||
'name': 'Test',
|
||||
'umbrella_id': False,
|
||||
'customer_id': False,
|
||||
'user_id': self.user_portal.id,
|
||||
})
|
||||
|
||||
self.assertEqual(rec.message_partner_ids, self.env.user.partner_id | self.user_portal.partner_id)
|
||||
self.assertEqual(rec.message_channel_ids, self.env['mail.channel'])
|
||||
|
||||
# subscribe new followers with forced given subtypes
|
||||
with self.assertQueryCount(admin=20, emp=21): # test_mail only: 20 - 21
|
||||
rec.message_subscribe(
|
||||
partner_ids=pids[:4],
|
||||
channel_ids=cids,
|
||||
subtype_ids=subtype_ids,
|
||||
)
|
||||
|
||||
self.assertEqual(rec.message_partner_ids, self.env.user.partner_id | self.user_portal.partner_id | self.partners[:4])
|
||||
self.assertEqual(rec.message_channel_ids, self.channel)
|
||||
|
||||
# subscribe existing and new followers with force=False, meaning only some new followers will be added
|
||||
with self.assertQueryCount(admin=11, emp=12): # test_mail only: 11 - 12
|
||||
rec.message_subscribe(
|
||||
partner_ids=pids[:6],
|
||||
channel_ids=cids,
|
||||
subtype_ids=None,
|
||||
force=False,
|
||||
)
|
||||
|
||||
self.assertEqual(rec.message_partner_ids, self.env.user.partner_id | self.user_portal.partner_id | self.partners[:6])
|
||||
self.assertEqual(rec.message_channel_ids, self.channel)
|
||||
|
||||
# subscribe existing and new followers with force=True, meaning all will have the same subtypes
|
||||
with self.assertQueryCount(admin=48, emp=49): # test_mail only: 48 - 49
|
||||
rec.message_subscribe(
|
||||
partner_ids=pids,
|
||||
channel_ids=cids,
|
||||
subtype_ids=subtype_ids,
|
||||
force=True,
|
||||
)
|
||||
|
||||
self.assertEqual(rec.message_partner_ids, self.env.user.partner_id | self.user_portal.partner_id | self.partners)
|
||||
self.assertEqual(rec.message_channel_ids, self.channel)
|
||||
|
||||
@mute_logger('odoo.tests', 'odoo.addons.mail.models.mail_mail', 'odoo.models.unlink')
|
||||
@users('admin', 'emp')
|
||||
@warmup
|
||||
|
||||
Reference in New Issue
Block a user