summaryrefslogtreecommitdiff
path: root/addons/mass_mailing/tests/test_mailing_internals.py
diff options
context:
space:
mode:
authorOdoo's Mergebot <xmo+roboto@odoo.com>2019-12-16 17:48:19 +0100
committerGitHub <noreply@github.com>2019-12-16 17:48:19 +0100
commitb0d2cd0041ab755cbbff543cc2cabf17d3183003 (patch)
treea89e8519fc925f3d4b08a1e62cc066bf8ca3bf0b /addons/mass_mailing/tests/test_mailing_internals.py
parentb7eb4283c7c4e3111c99d17bc430cf37fbeeebd5 (diff)
parentf807b636faa889bbca1c2bcdbe6af7c4818fff7e (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.py73
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')])