diff options
| author | Odoo's Mergebot <xmo+roboto@odoo.com> | 2019-12-16 17:48:19 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-12-16 17:48:19 +0100 |
| commit | b0d2cd0041ab755cbbff543cc2cabf17d3183003 (patch) | |
| tree | a89e8519fc925f3d4b08a1e62cc066bf8ca3bf0b /addons/mass_mailing/tests/test_mailing_internals.py | |
| parent | b7eb4283c7c4e3111c99d17bc430cf37fbeeebd5 (diff) | |
| parent | f807b636faa889bbca1c2bcdbe6af7c4818fff7e (diff) | |
[MERGE] mass_mailing(_sms): move from onchange / default to stored editable computed fields
PURPOSE
Try to move from onchange / default_get to stored editable computed fields.
Normally behavior should be the same (computed or set by user), with support
in create / write + onchange without additional code.
SPECIFICATIONS
Update classic fields with onchange to stored editable computed fields. It
means their value will come either from manual user input, either computed
based on triggers. Purpose is to remove all onchange and default_get when
possible.
Clean fields definition inconsistencies, like default / required on computed
fields. Indeed computed fields should always have a value, maybe coming from
user input. They should not have default / required that are attributes for
classic fields.
Mailing domain computation is also cleaned and is now reset once the
mailing domain is changed. Indeed trying to keep a previous domain
based on try / except has no meaning from functional point of view. If model
changes then domain should change as it is a business record, not just a
technical domain to try to apply.
Finally add some tests to help develop and maintain those fields computation.
LINKS
Task ID 2088577
PR #41877
Enterprise PR odoo/enterprise#7278
Related: odoo/enterprise#7278
Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
Diffstat (limited to 'addons/mass_mailing/tests/test_mailing_internals.py')
| -rw-r--r-- | addons/mass_mailing/tests/test_mailing_internals.py | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/addons/mass_mailing/tests/test_mailing_internals.py b/addons/mass_mailing/tests/test_mailing_internals.py new file mode 100644 index 00000000000..8f25119063d --- /dev/null +++ b/addons/mass_mailing/tests/test_mailing_internals.py @@ -0,0 +1,73 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from ast import literal_eval + +from odoo.addons.mass_mailing.tests.common import TestMassMailCommon +from odoo.tests.common import users +from odoo.tools import mute_logger + + +class TestMassMailValues(TestMassMailCommon): + + @users('user_marketing') + def test_mailing_computed_fields(self): + # Create on res.partner, with default values for computed fields + mailing = self.env['mailing.mailing'].create({ + 'name': 'TestMailing', + 'subject': 'Test', + 'mailing_type': 'mail', + 'body_html': '<p>Hello ${object.name}</p>', + 'mailing_model_id': self.env['ir.model']._get('res.partner').id, + }) + self.assertEqual(mailing.user_id, self.user_marketing) + self.assertEqual(mailing.medium_id, self.env.ref('utm.utm_medium_email')) + self.assertEqual(mailing.mailing_model_name, 'res.partner') + self.assertEqual(mailing.mailing_model_real, 'res.partner') + self.assertEqual(mailing.reply_to_mode, 'email') + self.assertEqual(mailing.reply_to, self.user_marketing.email_formatted) + # default for partner: remove blacklisted + self.assertEqual(literal_eval(mailing.mailing_domain), [('is_blacklisted', '=', False)]) + # update domain + mailing.write({ + 'mailing_domain': [('email', 'ilike', 'test.example.com')] + }) + self.assertEqual(literal_eval(mailing.mailing_domain), [('email', 'ilike', 'test.example.com')]) + + # reset mailing model -> reset domain; set reply_to -> keep it + mailing.write({ + 'mailing_model_id': self.env['ir.model']._get('mailing.list').id, + 'reply_to': self.email_reply_to, + }) + self.assertEqual(mailing.mailing_model_name, 'mailing.list') + self.assertEqual(mailing.mailing_model_real, 'mailing.contact') + self.assertEqual(mailing.reply_to_mode, 'email') + self.assertEqual(mailing.reply_to, self.email_reply_to) + # default for mailing list: depends upon contact_list_ids + self.assertEqual(literal_eval(mailing.mailing_domain), []) + mailing.write({ + 'contact_list_ids': [(4, self.mailing_list_1.id), (4, self.mailing_list_2.id)] + }) + self.assertEqual(literal_eval(mailing.mailing_domain), [('list_ids', 'in', (self.mailing_list_1 | self.mailing_list_2).ids)]) + + # reset mailing model -> reset domain and reply to mode + mailing.write({ + 'mailing_model_id': self.env['ir.model']._get('mail.channel').id, + }) + self.assertEqual(mailing.mailing_model_name, 'mail.channel') + self.assertEqual(mailing.mailing_model_real, 'mail.channel') + self.assertEqual(mailing.reply_to_mode, 'thread') + self.assertFalse(mailing.reply_to) + + @users('user_marketing') + def test_mailing_computed_fields_default(self): + mailing = self.env['mailing.mailing'].with_context( + default_mailing_domain=repr([('email', 'ilike', 'test.example.com')]) + ).create({ + 'name': 'TestMailing', + 'subject': 'Test', + 'mailing_type': 'mail', + 'body_html': '<p>Hello ${object.name}</p>', + 'mailing_model_id': self.env['ir.model']._get('res.partner').id, + }) + self.assertEqual(literal_eval(mailing.mailing_domain), [('email', 'ilike', 'test.example.com')]) |
