[IMP] (test_)mail: improve test tooling

Allow to return <mail.mail> records and found outgoing emails when using
asserts. It eases doing checks in some specific tests e.g. checking
notification layout usage in emails. Indeed this is quite low level and
does not really deserves its own assert tooling methods.

Update tool method generating attachment data to ease name tweak when required
in tests.

Also update query counters, and fix a test not running locally.

Task-3046371 (Mail: Better Language Support in Composer)

X-original-commit: odoo/odoo@b32d937b37
Part-of: odoo/odoo#114511
This commit is contained in:
Thibault Delavallée
2023-03-07 18:03:01 +01:00
parent 9b136383c2
commit 3147d09b90
3 changed files with 23 additions and 22 deletions
+4 -3
View File
@@ -324,7 +324,7 @@ class MockEmail(common.BaseCase, MockSmtplibCase):
def _find_sent_email(self, email_from, emails_to, subject=None):
""" Find an outgoing email based on from / to and optional subject when
havign a conflict.
having conflicts.
:return sent_email: an outgoing email generated during the mock;
"""
@@ -1248,12 +1248,13 @@ class MailCommon(common.TransactionCase, MailCase):
})
@staticmethod
def _generate_attachments_data(count, res_model, res_id, attach_values=None):
def _generate_attachments_data(count, res_model, res_id, attach_values=None, prefix=None):
# attachment visibility depends on what they are attached to
attach_values = attach_values or {}
prefix = prefix or ''
return [{
'datas': base64.b64encode(b'AttContent_%02d' % x),
'name': 'AttFileName_%02d.txt' % x,
'name': f'{prefix}AttFileName_{x:02d}.txt',
'mimetype': 'text/plain',
'res_model': res_model,
'res_id': res_id,
+18 -18
View File
@@ -288,7 +288,7 @@ class TestMailAPIPerformance(BaseMailPerformance):
def test_adv_activity_mixin(self):
record = self.env['mail.test.activity'].create({'name': 'Test'})
with self.assertQueryCount(admin=6, employee=6):
with self.assertQueryCount(admin=5, employee=5):
activity = record.action_start('Test Start')
# read activity_type to normalize cache between enterprise and community
# voip module read activity_type during create leading to one less query in enterprise on action_close
@@ -296,7 +296,7 @@ class TestMailAPIPerformance(BaseMailPerformance):
record.write({'name': 'Dupe write'})
with self.assertQueryCount(admin=15, employee=15):
with self.assertQueryCount(admin=14, employee=14):
record.action_close('Dupe feedback')
self.assertEqual(record.activity_ids, self.env['mail.activity'])
@@ -314,7 +314,7 @@ class TestMailAPIPerformance(BaseMailPerformance):
for values in self.test_attachments_vals
])
with self.assertQueryCount(admin=6, employee=6):
with self.assertQueryCount(admin=5, employee=5):
activity = record.action_start('Test Start')
#read activity_type to normalize cache between enterprise and community
#voip module read activity_type during create leading to one less query in enterprise on action_close
@@ -322,7 +322,7 @@ class TestMailAPIPerformance(BaseMailPerformance):
record.write({'name': 'Dupe write'})
with self.assertQueryCount(admin=18, employee=18): # com+tm 17/17
with self.assertQueryCount(admin=16, employee=16): # com+tm 15/15
record.action_close('Dupe feedback', attachment_ids=attachments.ids)
# notifications
@@ -369,7 +369,7 @@ class TestMailAPIPerformance(BaseMailPerformance):
'partner_ids': [(4, customer.id)],
})
with self.assertQueryCount(admin=39, employee=39):
with self.assertQueryCount(admin=38, employee=38):
composer._action_send_mail()
@users('admin', 'employee')
@@ -379,7 +379,7 @@ class TestMailAPIPerformance(BaseMailPerformance):
test_record, _test_template = self._create_test_records()
customer = self.env['res.partner'].browse(self.customer.ids)
attachments = self.env['ir.attachment'].with_user(self.env.user).create(self.test_attachments_vals)
with self.assertQueryCount(admin=12, employee=12):
with self.assertQueryCount(admin=10, employee=10):
composer_form = Form(
self.env['mail.compose.message'].with_context({
'default_composition_mode': 'comment',
@@ -393,7 +393,7 @@ class TestMailAPIPerformance(BaseMailPerformance):
composer_form.attachment_ids.add(attachment)
composer = composer_form.save()
with self.assertQueryCount(admin=49, employee=49): # tm+com 48/48
with self.assertQueryCount(admin=48, employee=48): # tm+com 47/47
composer._action_send_mail()
# notifications
@@ -447,7 +447,7 @@ class TestMailAPIPerformance(BaseMailPerformance):
test_record, test_template = self._create_test_records()
test_template.write({'attachment_ids': [(5, 0)]})
with self.assertQueryCount(admin=25, employee=25): # tm 15/15 / com 24/24
with self.assertQueryCount(admin=25, employee=25): # tm 15/15 / com 23/23
composer = self.env['mail.compose.message'].with_context({
'default_composition_mode': 'comment',
'default_model': test_record._name,
@@ -471,7 +471,7 @@ class TestMailAPIPerformance(BaseMailPerformance):
def test_mail_composer_w_template_attachments(self):
test_record, test_template = self._create_test_records()
with self.assertQueryCount(admin=25, employee=25): # tm 15/15 / com 24/24
with self.assertQueryCount(admin=25, employee=25): # tm 15/15 / com 23/23
composer = self.env['mail.compose.message'].with_context({
'default_composition_mode': 'comment',
'default_model': test_record._name,
@@ -479,7 +479,7 @@ class TestMailAPIPerformance(BaseMailPerformance):
'default_template_id': test_template.id,
}).create({})
with self.assertQueryCount(admin=45, employee=45):
with self.assertQueryCount(admin=44, employee=44):
composer._action_send_mail()
# notifications
@@ -500,7 +500,7 @@ class TestMailAPIPerformance(BaseMailPerformance):
test_template.write({'attachment_ids': [(5, 0)]})
customer = self.env['res.partner'].browse(self.customer.ids)
with self.assertQueryCount(admin=38, employee=38): # tm 28/28 / com 37/37
with self.assertQueryCount(admin=37, employee=37): # tm 27/27 / com 35/35
composer_form = Form(
self.env['mail.compose.message'].with_context({
'default_composition_mode': 'comment',
@@ -530,7 +530,7 @@ class TestMailAPIPerformance(BaseMailPerformance):
test_record, test_template = self._create_test_records()
customer = self.env['res.partner'].browse(self.customer.ids)
with self.assertQueryCount(admin=38, employee=38): # tm 28/28 / com 37/37
with self.assertQueryCount(admin=36, employee=36): # tm 26/26 / com 34/34
composer_form = Form(
self.env['mail.compose.message'].with_context({
'default_composition_mode': 'comment',
@@ -541,7 +541,7 @@ class TestMailAPIPerformance(BaseMailPerformance):
)
composer = composer_form.save()
with self.assertQueryCount(admin=65, employee=65):
with self.assertQueryCount(admin=64, employee=64):
composer._action_send_mail()
# notifications
@@ -832,7 +832,7 @@ class TestMailComplexPerformance(BaseMailPerformance):
unlinked_mails |= set(records.ids)
unlinked_mails = set()
with self.assertQueryCount(admin=43, employee=43), \
with self.assertQueryCount(admin=32, employee=32), \
patch.object(type(self.env['mail.mail']), 'unlink', _patched_unlink):
self.env['mail.mail'].sudo().browse(mails.ids).send()
@@ -1204,7 +1204,7 @@ class TestMailComplexPerformance(BaseMailPerformance):
self.env.flush_all()
self.env.invalidate_all()
with self.assertQueryCount(employee=20):
with self.assertQueryCount(employee=18):
res = messages.message_format()
self.assertEqual(len(res), 2)
for message in res:
@@ -1232,7 +1232,7 @@ class TestMailComplexPerformance(BaseMailPerformance):
self.env.flush_all()
self.env.invalidate_all()
with self.assertQueryCount(employee=15):
with self.assertQueryCount(employee=14):
res = messages.message_format()
self.assertEqual(len(res), 6)
@@ -1308,8 +1308,8 @@ class TestMailHeavyPerformancePost(BaseMailPerformance):
]
attachments = self.env['ir.attachment'].with_user(self.env.user).create(self.test_attachments_vals)
# enable_logging = self.cr._enable_logging() if self.warm else nullcontext()
# with self.assertQueryCount(employee=49), enable_logging:
with self.assertQueryCount(employee=64):
# with self.assertQueryCount(employee=63), enable_logging:
with self.assertQueryCount(employee=63):
record_container.with_context({}).message_post(
body='<p>Test body <img src="cid:cid1"> <img src="cid:cid2"></p>',
subject='Test Subject',
@@ -81,7 +81,7 @@ class TestMailPerformance(BaseMailPerformance):
record_ticket = self.env['mail.test.ticket.mc'].browse(self.record_ticket.ids)
attachments = self.env['ir.attachment'].create(self.test_attachments_vals)
with self.assertQueryCount(employee=86): # tmf: 85
with self.assertQueryCount(employee=85): # tmf: 85
new_message = record_ticket.message_post(
attachment_ids=attachments.ids,
body='<p>Test Content</p>',