[IMP] test_mail: add some additional asserts about authorship

As this matter is a bit complicated due to synchronization / desynchronization
of author and email, some asserts are added to help understanding the changes.
To ease converting field into an editable stored field, some additional
checks are added in tests to ease debugging and avoid regressions.

Task-2088884 (Mail: Use editable computed stored fields in composer)

Part-of: odoo/odoo#107356
This commit is contained in:
Thibault Delavallée
2023-01-27 19:56:02 +01:00
parent 587555d558
commit 2c87910f2c
2 changed files with 47 additions and 15 deletions
@@ -78,6 +78,9 @@ class TestServerActionsEmail(TestMailCommon, TestServerActionsBase):
with self.assertSinglePostNotifications(
[{'partner': self.test_partner, 'type': 'email', 'status': 'ready'}],
message_info={'content': 'Hello %s' % self.test_partner.name,
'fields_values': {
'author_id': self.env.user.partner_id,
},
'message_type': 'notification',
'subtype': 'mail.mt_comment',
}
+44 -15
View File
@@ -570,51 +570,62 @@ class TestComposerInternals(TestMailComposer):
self.assertEqual(composer.composition_mode, composition_mode)
self.assertEqual(composer.email_from, self.env.user.email_formatted)
# author values reset email (FIXME: currently not synchronized)
# author update should reset email (FIXME: currently not synchronized)
composer.write({'author_id': self.partner_1})
self.assertEqual(composer.author_id, self.partner_1)
self.assertEqual(composer.email_from, self.env.user.email_formatted)
self.assertEqual(composer.email_from, self.env.user.email_formatted,
'MailComposer: TODO: author / email_from are not synchronized')
# self.assertEqual(composer.email_from, self.partner_1.email_formatted)
# changing template should update its email_from
composer.write({'template_id': self.template.id, 'author_id': self.env.user.partner_id})
composer.write({'template_id': self.template.id})
# currently onchange necessary
composer._onchange_template_id_wrapper()
self.assertEqual(composer.author_id, self.env.user.partner_id,
'MailComposer: should take value given by user')
if composition_mode == 'comment' and not batch:
self.assertEqual(composer.author_id, self.partner_1,
'MailComposer: TODO: should try to synchronize with email_from')
self.assertEqual(composer.email_from, self.test_record.user_id.email_formatted,
f'MailComposer: should take email_from rendered from template ({composition_mode}-{batch})')
else:
self.assertEqual(composer.author_id, self.partner_1,
'MailComposer: TODO: email_from is raw, what to do with it ?')
self.assertEqual(composer.email_from, self.template.email_from,
f'MailComposer: should take email_from raw from template ({composition_mode}-{batch})')
# manual values are kept over template values
composer.write({'email_from': self.test_from})
self.assertEqual(composer.author_id, self.env.user.partner_id)
self.assertEqual(composer.email_from, self.test_from)
self.assertEqual(composer.author_id, self.partner_1)
self.assertEqual(composer.email_from, self.test_from,
'MailComposer: TODO: author / email_from are not synchronized')
# update with template with void values: void value is not forced in
# rendering mode as well as when copying template values
composer.write({'template_id': template_void.id})
# currently onchange necessary
composer._onchange_template_id_wrapper()
if composition_mode == 'comment' and not batch:
self.assertEqual(composer.author_id, self.env.user.partner_id)
self.assertEqual(composer.author_id, self.partner_1,
'MailComposer: TODO: author / email_from are not synchronized')
self.assertEqual(composer.email_from, self.test_from)
else:
self.assertEqual(composer.author_id, self.env.user.partner_id)
self.assertEqual(composer.author_id, self.partner_1,
'MailComposer: TODO: author / email_from are not synchronized')
self.assertEqual(composer.email_from, self.test_from)
# reset template: values are reset due to call to default_get
composer.write({'template_id': False})
# currently onchange necessary
composer._onchange_template_id_wrapper()
if composition_mode == 'comment' and not batch:
self.assertEqual(composer.author_id, self.env.user.partner_id)
self.assertEqual(composer.author_id, self.partner_1,
'MailComposer: TODO: author / email_from are not synchronized')
self.assertEqual(composer.email_from, self.env.user.email_formatted)
else:
self.assertEqual(composer.author_id, self.env.user.partner_id)
self.assertEqual(composer.author_id, self.partner_1,
'MailComposer: TODO: author / email_from are not synchronized')
self.assertEqual(composer.email_from, self.env.user.email_formatted)
@users('employee')
@@ -1397,6 +1408,18 @@ class TestComposerResultsComment(TestMailComposer, CronMixinCase):
# open a composer and run it in comment mode
composer_form = Form(self.env['mail.compose.message'].with_context(ctx))
composer = composer_form.save()
# ensure some parameters used afterwards
if batch:
author = self.env.user.partner_id
self.assertEqual(composer.author_id, author,
'Author cannot be synchronized with a raw email_from')
self.assertEqual(composer.email_from, self.template.email_from)
else:
author = self.env.user.partner_id
self.assertEqual(composer.author_id, author,
'Author cannot be synchronized with a raw email_from')
self.assertEqual(composer.email_from, self.partner_employee_2.email_formatted)
self.assertFalse(composer.reply_to_force_new, 'Mail: thread-enabled models should use auto thread by default')
# due to scheduled_date, cron for sending notification will be used
@@ -1469,7 +1492,7 @@ class TestComposerResultsComment(TestMailComposer, CronMixinCase):
message = test_record.message_ids[0]
self.assertMailMail(self.partner_employee_2, 'sent',
mail_message=message,
author=self.partner_employee, # author != email_from (template sets only email_from)
author=author, # author != email_from (template sets only email_from)
email_values={
'body_content': f'TemplateBody {test_record.name}',
'email_from': test_record.user_id.email_formatted, # set by template
@@ -1487,7 +1510,7 @@ class TestComposerResultsComment(TestMailComposer, CronMixinCase):
)
self.assertMailMail(test_record.customer_id + new_partners, 'sent',
mail_message=message,
author=self.partner_employee, # author != email_from (template sets only email_from)
author=author, # author != email_from (template sets only email_from)
email_values={
'body_content': f'TemplateBody {test_record.name}',
'email_from': test_record.user_id.email_formatted, # set by template
@@ -1762,6 +1785,12 @@ class TestComposerResultsMass(TestMailComposer):
default_template_id=self.template.id)
))
composer = composer_form.save()
# ensure some parameters used afterwards
author = self.env.user.partner_id
self.assertEqual(composer.author_id, author,
'Author cannot be synchronized with a raw email_from')
self.assertEqual(composer.email_from, self.template.email_from)
with self.mock_mail_gateway(mail_unlink_sent=False), \
freeze_time(self.reference_now):
composer._action_send_mail()
@@ -1798,7 +1827,7 @@ class TestComposerResultsMass(TestMailComposer):
self.assertMailMail(record.customer_id + new_partners + self.partner_admin,
'sent',
mail_message=message,
author=self.partner_employee,
author=author,
email_values={
'attachments_info': [
{'name': 'AttFileName_00.txt', 'raw': b'AttContent_00', 'type': 'text/plain'},
@@ -1843,7 +1872,7 @@ class TestComposerResultsMass(TestMailComposer):
self.assertMailMail(record.customer_id + new_partners + self.partner_admin,
'sent',
mail_message=record.message_ids[0],
author=self.partner_employee,
author=author,
email_values={
'email_from': self.partner_employee_2.email_formatted,
'reply_to': self.partner_employee_2.email_formatted,