summaryrefslogtreecommitdiff
path: root/addons/test_mail_full
diff options
context:
space:
mode:
authorThibault Delavallée <tde@odoo.com>2019-07-19 09:45:24 +0000
committerThibault Delavallée <tde@odoo.com>2019-08-12 12:00:22 +0000
commit7e8a02cd6e9f08e5ff45db804b357bc3537ff1f6 (patch)
tree1494948bab19baf7ef1fb5007cb5f327b6f007c0 /addons/test_mail_full
parent22b598bc1b8331907ba0ce77739b64c48d6fcbbd (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')
-rw-r--r--addons/test_mail_full/models/test_mail_models.py22
-rw-r--r--addons/test_mail_full/security/ir.model.access.csv2
-rw-r--r--addons/test_mail_full/tests/__init__.py1
-rw-r--r--addons/test_mail_full/tests/common.py38
-rw-r--r--addons/test_mail_full/tests/test_phone_blacklist.py83
-rw-r--r--addons/test_mail_full/tests/test_sms_composer.py67
-rw-r--r--addons/test_mail_full/tests/test_sms_management.py3
-rw-r--r--addons/test_mail_full/tests/test_sms_post.py58
-rw-r--r--addons/test_mail_full/tests/test_sms_server_actions.py15
-rw-r--r--addons/test_mail_full/tests/test_sms_sms.py3
-rw-r--r--addons/test_mail_full/tests/test_sms_template.py9
11 files changed, 205 insertions, 96 deletions
diff --git a/addons/test_mail_full/models/test_mail_models.py b/addons/test_mail_full/models/test_mail_models.py
index d0d58e0467a..f00c72e71a2 100644
--- a/addons/test_mail_full/models/test_mail_models.py
+++ b/addons/test_mail_full/models/test_mail_models.py
@@ -26,6 +26,28 @@ class MailTestSMS(models.Model):
return ['phone_nbr', 'mobile_nbr']
+class MailTestSMSBL(models.Model):
+ """ A model inheriting from mail.thread with some fields used for SMS
+ gateway, like a partner, a specific mobile phone, ... """
+ _description = 'Chatter Model for SMS Gateway'
+ _name = 'mail.test.sms.bl'
+ _inherit = ['mail.thread.phone']
+ _order = 'name asc, id asc'
+
+ name = fields.Char()
+ subject = fields.Char()
+ email_from = fields.Char()
+ phone_nbr = fields.Char()
+ mobile_nbr = fields.Char()
+ customer_id = fields.Many2one('res.partner', 'Customer')
+
+ def _sms_get_default_partners(self):
+ return self.mapped('customer_id')
+
+ def _sms_get_number_fields(self):
+ return ['phone_nbr', 'mobile_nbr']
+
+
class MailTestSMSSoLike(models.Model):
""" A model like sale order having only a customer, not specific phone
or mobile fields. """
diff --git a/addons/test_mail_full/security/ir.model.access.csv b/addons/test_mail_full/security/ir.model.access.csv
index 186986eef83..408a47fdb96 100644
--- a/addons/test_mail_full/security/ir.model.access.csv
+++ b/addons/test_mail_full/security/ir.model.access.csv
@@ -1,5 +1,7 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_mail_test_sms_all,mail.test.sms.all,model_mail_test_sms,,0,0,0,0
access_mail_test_sms_user,mail.test.sms.user,model_mail_test_sms,base.group_user,1,1,1,1
+access_mail_test_sms_bl_all,mail.test.sms.bl.all,model_mail_test_sms_bl,,0,0,0,0
+access_mail_test_sms_bl_user,mail.test.sms.bl.user,model_mail_test_sms_bl,base.group_user,1,1,1,1
access_mail_test_sms_partner_all,mail.test.sms.partner.all,model_mail_test_sms_partner,,0,0,0,0
access_mail_test_sms_partner_user,mail.test.sms.partner.user,model_mail_test_sms_partner,base.group_user,1,1,1,1
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)