Hello ${object.name}
Adding stuff on ${object.name}
datetime has been updated to
Hello Test
') - 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)]}) @@ -234,7 +181,7 @@ class TestTracking(TestMailCommon): mail_template = self.env['mail.template'].create({ 'name': 'SPECIAL CONTENT UNLOCKED', 'subject': 'SPECIAL CONTENT UNLOCKED', - 'model_id': self.env.ref('test_mail.model_mail_test').id, + 'model_id': self.env.ref('test_mail.model_mail_test_container').id, 'auto_delete': True, 'body_html': '''Hello ${object.name}
', 'email_from': '${object.user_id.email_formatted | safe}', @@ -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,7 +257,8 @@ class TestMailAPIPerformance(BaseMailPerformance): @warmup @mute_logger('odoo.tests', 'odoo.addons.mail.models.mail_mail') def test_mail_composer(self): - test_record = self.env['mail.test.full'].browse(self.test_record_full.id) + self._create_test_records() + test_record = self.env['mail.test.ticket'].browse(self.test_record_full.id) customer_id = self.customer.id with self.assertQueryCount(__system__=4, emp=4): composer = self.env['mail.compose.message'].with_context({ @@ -274,7 +277,8 @@ class TestMailAPIPerformance(BaseMailPerformance): @warmup @mute_logger('odoo.tests', 'odoo.addons.mail.models.mail_mail', 'odoo.models.unlink') def test_mail_composer_w_template(self): - test_record = self.env['mail.test.full'].browse(self.test_record_full.id) + self._create_test_records() + test_record = self.env['mail.test.ticket'].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. with self.assertQueryCount(__system__=28, emp=29): @@ -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.performance.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): @@ -424,8 +447,8 @@ class TestMailComplexPerformance(BaseMailPerformance): 'name': 'Test Customer', 'email': 'test@example.com' }) - self.umbrella = self.env['mail.test'].with_context(mail_create_nosubscribe=True).create({ - 'name': 'Test Umbrella', + self.container = self.env['mail.test.container'].with_context(mail_create_nosubscribe=True).create({ + 'name': 'Test Container', 'customer_id': self.customer.id, 'alias_name': 'test-alias', }) @@ -433,12 +456,12 @@ class TestMailComplexPerformance(BaseMailPerformance): 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.container.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] + self.env.ref('test_mail.st_mail_test_container_child_full').id] ) # `test_complex_mail_mail_send` - self.umbrella.flush() + self.container.flush() @mute_logger('odoo.tests', 'odoo.addons.mail.models.mail_mail', 'odoo.models.unlink') @users('__system__', 'emp') @@ -449,8 +472,8 @@ class TestMailComplexPerformance(BaseMailPerformance): 'body': 'Test
', 'author_id': self.env.user.partner_id.id, 'email_from': self.env.user.partner_id.email, - 'model': 'mail.test', - 'res_id': self.umbrella.id, + 'model': 'mail.test.container', + 'res_id': self.container.id, }) mail = self.env['mail.mail'].sudo().create({ 'body_html': 'Test
', @@ -462,14 +485,14 @@ class TestMailComplexPerformance(BaseMailPerformance): self.env['mail.mail'].sudo().browse(mail_ids).send() self.assertEqual(mail.body_html, 'Test
') - self.assertEqual(mail.reply_to, formataddr(('%s %s' % (self.env.company.name, self.umbrella.name), 'test-alias@example.com'))) + self.assertEqual(mail.reply_to, formataddr(('%s %s' % (self.env.company.name, self.container.name), 'test-alias@example.com'))) @mute_logger('odoo.tests', 'odoo.addons.mail.models.mail_mail', 'odoo.models.unlink') @users('__system__', 'emp') @warmup def test_complex_message_post(self): - self.umbrella.message_subscribe(self.user_portal.partner_id.ids) - record = self.umbrella.with_user(self.env.user) + self.container.message_subscribe(self.user_portal.partner_id.ids) + record = self.container.with_user(self.env.user) with self.assertQueryCount(__system__=68, emp=69): record.message_post( @@ -484,9 +507,9 @@ class TestMailComplexPerformance(BaseMailPerformance): @users('__system__', 'emp') @warmup def test_complex_message_post_template(self): - self.umbrella.message_subscribe(self.user_portal.partner_id.ids) - record = self.umbrella.with_user(self.env.user) - template_id = self.env.ref('test_mail.mail_test_tpl').id + self.container.message_subscribe(self.user_portal.partner_id.ids) + record = self.container.with_user(self.env.user) + template_id = self.env.ref('test_mail.mail_test_container_tpl').id with self.assertQueryCount(__system__=78, emp=80): record.message_post_with_template(template_id, message_type='comment', composition_mode='comment') @@ -500,11 +523,11 @@ class TestMailComplexPerformance(BaseMailPerformance): 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') + subtypes = self.env.ref('mail.mt_comment') | self.env.ref('test_mail.st_mail_test_ticket_container_upd') subtype_ids = subtypes.ids - rec = self.env['mail.test.full'].create({ + rec = self.env['mail.test.ticket'].create({ 'name': 'Test', - 'umbrella_id': False, + 'container_id': False, 'customer_id': False, 'user_id': self.user_portal.id, }) @@ -551,9 +574,9 @@ class TestMailComplexPerformance(BaseMailPerformance): @warmup def test_complex_tracking_assignation(self): """ Assignation performance test on already-created record """ - rec = self.env['mail.test.full'].create({ + rec = self.env['mail.test.ticket'].create({ 'name': 'Test', - 'umbrella_id': self.umbrella.id, + 'container_id': self.container.id, 'customer_id': self.customer.id, 'user_id': self.env.uid, }) @@ -566,7 +589,7 @@ class TestMailComplexPerformance(BaseMailPerformance): self.assertEqual(rec1.message_ids[0].subtype_id, self.env.ref('mail.mt_note')) self.assertEqual(rec1.message_ids[0].notified_partner_ids, self.env['res.partner']) # creation message - self.assertEqual(rec1.message_ids[1].subtype_id, self.env.ref('test_mail.st_mail_test_full_umbrella_upd')) + self.assertEqual(rec1.message_ids[1].subtype_id, self.env.ref('test_mail.st_mail_test_ticket_container_upd')) self.assertEqual(rec1.message_ids[1].notified_partner_ids, self.partners) self.assertEqual(len(rec1.message_ids), 2) @@ -575,14 +598,14 @@ class TestMailComplexPerformance(BaseMailPerformance): @warmup def test_complex_tracking_subscription_create(self): """ Creation performance test involving auto subscription, assignation, tracking with subtype and template send. """ - umbrella_id = self.umbrella.id + container_id = self.container.id customer_id = self.customer.id user_id = self.user_portal.id with self.assertQueryCount(__system__=116, emp=117): - rec = self.env['mail.test.full'].create({ + rec = self.env['mail.test.ticket'].create({ 'name': 'Test', - 'umbrella_id': umbrella_id, + 'container_id': container_id, 'customer_id': customer_id, 'user_id': user_id, }) @@ -590,7 +613,7 @@ class TestMailComplexPerformance(BaseMailPerformance): rec1 = rec.with_context(active_test=False) # to see inactive records self.assertEqual(rec1.message_partner_ids, self.partners | self.env.user.partner_id | self.user_portal.partner_id) # creation message - self.assertEqual(rec1.message_ids[0].subtype_id, self.env.ref('test_mail.st_mail_test_full_umbrella_upd')) + self.assertEqual(rec1.message_ids[0].subtype_id, self.env.ref('test_mail.st_mail_test_ticket_container_upd')) self.assertEqual(rec1.message_ids[0].notified_partner_ids, self.partners | self.user_portal.partner_id) self.assertEqual(len(rec1.message_ids), 1) @@ -599,9 +622,9 @@ class TestMailComplexPerformance(BaseMailPerformance): @warmup def test_complex_tracking_subscription_subtype(self): """ Write performance test involving auto subscription, tracking with subtype """ - rec = self.env['mail.test.full'].create({ + rec = self.env['mail.test.ticket'].create({ 'name': 'Test', - 'umbrella_id': False, + 'container_id': False, 'customer_id': False, 'user_id': self.user_portal.id, }) @@ -611,12 +634,12 @@ class TestMailComplexPerformance(BaseMailPerformance): with self.assertQueryCount(__system__=83, emp=83): rec.write({ 'name': 'Test2', - 'umbrella_id': self.umbrella.id, + 'container_id': self.container.id, }) self.assertEqual(rec1.message_partner_ids, self.partners | self.env.user.partner_id | self.user_portal.partner_id) # write tracking message - self.assertEqual(rec1.message_ids[0].subtype_id, self.env.ref('test_mail.st_mail_test_full_umbrella_upd')) + self.assertEqual(rec1.message_ids[0].subtype_id, self.env.ref('test_mail.st_mail_test_ticket_container_upd')) self.assertEqual(rec1.message_ids[0].notified_partner_ids, self.partners | self.user_portal.partner_id) # creation message self.assertEqual(rec1.message_ids[1].subtype_id, self.env.ref('mail.mt_note')) @@ -628,17 +651,17 @@ class TestMailComplexPerformance(BaseMailPerformance): @warmup def test_complex_tracking_subscription_write(self): """ Write performance test involving auto subscription, tracking with subtype and template send """ - umbrella_id = self.umbrella.id + container_id = self.container.id customer_id = self.customer.id - umbrella2 = self.env['mail.test'].with_context(mail_create_nosubscribe=True).create({ - 'name': 'Test Umbrella 2', + container2 = self.env['mail.test.container'].with_context(mail_create_nosubscribe=True).create({ + 'name': 'Test Container 2', 'customer_id': False, 'alias_name': False, }) - rec = self.env['mail.test.full'].create({ + rec = self.env['mail.test.ticket'].create({ 'name': 'Test', - 'umbrella_id': umbrella2.id, + 'container_id': container2.id, 'customer_id': False, 'user_id': self.user_portal.id, }) @@ -648,16 +671,16 @@ class TestMailComplexPerformance(BaseMailPerformance): with self.assertQueryCount(__system__=91, emp=91): rec.write({ 'name': 'Test2', - 'umbrella_id': umbrella_id, + 'container_id': container_id, 'customer_id': customer_id, }) self.assertEqual(rec1.message_partner_ids, self.partners | self.env.user.partner_id | self.user_portal.partner_id) # write tracking message - self.assertEqual(rec1.message_ids[0].subtype_id, self.env.ref('test_mail.st_mail_test_full_umbrella_upd')) + self.assertEqual(rec1.message_ids[0].subtype_id, self.env.ref('test_mail.st_mail_test_ticket_container_upd')) self.assertEqual(rec1.message_ids[0].notified_partner_ids, self.partners | self.user_portal.partner_id) # creation message - self.assertEqual(rec1.message_ids[1].subtype_id, self.env.ref('test_mail.st_mail_test_full_umbrella_upd')) + self.assertEqual(rec1.message_ids[1].subtype_id, self.env.ref('test_mail.st_mail_test_ticket_container_upd')) self.assertEqual(rec1.message_ids[1].notified_partner_ids, self.user_portal.partner_id) self.assertEqual(len(rec1.message_ids), 2) @@ -668,12 +691,12 @@ class TestMailComplexPerformance(BaseMailPerformance): """ Write performance test involving assignation, tracking with template """ customer_id = self.customer.id self.assertTrue(self.env.registry.ready, "We need to simulate that registery is ready") - rec = self.env['mail.test.full'].create({ + rec = self.env['mail.test.ticket'].create({ 'name': 'Test', - 'umbrella_id': self.umbrella.id, + 'container_id': self.container.id, 'customer_id': False, 'user_id': self.user_portal.id, - 'mail_template': self.env.ref('test_mail.mail_test_full_tracking_tpl').id, + 'mail_template': self.env.ref('test_mail.mail_test_ticket_tracking_tpl').id, }) rec1 = rec.with_context(active_test=False) # to see inactive records self.assertEqual(rec1.message_partner_ids, self.partners | self.env.user.partner_id | self.user_portal.partner_id) @@ -692,7 +715,7 @@ class TestMailComplexPerformance(BaseMailPerformance): self.assertEqual(rec1.message_ids[1].subtype_id, self.env.ref('mail.mt_note')) self.assertEqual(rec1.message_ids[1].notified_partner_ids, self.env['res.partner']) # creation message - self.assertEqual(rec1.message_ids[2].subtype_id, self.env.ref('test_mail.st_mail_test_full_umbrella_upd')) + self.assertEqual(rec1.message_ids[2].subtype_id, self.env.ref('test_mail.st_mail_test_ticket_container_upd')) self.assertEqual(rec1.message_ids[2].notified_partner_ids, self.partners | self.user_portal.partner_id) self.assertEqual(len(rec1.message_ids), 3) @@ -706,16 +729,16 @@ class TestMailComplexPerformance(BaseMailPerformance): Those messages might not make sense functionally but they are crafted to cover as much of the code as possible in regard to number of queries. """ - name_field = self.env['ir.model.fields']._get(self.umbrella._name, 'name') - customer_id_field = self.env['ir.model.fields']._get(self.umbrella._name, 'customer_id') + name_field = self.env['ir.model.fields']._get(self.container._name, 'name') + customer_id_field = self.env['ir.model.fields']._get(self.container._name, 'customer_id') messages = self.env['mail.message'].sudo().create([{ 'subject': 'Test 0', 'body': 'Test 0
', 'author_id': self.partners[0].id, 'email_from': self.partners[0].email, - 'model': 'mail.test', - 'res_id': self.umbrella.id, + 'model': 'mail.test.container', + 'res_id': self.container.id, 'subtype_id': self.env['ir.model.data'].xmlid_to_res_id('mail.mt_comment'), 'attachment_ids': [ (0, 0, { @@ -758,8 +781,8 @@ class TestMailComplexPerformance(BaseMailPerformance): 'body': 'Test 1
', 'author_id': self.partners[1].id, 'email_from': self.partners[1].email, - 'model': 'mail.test', - 'res_id': self.umbrella.id, + 'model': 'mail.test.container', + 'res_id': self.container.id, 'subtype_id': self.env['ir.model.data'].xmlid_to_res_id('mail.mt_note'), 'attachment_ids': [ (0, 0, { @@ -821,7 +844,7 @@ class TestMailHeavyPerformancePost(BaseMailPerformance): 'name': 'customer', 'email': 'customer@example.com', }) - self.record = self.env['mail.test'].with_context(mail_create_nosubscribe=True).create({ + self.record = self.env['mail.test.container'].with_context(mail_create_nosubscribe=True).create({ 'name': 'Test record', 'customer_id': self.customer.id, 'alias_name': 'test-alias', @@ -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_full/tests/__init__.py b/addons/test_mail_full/tests/__init__.py index ce173406381..149facf9fa7 100644 --- a/addons/test_mail_full/tests/__init__.py +++ b/addons/test_mail_full/tests/__init__.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- from . import common +from . import test_odoobot from . import test_phone_blacklist from . import test_mass_sms from . import test_sms_composer diff --git a/addons/test_mail/tests/test_odoobot.py b/addons/test_mail_full/tests/test_odoobot.py similarity index 100% rename from addons/test_mail/tests/test_odoobot.py rename to addons/test_mail_full/tests/test_odoobot.py diff --git a/addons/test_mass_mailing/models/mass_mail_test.py b/addons/test_mass_mailing/models/mass_mail_test.py index d4772433748..7b39c625a9a 100644 --- a/addons/test_mass_mailing/models/mass_mail_test.py +++ b/addons/test_mass_mailing/models/mass_mail_test.py @@ -29,6 +29,6 @@ class MassMailTestBlacklist(models.Model): user_id = fields.Many2one( 'res.users', 'Responsible', tracking=True) - umbrella_id = fields.Many2one( - 'mail.test', 'Meta Umbrella Record', + container_id = fields.Many2one( + 'mail.test.container', 'Meta Container Record', tracking=True)