diff options
| author | Thibault Delavallée <tde@odoo.com> | 2020-04-21 14:07:55 +0000 |
|---|---|---|
| committer | Thibault Delavallée <tde@odoo.com> | 2020-04-22 08:00:29 +0000 |
| commit | 6e347b196d4bf40929d88ab2c835ba3fbc4dac7d (patch) | |
| tree | 6da6e12e60a81d792c9fb16933be9cb0f58dcd1a /addons/test_mail | |
| parent | 1b4767ee798562911922a7e03b04b4e6485350be (diff) | |
[MOV] (test_)mail(_full): redispatch some tests and split test mail models file
PURPOSE
Have a cleaner test_mail addons
SPECIFICATIONS
Keep only mail-related tests, move odoobot in test mail full, send "update
notification" tests in mail (specific to mail). Merge some test files to
lessen number of files, perform light file renaming.
Split test mail models file to prepare some cleaning in those models and tests.
LINKS
Prepares Task ID 2238597 (clean notification models)
Prepares Task ID 2083854 (improve mass mailing technical flows)
PR #49891
Diffstat (limited to 'addons/test_mail')
| -rw-r--r-- | addons/test_mail/models/__init__.py | 4 | ||||
| -rw-r--r-- | addons/test_mail/models/test_mail_corner_case_models.py | 53 | ||||
| -rw-r--r-- | addons/test_mail/models/test_mail_models.py | 57 | ||||
| -rw-r--r-- | addons/test_mail/models/test_mail_thread_models.py | 12 | ||||
| -rw-r--r-- | addons/test_mail/tests/__init__.py | 5 | ||||
| -rw-r--r-- | addons/test_mail/tests/test_mail_redirect.py | 67 | ||||
| -rw-r--r-- | addons/test_mail/tests/test_mail_thread_internals.py (renamed from addons/test_mail/tests/test_discuss.py) | 65 | ||||
| -rw-r--r-- | addons/test_mail/tests/test_message_track.py | 115 | ||||
| -rw-r--r-- | addons/test_mail/tests/test_odoobot.py | 132 | ||||
| -rw-r--r-- | addons/test_mail/tests/test_performance.py | 53 | ||||
| -rw-r--r-- | addons/test_mail/tests/test_update_notification.py | 11 |
11 files changed, 220 insertions, 354 deletions
diff --git a/addons/test_mail/models/__init__.py b/addons/test_mail/models/__init__.py index 420d064776c..0f5cea0a294 100644 --- a/addons/test_mail/models/__init__.py +++ b/addons/test_mail/models/__init__.py @@ -1,3 +1,5 @@ # -*- coding: utf-8 -*- -from . import test_mail_models
\ No newline at end of file +from . import test_mail_models +from . import test_mail_corner_case_models +from . import test_mail_thread_models diff --git a/addons/test_mail/models/test_mail_corner_case_models.py b/addons/test_mail/models/test_mail_corner_case_models.py new file mode 100644 index 00000000000..7f65194cd8e --- /dev/null +++ b/addons/test_mail/models/test_mail_corner_case_models.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import api, fields, models + + +class MailModel(models.Model): + _name = 'test_performance.mail' + _description = 'Test Performance Mail' + _inherit = 'mail.thread' + + name = fields.Char() + value = fields.Integer() + value_pc = fields.Float(compute="_value_pc", store=True) + track = fields.Char(default='test', tracking=True) + partner_id = fields.Many2one('res.partner', string='Customer') + + @api.depends('value') + def _value_pc(self): + for record in self: + record.value_pc = float(record.value) / 100 + + +class MailTrackingModel(models.Model): + _description = 'Test Tracking Model' + _name = 'mail.test.tracking' + _inherit = ['mail.thread'] + + name = fields.Char(required=True, tracking=True) + field_0 = fields.Char(tracking=True) + field_1 = fields.Char(tracking=True) + field_2 = fields.Char(tracking=True) + + +class MailCompute(models.Model): + _name = 'mail.test.compute' + _description = "Test model with several tracked computed fields" + _inherit = ['mail.thread'] + + partner_id = fields.Many2one('res.partner', tracking=True) + partner_name = fields.Char(related='partner_id.name', store=True, tracking=True) + partner_email = fields.Char(related='partner_id.email', store=True, tracking=True) + partner_phone = fields.Char(related='partner_id.phone', tracking=True) + + +class MailMultiCompany(models.Model): + """ This model can be used in multi company tests""" + _name = 'mail.test.multi.company' + _description = "Test Multi Company Mail" + _inherit = 'mail.thread' + + name = fields.Char() + company_id = fields.Many2one('res.company') diff --git a/addons/test_mail/models/test_mail_models.py b/addons/test_mail/models/test_mail_models.py index 0e420b83eba..55549133a3d 100644 --- a/addons/test_mail/models/test_mail_models.py +++ b/addons/test_mail/models/test_mail_models.py @@ -122,60 +122,3 @@ class MailTestAlias(models.Model): values['alias_force_thread_id'] = self.id values['alias_parent_thread_id'] = self.id return values - - -class MailModel(models.Model): - _name = 'test_performance.mail' - _description = 'Test Performance Mail' - _inherit = 'mail.thread' - - name = fields.Char() - value = fields.Integer() - value_pc = fields.Float(compute="_value_pc", store=True) - track = fields.Char(default='test', tracking=True) - partner_id = fields.Many2one('res.partner', string='Customer') - - @api.depends('value') - def _value_pc(self): - for record in self: - record.value_pc = float(record.value) / 100 - - -class MailCC(models.Model): - _name = 'mail.test.cc' - _description = "Test Email CC Thread" - _inherit = ['mail.thread.cc'] - - name = fields.Char() - - -class MailMultiCompany(models.Model): - """ This model can be used in multi company tests""" - _name = 'mail.test.multi.company' - _description = "Test Multi Company Mail" - _inherit = 'mail.thread' - - name = fields.Char() - company_id = fields.Many2one('res.company') - - -class MailTrackingModel(models.Model): - _description = 'Test Tracking Model' - _name = 'mail.test.tracking' - _inherit = ['mail.thread'] - - name = fields.Char(required=True, tracking=True) - field_0 = fields.Char(tracking=True) - field_1 = fields.Char(tracking=True) - field_2 = fields.Char(tracking=True) - - -class MailCompute(models.Model): - _name = 'mail.test.compute' - _description = "Test model with several tracked computed fields" - _inherit = ['mail.thread'] - - partner_id = fields.Many2one('res.partner', tracking=True) - partner_name = fields.Char(related='partner_id.name', store=True, tracking=True) - partner_email = fields.Char(related='partner_id.email', store=True, tracking=True) - partner_phone = fields.Char(related='partner_id.phone', tracking=True) diff --git a/addons/test_mail/models/test_mail_thread_models.py b/addons/test_mail/models/test_mail_thread_models.py new file mode 100644 index 00000000000..685b5c2afd1 --- /dev/null +++ b/addons/test_mail/models/test_mail_thread_models.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import api, fields, models + + +class MailCC(models.Model): + _name = 'mail.test.cc' + _description = "Test Email CC Thread" + _inherit = ['mail.thread.cc'] + + name = fields.Char() diff --git a/addons/test_mail/tests/__init__.py b/addons/test_mail/tests/__init__.py index 78d3b1516b6..3aac76d3df9 100644 --- a/addons/test_mail/tests/__init__.py +++ b/addons/test_mail/tests/__init__.py @@ -2,19 +2,16 @@ from . import test_invite from . import test_ir_actions -from . import test_discuss from . import test_mail_activity from . import test_mail_followers from . import test_mail_message from . import test_mail_mail from . import test_mail_channel from . import test_mail_gateway -from . import test_mail_redirect from . import test_mail_template +from . import test_mail_thread_internals from . import test_message_composer from . import test_message_management from . import test_message_post from . import test_message_track -from . import test_odoobot from . import test_performance -from . import test_update_notification diff --git a/addons/test_mail/tests/test_mail_redirect.py b/addons/test_mail/tests/test_mail_redirect.py deleted file mode 100644 index 706a9704319..00000000000 --- a/addons/test_mail/tests/test_mail_redirect.py +++ /dev/null @@ -1,67 +0,0 @@ -# -*- coding: utf-8 -*- -# Part of Odoo. See LICENSE file for full copyright and licensing details. - -from werkzeug.urls import url_decode, url_parse -from odoo.tests.common import HttpCase, tagged - - -@tagged('-at_install', 'post_install') -class TestMultiCompany(HttpCase): - - def test_redirect_to_records(self): - - self.company_A = self.env['res.company'].create({ - 'name': 'Company A', - 'user_ids': [(4, self.ref('base.user_admin'))], - }) - - self.company_B = self.env['res.company'].create({ - 'name': 'Company B', - }) - - self.multi_company_record = self.env['mail.test.multi.company'].create({ - 'name': 'Multi Company Record', - 'company_id': self.company_A.id, - }) - - # Test Case 0 - # Not logged, redirect to web/login - response = self.url_open('/mail/view?model=%s&res_id=%s' % ( - self.multi_company_record._name, - self.multi_company_record.id), timeout=15) - - path = url_parse(response.url).path - self.assertEqual(path, '/web/login') - - self.authenticate('admin', 'admin') - - # Test Case 1 - # Logged into company 1, try accessing record in company A - # _redirect_to_record should add company A in allowed_company_ids - response = self.url_open('/mail/view?model=%s&res_id=%s' % ( - self.multi_company_record._name, - self.multi_company_record.id), timeout=15) - - self.assertEqual(response.status_code, 200) - - fragment = url_parse(response.url).fragment - cids = url_decode(fragment)['cids'] - - self.assertEqual(cids, '1,%s' % (self.company_A.id)) - - # Test Case 2 - # Logged into company 1, try accessing record in company B - # _redirect_to_record should redirect to messaging as the user - # doesn't have any access for this company - self.multi_company_record.company_id = self.company_B - - response = self.url_open('/mail/view?model=%s&res_id=%s' % ( - self.multi_company_record._name, - self.multi_company_record.id), timeout=15) - - self.assertEqual(response.status_code, 200) - - fragment = url_parse(response.url).fragment - action = url_decode(fragment)['action'] - - self.assertEqual(action, 'mail.action_discuss') diff --git a/addons/test_mail/tests/test_discuss.py b/addons/test_mail/tests/test_mail_thread_internals.py index 86b9a7de0cb..1674d9ca312 100644 --- a/addons/test_mail/tests/test_discuss.py +++ b/addons/test_mail/tests/test_mail_thread_internals.py @@ -1,7 +1,10 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. +from werkzeug.urls import url_parse, url_decode + from odoo.addons.test_mail.tests.common import TestMailCommon, TestRecipients +from odoo.tests.common import tagged, HttpCase from odoo.tools import mute_logger @@ -141,3 +144,65 @@ class TestDiscuss(TestMailCommon, TestRecipients): (False, 'cc1@example.com', 'CC Email'), (False, 'cc2@example.com', 'CC Email'), ], 'cc should be in suggestions') + + +@tagged('-at_install', 'post_install') +class TestMultiCompany(HttpCase): + + def test_redirect_to_records(self): + + self.company_A = self.env['res.company'].create({ + 'name': 'Company A', + 'user_ids': [(4, self.ref('base.user_admin'))], + }) + + self.company_B = self.env['res.company'].create({ + 'name': 'Company B', + }) + + self.multi_company_record = self.env['mail.test.multi.company'].create({ + 'name': 'Multi Company Record', + 'company_id': self.company_A.id, + }) + + # Test Case 0 + # Not logged, redirect to web/login + response = self.url_open('/mail/view?model=%s&res_id=%s' % ( + self.multi_company_record._name, + self.multi_company_record.id), timeout=15) + + path = url_parse(response.url).path + self.assertEqual(path, '/web/login') + + self.authenticate('admin', 'admin') + + # Test Case 1 + # Logged into company 1, try accessing record in company A + # _redirect_to_record should add company A in allowed_company_ids + response = self.url_open('/mail/view?model=%s&res_id=%s' % ( + self.multi_company_record._name, + self.multi_company_record.id), timeout=15) + + self.assertEqual(response.status_code, 200) + + fragment = url_parse(response.url).fragment + cids = url_decode(fragment)['cids'] + + self.assertEqual(cids, '1,%s' % (self.company_A.id)) + + # Test Case 2 + # Logged into company 1, try accessing record in company B + # _redirect_to_record should redirect to messaging as the user + # doesn't have any access for this company + self.multi_company_record.company_id = self.company_B + + response = self.url_open('/mail/view?model=%s&res_id=%s' % ( + self.multi_company_record._name, + self.multi_company_record.id), timeout=15) + + self.assertEqual(response.status_code, 200) + + fragment = url_parse(response.url).fragment + action = url_decode(fragment)['action'] + + self.assertEqual(action, 'mail.action_discuss') diff --git a/addons/test_mail/tests/test_message_track.py b/addons/test_mail/tests/test_message_track.py index 20ee3d74c4b..45ae711d32b 100644 --- a/addons/test_mail/tests/test_message_track.py +++ b/addons/test_mail/tests/test_message_track.py @@ -4,8 +4,10 @@ from unittest.mock import patch from odoo.addons.test_mail.tests.common import TestMailCommon +from odoo.tests.common import tagged +@tagged('mail_track') class TestTracking(TestMailCommon): def setUp(self): @@ -127,61 +129,6 @@ class TestTracking(TestMailCommon): # one email send due to template self.assertSentEmail(self.record.env.user.partner_id, [self.partner_admin], body='<p>Hello Test</p>') - def test_message_tracking_sequence(self): - """ Update some tracked fields and check that the mail.tracking.value are ordered according to their tracking_sequence""" - self.record.write({ - 'name': 'Zboub', - 'customer_id': self.user_admin.partner_id.id, - 'user_id': self.user_admin.id, - 'umbrella_id': self.env['mail.test'].with_context(mail_create_nosubscribe=True).create({'name': 'Umbrella'}).id - }) - self.flush_tracking() - self.assertEqual(len(self.record.message_ids), 1, 'should have 1 tracking message') - - tracking_values = self.env['mail.tracking.value'].search([('mail_message_id', '=', self.record.message_ids.id)]) - self.assertEqual(tracking_values[0].tracking_sequence, 1) - self.assertEqual(tracking_values[1].tracking_sequence, 2) - self.assertEqual(tracking_values[2].tracking_sequence, 100) - - def test_track_groups(self): - # patch the group attribute - field = self.record._fields['email_from'] - self.addCleanup(setattr, field, 'groups', field.groups) - field.groups = 'base.group_erp_manager' - - self.record.sudo().write({'email_from': 'X'}) - self.flush_tracking() - - msg_emp = self.record.message_ids.message_format() - msg_sudo = self.record.sudo().message_ids.message_format() - self.assertFalse(msg_emp[0].get('tracking_value_ids'), "should not have protected tracking values") - self.assertTrue(msg_sudo[0].get('tracking_value_ids'), "should have protected tracking values") - - def test_notify_track_groups(self): - # patch the group attribute - field = self.record._fields['email_from'] - self.addCleanup(setattr, field, 'groups', field.groups) - field.groups = 'base.group_erp_manager' - - self.record.sudo().write({'email_from': 'X'}) - self.flush_tracking() - - msg_emp = self.record._notify_prepare_template_context(self.record.message_ids, {}) - msg_sudo = self.record.sudo()._notify_prepare_template_context(self.record.message_ids, {}) - self.assertFalse(msg_emp.get('tracking_values'), "should not have protected tracking values") - self.assertTrue(msg_sudo.get('tracking_values'), "should have protected tracking values") - - def test_unlinked_field(self): - record_sudo = self.record.sudo() - record_sudo.write({'email_from': 'X'}) # create a tracking value - self.flush_tracking() - self.assertEqual(len(record_sudo.message_ids.tracking_value_ids), 1) - ir_model_field = self.env['ir.model.fields'].search([ - ('model', '=', 'mail.test.full'), - ('name', '=', 'email_from')]) - ir_model_field.with_context(_force_unlink=True).unlink() - self.assertEqual(len(record_sudo.message_ids.tracking_value_ids), 0) - def test_create_partner_from_tracking_multicompany(self): company1 = self.env['res.company'].create({'name': 'company1'}) self.env.user.write({'company_ids': [(4, company1.id, False)]}) @@ -334,3 +281,61 @@ class TestTracking(TestMailCommon): ('partner_name', 'char', 'Fool', 'Bar'), ('partner_email', 'char', 'foo@example.com', 'bar@example.com'), ]) + + +@tagged('mail_track') +class TestTrackingInternals(TestMailCommon): + + def setUp(self): + super(TestTrackingInternals, self).setUp() + + record = self.env['mail.test.full'].with_user(self.user_employee).with_context(self._test_context).create({ + 'name': 'Test', + }) + self.flush_tracking() + self.record = record.with_context(mail_notrack=False) + + def test_track_groups(self): + field = self.record._fields['email_from'] + self.addCleanup(setattr, field, 'groups', field.groups) + field.groups = 'base.group_erp_manager' + + self.record.sudo().write({'email_from': 'X'}) + self.flush_tracking() + + msg_emp = self.record.message_ids.message_format() + msg_sudo = self.record.sudo().message_ids.message_format() + self.assertFalse(msg_emp[0].get('tracking_value_ids'), "should not have protected tracking values") + self.assertTrue(msg_sudo[0].get('tracking_value_ids'), "should have protected tracking values") + + msg_emp = self.record._notify_prepare_template_context(self.record.message_ids, {}) + msg_sudo = self.record.sudo()._notify_prepare_template_context(self.record.message_ids, {}) + self.assertFalse(msg_emp.get('tracking_values'), "should not have protected tracking values") + self.assertTrue(msg_sudo.get('tracking_values'), "should have protected tracking values") + + def test_track_sequence(self): + """ Update some tracked fields and check that the mail.tracking.value are ordered according to their tracking_sequence""" + self.record.write({ + 'name': 'Zboub', + 'customer_id': self.user_admin.partner_id.id, + 'user_id': self.user_admin.id, + 'umbrella_id': self.env['mail.test'].with_context(mail_create_nosubscribe=True).create({'name': 'Umbrella'}).id + }) + self.flush_tracking() + self.assertEqual(len(self.record.message_ids), 1, 'should have 1 tracking message') + + tracking_values = self.env['mail.tracking.value'].search([('mail_message_id', '=', self.record.message_ids.id)]) + self.assertEqual(tracking_values[0].tracking_sequence, 1) + self.assertEqual(tracking_values[1].tracking_sequence, 2) + self.assertEqual(tracking_values[2].tracking_sequence, 100) + + def test_unlinked_field(self): + record_sudo = self.record.sudo() + record_sudo.write({'email_from': 'new_value'}) # create a tracking value + self.flush_tracking() + self.assertEqual(len(record_sudo.message_ids.tracking_value_ids), 1) + ir_model_field = self.env['ir.model.fields'].search([ + ('model', '=', 'mail.test.full'), + ('name', '=', 'email_from')]) + ir_model_field.with_context(_force_unlink=True).unlink() + self.assertEqual(len(record_sudo.message_ids.tracking_value_ids), 0) diff --git a/addons/test_mail/tests/test_odoobot.py b/addons/test_mail/tests/test_odoobot.py deleted file mode 100644 index 2e4dc55490a..00000000000 --- a/addons/test_mail/tests/test_odoobot.py +++ /dev/null @@ -1,132 +0,0 @@ -# -*- coding: utf-8 -*- -# Part of Odoo. See LICENSE file for full copyright and licensing details. - -from unittest.mock import patch - -from odoo.addons.test_mail.tests.common import TestMailCommon, TestRecipients -from odoo.tests import tagged -from odoo.tools import mute_logger - - -@tagged("odoobot") -class TestOdoobot(TestMailCommon, TestRecipients): - - @classmethod - def setUpClass(cls): - super(TestOdoobot, cls).setUpClass() - cls.test_record = cls.env['mail.test.simple'].with_context(cls._test_context).create({'name': 'Test', 'email_from': 'ignasse@example.com'}) - - cls.odoobot = cls.env.ref("base.partner_root") - cls.message_post_default_kwargs = { - 'body': '', - 'attachment_ids': [], - 'message_type': 'comment', - 'partner_ids': [], - 'subtype_xmlid': 'mail.mt_comment' - } - cls.odoobot_ping_body = '<a href="http://odoo.com/web#model=res.partner&id=%s" class="o_mail_redirect" data-oe-id="%s" data-oe-model="res.partner" target="_blank">@OdooBot</a>' % (cls.odoobot.id, cls.odoobot.id) - cls.test_record_employe = cls.test_record.with_user(cls.user_employee) - - @mute_logger('odoo.addons.mail.models.mail_mail') - def test_fetch_listener(self): - channel = self.env['mail.channel'].with_user(self.user_employee).init_odoobot() - partners = self.env['mail.channel'].channel_fetch_listeners(channel.uuid) - odoobot = self.env.ref("base.partner_root") - odoobot_in_fetch_listeners = [partner for partner in partners if partner['id'] == odoobot.id] - self.assertEqual(len(odoobot_in_fetch_listeners), 1, 'odoobot should appear only once in channel_fetch_listeners') - - @mute_logger('odoo.addons.mail.models.mail_mail') - def test_odoobot_ping(self): - kwargs = self.message_post_default_kwargs.copy() - kwargs.update({'body': self.odoobot_ping_body, 'partner_ids': [self.odoobot.id, self.user_admin.partner_id.id]}) - - with patch('random.choice', lambda x: x[0]): - self.assertNextMessage( - self.test_record_employe.with_context({'mail_post_autofollow': True}).message_post(**kwargs), - sender=self.odoobot, - answer=False - ) - # Odoobot should not be a follower but user_employee and user_admin should - follower = self.test_record.message_follower_ids.mapped('partner_id') - self.assertNotIn(self.odoobot, follower) - self.assertIn(self.user_employee.partner_id, follower) - self.assertIn(self.user_admin.partner_id, follower) - - @mute_logger('odoo.addons.mail.models.mail_mail') - def test_onboarding_flow(self): - kwargs = self.message_post_default_kwargs.copy() - channel = self.env['mail.channel'].with_user(self.user_employee).init_odoobot() - - kwargs['body'] = 'tagada 😊' - self.assertNextMessage( - channel.message_post(**kwargs), - sender=self.odoobot, - answer=("attachment",) - ) - kwargs['body'] = '' - attachment = self.env['ir.attachment'].with_user(self.user_employee).create({ - 'datas': 'bWlncmF0aW9uIHRlc3Q=', - 'name': 'picture_of_your_dog.doc', - 'res_model': 'mail.compose.message', - }) - kwargs['attachment_ids'] = [attachment.id] - last_message = self.assertNextMessage( - channel.message_post(**kwargs), - sender=self.odoobot, - answer=("help",) - ) - kwargs['attachment_ids'] = [] - - channel.execute_command(command="help") - self.assertNextMessage( - last_message, # no message will be post with command help, use last odoobot message instead - sender=self.odoobot, - answer=("@OdooBot",) - ) - # we dont test the end of the flow since it will depends of the installed apps (livechat) - self.user_employee.odoobot_state = "idle" - kwargs['partner_ids'] = [] - kwargs['body'] = "I love you" - self.assertNextMessage( - channel.message_post(**kwargs), - sender=self.odoobot, - answer=("too human for me",) - ) - kwargs['body'] = "Go fuck yourself" - self.assertNextMessage( - channel.message_post(**kwargs), - sender=self.odoobot, - answer=("I have feelings",) - ) - - @mute_logger('odoo.addons.mail.models.mail_mail') - def test_odoobot_no_default_answer(self): - kwargs = self.message_post_default_kwargs.copy() - kwargs.update({'body': "I'm not talking to @odoobot right now", 'partner_ids': []}) - self.assertNextMessage( - self.test_record_employe.message_post(**kwargs), - answer=False - ) - - def assertNextMessage(self, message, answer=None, sender=None): - last_message = self.env['mail.message'].search([('id', '=', message.id + 1)]) - if last_message: - body = last_message.body.replace('<p>', '').replace('</p>', '') - else: - self.assertFalse(answer, "No last message found when an answer was expect") - if answer is not None: - if answer and not last_message: - self.assertTrue(False, "No last message found") - if isinstance(answer, list): - self.assertIn(body, answer) - elif isinstance(answer, tuple): - for elem in answer: - self.assertIn(elem, body) - elif not answer: - self.assertFalse(last_message, "No answer should have been post") - return - else: - self.assertEqual(body, answer) - if sender: - self.assertEqual(sender, last_message.author_id) - return last_message diff --git a/addons/test_mail/tests/test_performance.py b/addons/test_mail/tests/test_performance.py index de82171251b..1d8ab7729c9 100644 --- a/addons/test_mail/tests/test_performance.py +++ b/addons/test_mail/tests/test_performance.py @@ -183,6 +183,11 @@ class TestMailAPIPerformance(BaseMailPerformance): 'notification_type': 'inbox', 'groups_id': [(6, 0, [self.env.ref('base.group_user').id])], }) + + # automatically follow activities, for backward compatibility concerning query count + self.env.ref('mail.mt_activities').write({'default': True}) + + def _create_test_records(self): self.test_record_full = self.env['mail.test.full'].with_context(self._quick_create_ctx).create({ 'name': 'TestRecord', 'customer_id': self.customer.id, @@ -199,9 +204,6 @@ class TestMailAPIPerformance(BaseMailPerformance): 'email_to': '${("%s Customer <%s>" % (object.name, object.email_from)) | safe}', }) - # automatically follow activities, for backward compatibility concerning query count - self.env.ref('mail.mt_activities').write({'default': True}) - @users('__system__', 'emp') @warmup def test_adv_activity(self): @@ -255,6 +257,7 @@ class TestMailAPIPerformance(BaseMailPerformance): @warmup @mute_logger('odoo.tests', 'odoo.addons.mail.models.mail_mail') def test_mail_composer(self): + self._create_test_records() test_record = self.env['mail.test.full'].browse(self.test_record_full.id) customer_id = self.customer.id with self.assertQueryCount(__system__=4, emp=4): @@ -274,6 +277,7 @@ class TestMailAPIPerformance(BaseMailPerformance): @warmup @mute_logger('odoo.tests', 'odoo.addons.mail.models.mail_mail', 'odoo.models.unlink') def test_mail_composer_w_template(self): + self._create_test_records() test_record = self.env['mail.test.full'].browse(self.test_record_full.id) test_template = self.env['mail.template'].browse(self.test_template_full.id) # TODO FIXME non deterministic, last check 25 Mar 2020. Runbot at most +7 compared to local. @@ -395,6 +399,25 @@ class TestMailAPIPerformance(BaseMailPerformance): with self.assertQueryCount(__system__=2, emp=2): record.message_subscribe(partner_ids=self.user_test.partner_id.ids, subtype_ids=subtype_ids) + @mute_logger('odoo.models.unlink') + @users('__system__', 'emp') + @warmup + def test_message_track(self): + record = self.env['mail.test.tracking'].create({'name': 'Zizizatestname'}) + with self.assertQueryCount(__system__=3, emp=3): + record.write({'name': 'Zizizanewtestname'}) + record.flush() + + with self.assertQueryCount(__system__=5, emp=5): + record.write({'field_%s' % (i): 'Tracked Char Fields %s' % (i) for i in range(3)}) + record.flush() + + with self.assertQueryCount(__system__=6, emp=6): + record.write({'field_%s' % (i): 'Field Without Cache %s' % (i) for i in range(3)}) + record.flush() + record.write({'field_%s' % (i): 'Field With Cache %s' % (i) for i in range(3)}) + record.flush() + @tagged('mail_performance') class TestMailComplexPerformance(BaseMailPerformance): @@ -949,27 +972,3 @@ class TestMailHeavyPerformancePost(BaseMailPerformance): self.assertEqual(self.attachements.mapped('res_model'), [record._name for i in range(3)]) self.assertEqual(self.attachements.mapped('res_id'), [record.id for i in range(3)]) # self.assertEqual(record.message_ids[0].notified_partner_ids, []) - - -@tagged('mail_performance') -class TestTrackingPerformance(BaseMailPerformance): - - @users('__system__', 'demo') - @warmup - def test_tracking_multiple_fields(self): - """ Check that tracking multiple fields is scalable """ - - record = self.env['mail.test.tracking'].create({'name': 'Zizizatestname'}) - with self.assertQueryCount(__system__=3, demo=3): - record.write({'name': 'Zizizanewtestname'}) - record.flush() - - with self.assertQueryCount(__system__=5, demo=5): - record.write({'field_%s' % (i): 'Tracked Char Fields %s' % (i) for i in range(3)}) - record.flush() - - with self.assertQueryCount(__system__=6, demo=6): - record.write({'field_%s' % (i): 'Field Without Cache %s' % (i) for i in range(3)}) - record.flush() - record.write({'field_%s' % (i): 'Field With Cache %s' % (i) for i in range(3)}) - record.flush() diff --git a/addons/test_mail/tests/test_update_notification.py b/addons/test_mail/tests/test_update_notification.py deleted file mode 100644 index 7621e4056a1..00000000000 --- a/addons/test_mail/tests/test_update_notification.py +++ /dev/null @@ -1,11 +0,0 @@ -# -*- coding: utf-8 -*- -from odoo.tests.common import TransactionCase - - -class TestUpdateNotification(TransactionCase): - def test_user_count(self): - ping_msg = self.env['publisher_warranty.contract'].with_context(active_test=False)._get_message() - user_count = self.env['res.users'].search_count([('active', '=', True)]) - self.assertEqual(ping_msg.get('nbr_users'), user_count, 'Update Notification: Users count is badly computed in ping message') - share_user_count = self.env['res.users'].search_count([('active', '=', True), ('share', '=', True)]) - self.assertEqual(ping_msg.get('nbr_share_users'), share_user_count, 'Update Notification: Portal Users count is badly computed in ping message') |
