[IMP] test_mail: add tests for composer when template is void
Purpose of this commit is to add tests to check current behavior of composer
when he is updated with Falsy values :
* template set, with void value for some fields that may reset or not
existing composer values;
* template being set to False, check what happens with composer values
(kept or reset);
This may change in a near future but at least it will be documented.
Task-2710804 (Mail: Clean MailThread Posting API)
closes odoo/odoo#108320
Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
This commit is contained in:
@@ -313,6 +313,11 @@ class TestComposerInternals(TestMailComposer):
|
||||
'report_name': 'TestReport for {{ object.name }}.html', # test cursor forces html
|
||||
'report_template': self.test_report.id,
|
||||
})
|
||||
template_void = self.template.copy(default={
|
||||
'attachment_ids': False,
|
||||
'report_name': False,
|
||||
'report_template': False,
|
||||
})
|
||||
attachs = self.env['ir.attachment'].search([('name', 'in', [a['name'] for a in attachment_data])])
|
||||
self.assertEqual(len(attachs), 3)
|
||||
|
||||
@@ -337,11 +342,27 @@ class TestComposerInternals(TestMailComposer):
|
||||
self.assertEqual(generated.res_model, 'mail.compose.message')
|
||||
self.assertEqual(generated.res_id, 0)
|
||||
|
||||
# update with template with void values: values are kept
|
||||
composer.write({'template_id': template_void.id})
|
||||
# currently onchange necessary
|
||||
composer._onchange_template_id_wrapper()
|
||||
self.assertEqual(composer.attachment_ids, attachs + generated)
|
||||
|
||||
# reset template: values are kept
|
||||
composer.write({'template_id': False})
|
||||
# currently onchange necessary
|
||||
composer._onchange_template_id_wrapper()
|
||||
self.assertEqual(composer.attachment_ids, attachs + generated)
|
||||
|
||||
@users('employee')
|
||||
@mute_logger('odoo.addons.mail.models.mail_mail')
|
||||
def test_mail_composer_author(self):
|
||||
""" Test author_id / email_from synchronization, in both comment and mass mail
|
||||
modes. """
|
||||
template_void = self.template.copy(default={
|
||||
'email_from': False,
|
||||
})
|
||||
|
||||
for composition_mode, batch in (('comment', False), ('mass_mail', True)):
|
||||
with self.subTest(composition_mode=composition_mode, batch=batch):
|
||||
test_records = self.test_records if batch else self.test_record
|
||||
@@ -379,10 +400,39 @@ class TestComposerInternals(TestMailComposer):
|
||||
self.assertEqual(composer.author_id, self.env.user.partner_id)
|
||||
self.assertEqual(composer.email_from, self.test_from)
|
||||
|
||||
# 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':
|
||||
self.assertEqual(composer.author_id, self.env.user.partner_id)
|
||||
self.assertEqual(composer.email_from, self.test_from)
|
||||
else:
|
||||
self.assertEqual(composer.author_id, self.env.user.partner_id)
|
||||
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':
|
||||
self.assertEqual(composer.author_id, self.env.user.partner_id)
|
||||
self.assertEqual(composer.email_from, self.env.user.email_formatted)
|
||||
else:
|
||||
self.assertEqual(composer.author_id, self.env.user.partner_id)
|
||||
self.assertEqual(composer.email_from, self.env.user.email_formatted)
|
||||
|
||||
@users('employee')
|
||||
def test_mail_composer_content(self):
|
||||
""" Test content management (subject, body, server) in both comment and
|
||||
mass mailing mode. Template update is also tested. """
|
||||
template_void = self.template.copy(default={
|
||||
'body_html': False,
|
||||
'subject': False,
|
||||
'mail_server_id': False,
|
||||
})
|
||||
|
||||
for composition_mode, batch in (('comment', False), ('mass_mail', True)):
|
||||
with self.subTest(composition_mode=composition_mode, batch=batch):
|
||||
test_records = self.test_records if batch else self.test_record
|
||||
@@ -421,26 +471,47 @@ class TestComposerInternals(TestMailComposer):
|
||||
self.assertFalse(composer.record_name)
|
||||
|
||||
# manual values is kept over template
|
||||
composer.write({'subject': 'Back to my amazing subject'})
|
||||
composer.write({
|
||||
'body': 'Back to my amazing body',
|
||||
'subject': 'Back to my amazing subject',
|
||||
})
|
||||
self.assertEqual(composer.body, 'Back to my amazing body')
|
||||
self.assertEqual(composer.subject, 'Back to my amazing subject')
|
||||
|
||||
# update with template with void values: void value is not forced in
|
||||
# rendering mode as well as when copying template values, except for
|
||||
# body in rendering mode
|
||||
composer.write({'template_id': template_void.id})
|
||||
# currently onchange necessary
|
||||
composer._onchange_template_id_wrapper()
|
||||
if composition_mode == 'comment':
|
||||
self.assertFalse(composer.body, 'Void template body resets while other fields not, maybe to fix')
|
||||
self.assertEqual(composer.subject, 'Back to my amazing subject')
|
||||
self.assertEqual(composer.mail_server_id, self.template.mail_server_id)
|
||||
else:
|
||||
self.assertEqual(composer.body, 'Back to my amazing body')
|
||||
self.assertEqual(composer.subject, 'Back to my amazing subject')
|
||||
self.assertEqual(composer.mail_server_id, self.template.mail_server_id)
|
||||
|
||||
# reset template should reset values
|
||||
composer.write({'body': 'Back to my amazing body'})
|
||||
composer.write({'template_id': False})
|
||||
# currently onchange necessary
|
||||
composer._onchange_template_id_wrapper()
|
||||
|
||||
# values are reset
|
||||
# values are reset with default_get call, if it returns value
|
||||
# (aka subject for comment mode)
|
||||
if composition_mode == 'comment':
|
||||
self.assertEqual(composer.subject, 'Re: %s' % self.test_record.name)
|
||||
self.assertFalse(composer.body)
|
||||
self.assertEqual(composer.subject, 'Re: %s' % self.test_record.name)
|
||||
# TDE FIXME: server id is kept, not sure why
|
||||
# self.assertFalse(composer.mail_server_id.id)
|
||||
self.assertEqual(composer.mail_server_id, self.template.mail_server_id)
|
||||
self.assertEqual(composer.record_name, self.test_record.name)
|
||||
else:
|
||||
self.assertFalse(composer.body)
|
||||
# values are reset TDE FIXME: strange for subject
|
||||
self.assertEqual(composer.subject, 'Back to my amazing subject')
|
||||
self.assertFalse(composer.body)
|
||||
# TDE FIXME: server id is kept, not sure why
|
||||
# self.assertFalse(composer.mail_server_id.id)
|
||||
self.assertEqual(composer.mail_server_id, self.template.mail_server_id)
|
||||
@@ -511,6 +582,12 @@ class TestComposerInternals(TestMailComposer):
|
||||
self.template.write({
|
||||
'email_cc': 'test.cc.1@test.example.com, test.cc.2@test.example.com'
|
||||
})
|
||||
template_void = self.template.copy(default={
|
||||
'email_cc': False,
|
||||
'email_to': False,
|
||||
'partner_to': False,
|
||||
'reply_to': False,
|
||||
})
|
||||
|
||||
for composition_mode, batch in (('comment', False), ('mass_mail', True)):
|
||||
with self.subTest(composition_mode=composition_mode, batch=batch):
|
||||
@@ -528,16 +605,31 @@ class TestComposerInternals(TestMailComposer):
|
||||
composer = self.env['mail.compose.message'].with_context(ctx).create({
|
||||
'body': '<p>Test Body</p>',
|
||||
'partner_ids': base_recipients.ids,
|
||||
'reply_to': False,
|
||||
'reply_to': 'my_reply_to@test.example.com',
|
||||
'subject': 'My amazing subject',
|
||||
})
|
||||
|
||||
# creation values are taken
|
||||
self.assertEqual(composer.partner_ids, base_recipients)
|
||||
self.assertFalse(composer.reply_to)
|
||||
self.assertEqual(composer.reply_to, 'my_reply_to@test.example.com')
|
||||
self.assertFalse(composer.reply_to_force_new)
|
||||
self.assertEqual(composer.reply_to_mode, 'update')
|
||||
|
||||
# update with template with void values: void value is not forced in
|
||||
# rendering mode as well as when copying template values (and recipients
|
||||
# are not computed until sending in rendering mode)
|
||||
composer.write({'template_id': template_void.id})
|
||||
# currently onchange necessary
|
||||
composer._onchange_template_id_wrapper()
|
||||
if composition_mode == 'comment':
|
||||
self.assertEqual(composer.partner_ids, base_recipients)
|
||||
self.assertEqual(composer.reply_to, 'my_reply_to@test.example.com')
|
||||
self.assertFalse(composer.reply_to_force_new)
|
||||
else:
|
||||
self.assertEqual(composer.partner_ids, base_recipients)
|
||||
self.assertEqual(composer.reply_to, 'my_reply_to@test.example.com')
|
||||
self.assertFalse(composer.reply_to_force_new)
|
||||
|
||||
# changing template should update its content
|
||||
composer.write({'template_id': self.template.id})
|
||||
# currently onchange necessary
|
||||
|
||||
Reference in New Issue
Block a user