diff options
| author | Thibault Delavallée <tde@odoo.com> | 2017-12-05 13:43:11 +0100 |
|---|---|---|
| committer | Thibault Delavallée <tde@odoo.com> | 2017-12-15 16:45:37 +0100 |
| commit | 9b755773203f020a0ab958bda761277e032b51c2 (patch) | |
| tree | 8e31b0abdb780a58836d0ec20164d5657c3e0ad1 | |
| parent | f02c6fd956d582eff24135d4be9c7ae7f205558a (diff) | |
[IMP] test_mail: add some mail performance tests
New tests are added in test_mail to have tests for message_post and
complex mail thread features. Purpose is to have performance counters
for more complex stuff in mail and begin to work on performances
and try to lessen those counters.
| -rw-r--r-- | addons/test_mail/tests/test_performance.py | 136 |
1 files changed, 134 insertions, 2 deletions
diff --git a/addons/test_mail/tests/test_performance.py b/addons/test_mail/tests/test_performance.py index 7d178a5662e..7ae1f3387dd 100644 --- a/addons/test_mail/tests/test_performance.py +++ b/addons/test_mail/tests/test_performance.py @@ -2,6 +2,7 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. from odoo.tests.common import TransactionCase, users, warmup +from odoo.tools import mute_logger class TestMailPerformance(TransactionCase): @@ -101,12 +102,13 @@ class TestAdvMailPerformance(TransactionCase): def setUp(self): super(TestAdvMailPerformance, self).setUp() - self.user_employee = self.env['res.users'].with_context({ + self._quick_create_ctx = { 'no_reset_password': True, 'mail_create_nolog': True, 'mail_create_nosubscribe': True, 'mail_notrack': True, - }).create({ + } + self.user_employee = self.env['res.users'].with_context(self._quick_create_ctx).create({ 'name': 'Ernest Employee', 'login': 'emp', 'email': 'e.e@example.com', @@ -135,4 +137,134 @@ class TestAdvMailPerformance(TransactionCase): model.create({ 'summary': 'Test Activity', 'res_id': record.id, + 'activity_type_id': self.env.ref('mail.mail_activity_data_todo').id, }) + + +class TestHeavyMailPerformance(TransactionCase): + + def setUp(self): + super(TestHeavyMailPerformance, self).setUp() + self._quick_create_ctx = { + 'no_reset_password': True, + 'mail_create_nolog': True, + 'mail_create_nosubscribe': True, + 'mail_notrack': True, + } + self.user_employee = self.env['res.users'].with_context(self._quick_create_ctx).create({ + 'name': 'Ernest Employee', + 'login': 'emp', + 'email': 'e.e@example.com', + 'signature': '--\nErnest', + 'notification_type': 'inbox', + 'groups_id': [(6, 0, [self.env.ref('base.group_user').id])], + }) + self.user_portal = self.env['res.users'].with_context(self._quick_create_ctx).create({ + 'name': 'Olivia Portal', + 'login': 'port', + 'email': 'p.p@example.com', + 'signature': '--\nOlivia', + 'notification_type': 'email', + 'groups_id': [(6, 0, [self.env.ref('base.group_portal').id])], + }) + + self.admin = self.env.user + self.admin.login = 'admin' + + self.customer = self.env['res.partner'].with_context(self._quick_create_ctx).create({ + 'name': 'Test Customer', + 'email': 'test@example.com' + }) + self.umbrella = self.env['mail.test'].with_context(mail_create_nosubscribe=True).create({ + 'name': 'Test Umbrella', + 'customer_id': self.customer.id, + 'alias_name': 'test', + }) + + Partners = self.env['res.partner'].with_context(self._quick_create_ctx) + self.partners = self.env['res.partner'] + for x in range(0, 10): + self.partners |= Partners.create({'name': 'Test %s' % x, 'email': 'test%s@example.com' % x}) + self.umbrella.message_subscribe(self.partners.ids, subtype_ids=[ + self.env.ref('mail.mt_comment').id, + self.env.ref('test_mail.st_mail_test_child_full').id] + ) + + @mute_logger('odoo.tests', 'odoo.addons.mail.models.mail_mail', 'odoo.models.unlink') + @users('admin', 'emp') + @warmup + def test_mail_mail_send(self): + self.env['ir.config_parameter'].sudo().set_param('mail.catchall.domain', 'example.com') + 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') + message = self.env['mail.message'].sudo().with_context(message_create_from_mail_mail=True).create({ + 'subject': 'Test', + 'body': '<p>Test</p>', + 'author_id': self.env.user.partner_id.id, + 'email_from': self.env.user.partner_id.email, + 'model': 'mail.test', + 'res_id': self.umbrella.id, + }) + mail = self.env['mail.mail'].sudo().create({ + 'mail_message_id': message.id, + 'recipient_ids': [(4, pid) for pid in self.partners.ids], + }) + mail_ids = mail.ids + + with self.assertQueryCount(admin=24, emp=48): + self.env['mail.mail'].browse(mail_ids).send() + + @mute_logger('odoo.tests', 'odoo.addons.mail.models.mail_mail', 'odoo.models.unlink') + @users('admin', 'emp') + @warmup + def test_message_post(self): + self.umbrella.message_subscribe(self.user_portal.partner_id.ids) + record = self.umbrella.sudo(self.env.user) + + with self.assertQueryCount(admin=112, emp=143): + record.message_post( + body='<p>Test Post Performances</p>', + message_type='comment', subtype='mail.mt_comment') + + self.assertEqual(record.message_ids[0].body, '<p>Test Post Performances</p>') + self.assertEqual(record.message_ids[0].needaction_partner_ids, self.partners | self.user_portal.partner_id) + + @mute_logger('odoo.tests', 'odoo.addons.mail.models.mail_mail', 'odoo.models.unlink') + @users('admin', 'emp') + @warmup + def test_message_post_template(self): + self.umbrella.message_subscribe(self.user_portal.partner_id.ids) + record = self.umbrella.sudo(self.env.user) + template = self.env.ref('test_mail.mail_test_tpl') + + with self.assertQueryCount(admin=170, emp=211): + record.message_post_with_template(template.id, message_type='comment', composition_mode='comment') + + 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_create_tracking_subscription(self): + """ Create record using most features: auto subscription, tracking + and templates. """ + umbrella_id = self.umbrella.id + customer_id = self.customer.id + user_id = self.user_portal.id + + with self.assertQueryCount(admin=316, emp=380): + rec = self.env['mail.test.full'].create({ + 'name': 'Test', + 'umbrella_id': umbrella_id, + 'customer_id': customer_id, + 'user_id': user_id, + }) + + self.assertEqual(rec.message_partner_ids, self.partners | self.env.user.partner_id | self.user_portal.partner_id) + # tracking message + self.assertEqual(rec.message_ids[0].subtype_id, self.env.ref('test_mail.st_mail_test_full_umbrella_upd')) + self.assertEqual(rec.message_ids[0].needaction_partner_ids, self.partners | self.user_portal.partner_id) + # creation message + self.assertEqual(rec.message_ids[1].subtype_id, self.env.ref('mail.mt_note')) + self.assertEqual(rec.message_ids[1].needaction_partner_ids, self.env['res.partner']) |
