diff options
| author | Thibault Delavallée <tde@odoo.com> | 2019-07-19 09:45:24 +0000 |
|---|---|---|
| committer | Thibault Delavallée <tde@odoo.com> | 2019-08-12 12:00:22 +0000 |
| commit | 7e8a02cd6e9f08e5ff45db804b357bc3537ff1f6 (patch) | |
| tree | 1494948bab19baf7ef1fb5007cb5f327b6f007c0 /addons/test_mail_full/tests | |
| parent | 22b598bc1b8331907ba0ce77739b64c48d6fcbbd (diff) | |
[IMP] phone_validation: add blacklist mechanism
PURPOSE
SMS are a powerful marketing tool. For instance it is perfect to announce a
sale or to communicate a coupon code, to welcome a new customer in a fidelity
program, ...
Purpose of this task is to integrate SMS sending in batch in mass mailing. It
will use same mailing objects but sending SMS instead of emails. Some metrics
and flows will have to be slightly updated at the same time.
SPECIFICATIONS
Purpose of this commit is to add a blacklist mechanism for phone numbers
used to send SMS like what already exists for email addresses when sending
emails.
Define a new phone.blacklist model, holding a number and the state of the
blacklist (active field), as well as tools methods to access it. Make it
as private as possible, accessing it in sudo once access are granted.
Also clean phone validation tools: lessen number of tool functions and update
caller to simplify code readability. Some fixes are also included in this
commit, notably blank spaces cleaning in phone numbers.
Improve phone.validation.mixin to add a tool method computing a sanitized
number, in addition to formatting it to national / international.
Define a new mail.thread.phone mixin computing the blacklist status of a
record. This mixin
* inherit from phone.validation.mixin in order to have access to some
base phone number parsing capabilities;
* computes a sanitized phone number based on ´´_phone_get_number_fields´´.
It takes first sanitized value, trying each field returned by the
method. That means one sanitized phone number is available per record
even if several fields are available;
* compute blacklist state of records. It is based on phone.blacklist
model and give an easy-to-use field and API to manipulate blacklisted
records;
* give some API methods :
* ``_phone_set_blacklisted``: set recordset as blacklisted;
* ``_phone_reset_blacklisted``: reactivate recordset (even if not blacklisted
this method can be called safely);
Put menus in technical in order to have access to it. Add a Phone / SMS
menu below "Email" and use it to store SMS / Phone actions.
Finally prepare tests addition by performing some light cleaning while adding
blacklist tests. Purpose is to ease future tests related to SMS.
LINKS
Task 1997464
PR #34424
Original SMS addition: Task 1922163 (4287481)
Diffstat (limited to 'addons/test_mail_full/tests')
| -rw-r--r-- | addons/test_mail_full/tests/__init__.py | 1 | ||||
| -rw-r--r-- | addons/test_mail_full/tests/common.py | 38 | ||||
| -rw-r--r-- | addons/test_mail_full/tests/test_phone_blacklist.py | 83 | ||||
| -rw-r--r-- | addons/test_mail_full/tests/test_sms_composer.py | 67 | ||||
| -rw-r--r-- | addons/test_mail_full/tests/test_sms_management.py | 3 | ||||
| -rw-r--r-- | addons/test_mail_full/tests/test_sms_post.py | 58 | ||||
| -rw-r--r-- | addons/test_mail_full/tests/test_sms_server_actions.py | 15 | ||||
| -rw-r--r-- | addons/test_mail_full/tests/test_sms_sms.py | 3 | ||||
| -rw-r--r-- | addons/test_mail_full/tests/test_sms_template.py | 9 |
9 files changed, 181 insertions, 96 deletions
diff --git a/addons/test_mail_full/tests/__init__.py b/addons/test_mail_full/tests/__init__.py index b64df4304a9..36523fca998 100644 --- a/addons/test_mail_full/tests/__init__.py +++ b/addons/test_mail_full/tests/__init__.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- from . import common +from . import test_phone_blacklist from . import test_sms_composer from . import test_sms_management from . import test_sms_performance diff --git a/addons/test_mail_full/tests/common.py b/addons/test_mail_full/tests/common.py index 0c7b1b7c9f7..0bd34a96277 100644 --- a/addons/test_mail_full/tests/common.py +++ b/addons/test_mail_full/tests/common.py @@ -24,3 +24,41 @@ class BaseFunctionalTest(test_mail_common.BaseFunctionalTest): # some numbers for mass testing cls.mass_numbers = ['04561%s2%s3%s' % (x, x, x) for x in range(0, 10)] cls.mass_numbers_san = [phone_validation.phone_format(number, 'BE', '32', force_format='E164') for number in cls.mass_numbers] + + @classmethod + def _create_sms_template(cls, model, body=False): + return cls.env['sms.template'].create({ + 'name': 'Test Template', + 'model_id': cls.env['ir.model']._get(model).id, + 'body': body if body else 'Dear ${object.display_name} this is an SMS.' + }) + + @classmethod + def _create_records_for_batch(cls, model, count): + records = cls.env['mail.test.sms'] + partners = cls.env['res.partner'] + country_id = cls.env.ref('base.be').id, + for x in range(count): + partners += cls.env['res.partner'].with_context(**cls._test_context).create({ + 'name': 'Partner_%s' % (x), + 'email': '_test_partner_%s@example.com' % (x), + 'country_id': country_id, + 'mobile': '047500%02d%02d' % (x, x) + }) + records += cls.env[model].with_context(**cls._test_context).create({ + 'name': 'Test_%s' % (x), + 'customer_id': partners[x].id, + }) + cls.records = cls._reset_mail_context(records) + cls.partners = partners + + +class TestRecipients(test_mail_common.TestRecipients): + + @classmethod + def setUpClass(cls): + super(TestRecipients, cls).setUpClass() + cls.partner_numbers = [ + phone_validation.phone_format(partner.mobile, partner.country_id.code, partner.country_id.phone_code, force_format='E164') + for partner in (cls.partner_1 | cls.partner_2) + ] diff --git a/addons/test_mail_full/tests/test_phone_blacklist.py b/addons/test_mail_full/tests/test_phone_blacklist.py new file mode 100644 index 00000000000..9b5cb88d742 --- /dev/null +++ b/addons/test_mail_full/tests/test_phone_blacklist.py @@ -0,0 +1,83 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo.addons.sms.tests import common as sms_common +from odoo.addons.test_mail_full.tests import common as test_mail_full_common + + +class TestPhoneBlacklist(test_mail_full_common.BaseFunctionalTest, sms_common.MockSMS, test_mail_full_common.TestRecipients): + """ TODO """ + + @classmethod + def setUpClass(cls): + super(TestPhoneBlacklist, cls).setUpClass() + cls._test_body = 'VOID CONTENT' + + cls.test_record = cls.env['mail.test.sms.bl'].with_context(**cls._test_context).create({ + 'name': 'Test', + 'customer_id': cls.partner_1.id, + 'mobile_nbr': cls.test_numbers[0], + 'phone_nbr': cls.test_numbers[1], + }) + cls.test_record = cls._reset_mail_context(cls.test_record) + + def test_phone_blacklist_internals(self): + with self.sudo('employee'): + test_record = self.env['mail.test.sms.bl'].browse(self.test_record.id) + self.assertEqual(test_record.phone_sanitized, self.test_numbers_san[1]) + self.assertFalse(test_record.phone_blacklisted) + + bl_record = self.env['phone.blacklist'].sudo().create([{'number': self.test_numbers_san[1]}]) + test_record.invalidate_cache() + self.assertTrue(test_record.phone_blacklisted) + + self.env['phone.blacklist'].sudo().remove(self.test_numbers_san[1]) + self.assertFalse(bl_record.active) + test_record.invalidate_cache() + self.assertFalse(test_record.phone_blacklisted) + + self.env['phone.blacklist'].sudo().add(self.test_numbers_san[1]) + self.assertTrue(bl_record.active) + test_record.invalidate_cache() + self.assertTrue(test_record.phone_blacklisted) + + bl_record_2 = self.env['phone.blacklist'].sudo().create([{'number': self.test_numbers_san[1]}]) + self.assertEqual(bl_record, bl_record_2) + + rec = self.env['mail.test.sms.bl'].search([('phone_blacklisted', '=', True)]) + self.assertEqual(rec, test_record) + + bl_record.unlink() + rec = self.env['mail.test.sms.bl'].search([('phone_blacklisted', '=', True)]) + self.assertEqual(rec, self.env['mail.test.sms.bl']) + + def test_phone_sanitize_api(self): + with self.sudo('employee'): + test_record = self.env['mail.test.sms.bl'].browse(self.test_record.id) + self.assertFalse(test_record.phone_blacklisted) + + test_record._phone_set_blacklisted() + test_record.invalidate_cache() + self.assertTrue(test_record.phone_blacklisted) + + test_record._phone_reset_blacklisted() + test_record.invalidate_cache() + self.assertFalse(test_record.phone_blacklisted) + + def test_phone_sanitize_internals(self): + with self.sudo('employee'): + test_record = self.env['mail.test.sms.bl'].browse(self.test_record.id) + self.assertEqual(test_record.phone_nbr, self.test_numbers[1]) + self.assertEqual(test_record.phone_sanitized, self.test_numbers_san[1]) + + test_record.write({'phone_nbr': 'incorrect'}) + self.assertEqual(test_record.phone_nbr, 'incorrect') + self.assertEqual(test_record.phone_sanitized, self.test_numbers_san[0]) + + test_record.write({'mobile_nbr': 'incorrect'}) + self.assertEqual(test_record.mobile_nbr, 'incorrect') + self.assertEqual(test_record.phone_sanitized, False) + + test_record.write({'phone_nbr': self.test_numbers[1]}) + self.assertEqual(test_record.phone_nbr, self.test_numbers[1]) + self.assertEqual(test_record.phone_sanitized, self.test_numbers_san[1]) diff --git a/addons/test_mail_full/tests/test_sms_composer.py b/addons/test_mail_full/tests/test_sms_composer.py index a50cd210e08..19a64e415ad 100644 --- a/addons/test_mail_full/tests/test_sms_composer.py +++ b/addons/test_mail_full/tests/test_sms_composer.py @@ -1,13 +1,11 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from odoo.addons.phone_validation.tools import phone_validation from odoo.addons.sms.tests import common as sms_common -from odoo.addons.test_mail.tests import common as test_mail_common from odoo.addons.test_mail_full.tests import common as test_mail_full_common -class TestSMSComposerComment(test_mail_full_common.BaseFunctionalTest, sms_common.MockSMS, test_mail_common.MockEmails, test_mail_common.TestRecipients): +class TestSMSComposerComment(test_mail_full_common.BaseFunctionalTest, sms_common.MockSMS, test_mail_full_common.TestRecipients): """ TODO LIST * add test for default_res_model / default_res_id and stuff like that; @@ -21,11 +19,6 @@ class TestSMSComposerComment(test_mail_full_common.BaseFunctionalTest, sms_commo super(TestSMSComposerComment, cls).setUpClass() cls._test_body = 'VOID CONTENT' - cls.partner_numbers = [ - phone_validation.phone_format(partner.mobile, partner.country_id.code, partner.country_id.phone_code, force_format='E164') - for partner in (cls.partner_1 | cls.partner_2) - ] - cls.test_record = cls.env['mail.test.sms'].with_context(**cls._test_context).create({ 'name': 'Test', 'customer_id': cls.partner_1.id, @@ -159,7 +152,7 @@ class TestSMSComposerComment(test_mail_full_common.BaseFunctionalTest, sms_commo # self.assertSMSSent((self.partner_1 | self.partner_2).mapped('mobile'), test_body) -class TestSMSComposerMass(test_mail_full_common.BaseFunctionalTest, sms_common.MockSMS, test_mail_common.MockEmails, test_mail_common.TestRecipients): +class TestSMSComposerMass(test_mail_full_common.BaseFunctionalTest, sms_common.MockSMS): """ TODO LIST * add test for mass with log note @@ -170,28 +163,8 @@ class TestSMSComposerMass(test_mail_full_common.BaseFunctionalTest, sms_common.M super(TestSMSComposerMass, cls).setUpClass() cls._test_body = 'Zizisse an SMS.' - records = cls.env['mail.test.sms'] - partners = cls.env['res.partner'] - country_id = cls.env.ref('base.be').id, - for x in range(3): - partners += cls.env['res.partner'].with_context(**cls._test_context).create({ - 'name': 'Partner_%s' % (x), - 'email': '_test_partner_%s@example.com' % (x), - 'country_id': country_id, - 'mobile': '047500%s%s99' % (x, x) - }) - records += cls.env['mail.test.sms'].with_context(**cls._test_context).create({ - 'name': 'Test_%s' % (x), - 'customer_id': partners[x].id, - }) - cls.records = cls._reset_mail_context(records) - cls.partners = partners - - cls.sms_template = cls.env['sms.template'].create({ - 'name': 'Test Template', - 'model_id': cls.env['ir.model']._get('mail.test.sms').id, - 'body': 'Dear ${object.display_name} this is an SMS.', - }) + cls._create_records_for_batch('mail.test.sms', 3) + cls.sms_template = cls._create_sms_template('mail.test.sms') def test_composer_mass_active_domain(self): with self.sudo('employee'): @@ -291,35 +264,3 @@ class TestSMSComposerMass(test_mail_full_common.BaseFunctionalTest, sms_common.M self.assertSMSOutgoing(record.customer_id, None, 'Cher·e· %s ceci est un SMS.' % record.display_name) else: self.assertSMSOutgoing(record.customer_id, None, 'Dear %s this is an SMS.' % record.display_name) - - def test_message_schedule_sms(self): - with self.sudo('employee'): - with self.mockSMSGateway(): - self.env['mail.test.sms'].browse(self.records.ids)._message_sms_schedule_mass(body=self._test_body) - - for record in self.records: - self.assertSMSOutgoing(record.customer_id, None, self._test_body) - - def test_message_schedule_sms_w_log(self): - with self.sudo('employee'): - with self.mockSMSGateway(): - self.env['mail.test.sms'].browse(self.records.ids)._message_sms_schedule_mass(body=self._test_body, mass_keep_log=True) - - for record in self.records: - self.assertSMSNotification([{'partner': record.customer_id, 'state': 'ready'}], self._test_body) - - def test_message_schedule_sms_w_template(self): - with self.sudo('employee'): - with self.mockSMSGateway(): - self.env['mail.test.sms'].browse(self.records.ids)._message_sms_schedule_mass(template=self.sms_template) - - for record in self.records: - self.assertSMSOutgoing(record.customer_id, None, 'Dear %s this is an SMS.' % record.display_name) - - def test_message_schedule_sms_w_template_and_log(self): - with self.sudo('employee'): - with self.mockSMSGateway(): - self.env['mail.test.sms'].browse(self.records.ids)._message_sms_schedule_mass(template=self.sms_template, mass_keep_log=True) - - for record in self.records: - self.assertSMSNotification([{'partner': record.customer_id, 'state': 'ready'}], 'Dear %s this is an SMS.' % record.display_name) diff --git a/addons/test_mail_full/tests/test_sms_management.py b/addons/test_mail_full/tests/test_sms_management.py index 4463ce8b647..7d8d3a1904b 100644 --- a/addons/test_mail_full/tests/test_sms_management.py +++ b/addons/test_mail_full/tests/test_sms_management.py @@ -2,11 +2,10 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. from odoo.addons.sms.tests import common as sms_common -from odoo.addons.test_mail.tests import common as test_mail_common from odoo.addons.test_mail_full.tests import common as test_mail_full_common -class TestSMSWizards(test_mail_full_common.BaseFunctionalTest, sms_common.MockSMS, test_mail_common.MockEmails, test_mail_common.TestRecipients): +class TestSMSWizards(test_mail_full_common.BaseFunctionalTest, sms_common.MockSMS, test_mail_full_common.TestRecipients): @classmethod def setUpClass(cls): diff --git a/addons/test_mail_full/tests/test_sms_post.py b/addons/test_mail_full/tests/test_sms_post.py index 23687402f96..2b9be0964ec 100644 --- a/addons/test_mail_full/tests/test_sms_post.py +++ b/addons/test_mail_full/tests/test_sms_post.py @@ -1,13 +1,11 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from odoo.addons.phone_validation.tools import phone_validation from odoo.addons.sms.tests import common as sms_common -from odoo.addons.test_mail.tests import common as test_mail_common from odoo.addons.test_mail_full.tests import common as test_mail_full_common -class TestSMSPost(test_mail_full_common.BaseFunctionalTest, sms_common.MockSMS, test_mail_common.MockEmails, test_mail_common.TestRecipients): +class TestSMSPost(test_mail_full_common.BaseFunctionalTest, sms_common.MockSMS, test_mail_full_common.TestRecipients): """ TODO * add tests for new mail.message and mail.thread fields; @@ -18,11 +16,6 @@ class TestSMSPost(test_mail_full_common.BaseFunctionalTest, sms_common.MockSMS, super(TestSMSPost, cls).setUpClass() cls._test_body = 'VOID CONTENT' - cls.partner_numbers = [ - phone_validation.phone_format(partner.mobile, partner.country_id.code, partner.country_id.phone_code, force_format='E164') - for partner in (cls.partner_1 | cls.partner_2) - ] - cls.test_record = cls.env['mail.test.sms'].with_context(**cls._test_context).create({ 'name': 'Test', 'customer_id': cls.partner_1.id, @@ -227,7 +220,7 @@ class TestSMSPost(test_mail_full_common.BaseFunctionalTest, sms_common.MockSMS, self.assertSMSNotification([{'partner': self.partner_1, 'number': self.test_numbers_san[1]}], 'Dear %s this is an SMS.' % self.test_record.display_name, messages) -class TestSMSPostException(test_mail_full_common.BaseFunctionalTest, sms_common.MockSMS, test_mail_common.MockEmails, test_mail_common.TestRecipients): +class TestSMSPostException(test_mail_full_common.BaseFunctionalTest, sms_common.MockSMS, test_mail_full_common.TestRecipients): @classmethod def setUpClass(cls): @@ -304,7 +297,7 @@ class TestSMSPostException(test_mail_full_common.BaseFunctionalTest, sms_common. ], self._test_body, messages) def test_message_sms_crash_credit_single(self): - with self.sudo('employee'), self.mockSMSGateway(nbr_t_error={phone_validation.phone_get_sanitized_record_number(self.partner_2): 'credit'}): + with self.sudo('employee'), self.mockSMSGateway(nbr_t_error={self.partner_2.phone_get_sanitized_number(): 'credit'}): test_record = self.env['mail.test.sms'].browse(self.test_record.id) messages = test_record._message_sms(self._test_body, partner_ids=(self.partner_1 | self.partner_2 | self.partner_3).ids) @@ -336,7 +329,7 @@ class TestSMSPostException(test_mail_full_common.BaseFunctionalTest, sms_common. ], self._test_body, messages) def test_message_sms_crash_wrong_number_single(self): - with self.sudo('employee'), self.mockSMSGateway(nbr_t_error={phone_validation.phone_get_sanitized_record_number(self.partner_2): 'wrong_number_format'}): + with self.sudo('employee'), self.mockSMSGateway(nbr_t_error={self.partner_2.phone_get_sanitized_number(): 'wrong_number_format'}): test_record = self.env['mail.test.sms'].browse(self.test_record.id) messages = test_record._message_sms(self._test_body, partner_ids=(self.partner_1 | self.partner_2 | self.partner_3).ids) @@ -345,3 +338,46 @@ class TestSMSPostException(test_mail_full_common.BaseFunctionalTest, sms_common. {'partner': self.partner_2, 'state': 'exception', 'failure_type': 'sms_number_format'}, {'partner': self.partner_3, 'state': 'sent'}, ], self._test_body, messages) + + +class TestSMSApi(test_mail_full_common.BaseFunctionalTest, sms_common.MockSMS): + + @classmethod + def setUpClass(cls): + super(TestSMSApi, cls).setUpClass() + cls._test_body = 'Zizisse an SMS.' + + cls._create_records_for_batch('mail.test.sms', 3) + cls.sms_template = cls._create_sms_template('mail.test.sms') + + def test_message_schedule_sms(self): + with self.sudo('employee'): + with self.mockSMSGateway(): + self.env['mail.test.sms'].browse(self.records.ids)._message_sms_schedule_mass(body=self._test_body) + + for record in self.records: + self.assertSMSOutgoing(record.customer_id, None, self._test_body) + + def test_message_schedule_sms_w_log(self): + with self.sudo('employee'): + with self.mockSMSGateway(): + self.env['mail.test.sms'].browse(self.records.ids)._message_sms_schedule_mass(body=self._test_body, mass_keep_log=True) + + for record in self.records: + self.assertSMSNotification([{'partner': record.customer_id, 'state': 'ready'}], self._test_body) + + def test_message_schedule_sms_w_template(self): + with self.sudo('employee'): + with self.mockSMSGateway(): + self.env['mail.test.sms'].browse(self.records.ids)._message_sms_schedule_mass(template=self.sms_template) + + for record in self.records: + self.assertSMSOutgoing(record.customer_id, None, 'Dear %s this is an SMS.' % record.display_name) + + def test_message_schedule_sms_w_template_and_log(self): + with self.sudo('employee'): + with self.mockSMSGateway(): + self.env['mail.test.sms'].browse(self.records.ids)._message_sms_schedule_mass(template=self.sms_template, mass_keep_log=True) + + for record in self.records: + self.assertSMSNotification([{'partner': record.customer_id, 'state': 'ready'}], 'Dear %s this is an SMS.' % record.display_name) diff --git a/addons/test_mail_full/tests/test_sms_server_actions.py b/addons/test_mail_full/tests/test_sms_server_actions.py index 506513c524a..d8be1757375 100644 --- a/addons/test_mail_full/tests/test_sms_server_actions.py +++ b/addons/test_mail_full/tests/test_sms_server_actions.py @@ -2,15 +2,14 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. from odoo.addons.sms.tests import common as sms_common -from odoo.addons.test_mail.tests import common as test_mail_common from odoo.addons.test_mail_full.tests import common as test_mail_full_common -class TestSmsTemplate(test_mail_full_common.BaseFunctionalTest, sms_common.MockSMS, test_mail_common.TestRecipients): +class TestServerAction(test_mail_full_common.BaseFunctionalTest, sms_common.MockSMS, test_mail_full_common.TestRecipients): @classmethod def setUpClass(cls): - super(TestSmsTemplate, cls).setUpClass() + super(TestServerAction, cls).setUpClass() cls.test_record = cls.env['mail.test.sms'].with_context(**cls._test_context).create({ 'name': 'Test', 'customer_id': cls.partner_1.id, @@ -21,16 +20,10 @@ class TestSmsTemplate(test_mail_full_common.BaseFunctionalTest, sms_common.MockS 'phone_nbr': cls.test_numbers[0], }) - model_id = cls.env['ir.model']._get('mail.test.sms').id - cls.sms_template = cls.env['sms.template'].create({ - 'name': 'Test Template', - 'model_id': model_id, - 'body': 'Dear ${object.display_name} this is an SMS.' - }) - + cls.sms_template = cls._create_sms_template('mail.test.sms') cls.action = cls.env['ir.actions.server'].create({ 'name': 'Test SMS Action', - 'model_id': model_id, + 'model_id': cls.env['ir.model']._get('mail.test.sms').id, 'state': 'sms', 'sms_template_id': cls.sms_template.id, }) diff --git a/addons/test_mail_full/tests/test_sms_sms.py b/addons/test_mail_full/tests/test_sms_sms.py index 46149f559a8..426e3872901 100644 --- a/addons/test_mail_full/tests/test_sms_sms.py +++ b/addons/test_mail_full/tests/test_sms_sms.py @@ -7,11 +7,10 @@ from unittest.mock import DEFAULT from odoo import exceptions from odoo.addons.sms.models.sms_sms import SmsSms as SmsSms from odoo.addons.sms.tests import common as sms_common -from odoo.addons.test_mail.tests import common as test_mail_common from odoo.addons.test_mail_full.tests import common as test_mail_full_common -class TestSMSPost(test_mail_full_common.BaseFunctionalTest, sms_common.MockSMS, test_mail_common.MockEmails, test_mail_common.TestRecipients): +class TestSMSPost(test_mail_full_common.BaseFunctionalTest, sms_common.MockSMS): @classmethod def setUpClass(cls): diff --git a/addons/test_mail_full/tests/test_sms_template.py b/addons/test_mail_full/tests/test_sms_template.py index dab46cd04c7..a1c754511ab 100644 --- a/addons/test_mail_full/tests/test_sms_template.py +++ b/addons/test_mail_full/tests/test_sms_template.py @@ -2,11 +2,10 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. from odoo.addons.sms.tests import common as sms_common -from odoo.addons.test_mail.tests import common as test_mail_common from odoo.addons.test_mail_full.tests import common as test_mail_full_common -class TestSmsTemplate(test_mail_full_common.BaseFunctionalTest, sms_common.MockSMS, test_mail_common.MockEmails, test_mail_common.TestRecipients): +class TestSmsTemplate(test_mail_full_common.BaseFunctionalTest, sms_common.MockSMS, test_mail_full_common.TestRecipients): @classmethod def setUpClass(cls): @@ -19,11 +18,7 @@ class TestSmsTemplate(test_mail_full_common.BaseFunctionalTest, sms_common.MockS cls.body_en = 'Dear ${object.display_name} this is an SMS.' cls.body_fr = u"Hello ${object.display_name} ceci est en français." - cls.sms_template = cls.env['sms.template'].create({ - 'name': 'Test Template', - 'model_id': cls.env['ir.model']._get('mail.test.sms').id, - 'body': cls.body_en, - }) + cls.sms_template = cls._create_sms_template('mail.test.sms', body=cls.body_en) def test_sms_template_render(self): rendered_body = self.sms_template._render_template(self.sms_template.body, self.sms_template.model, self.test_record.ids) |
