From 2c87910f2c729b79a8dcbd649f1fc5f8d1f2421a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 18 Jan 2023 16:00:19 +0000 Subject: [PATCH] [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 --- addons/test_mail/tests/test_ir_actions.py | 3 + addons/test_mail/tests/test_mail_composer.py | 59 +++++++++++++++----- 2 files changed, 47 insertions(+), 15 deletions(-) diff --git a/addons/test_mail/tests/test_ir_actions.py b/addons/test_mail/tests/test_ir_actions.py index 933886377f4..b450ec6d881 100644 --- a/addons/test_mail/tests/test_ir_actions.py +++ b/addons/test_mail/tests/test_ir_actions.py @@ -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', } diff --git a/addons/test_mail/tests/test_mail_composer.py b/addons/test_mail/tests/test_mail_composer.py index 39802f9bd0d..0382c47fa59 100644 --- a/addons/test_mail/tests/test_mail_composer.py +++ b/addons/test_mail/tests/test_mail_composer.py @@ -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,