summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--addons/event_sms/tests/test_sms_schedule.py4
-rw-r--r--addons/hr/tests/common.py2
-rw-r--r--addons/hr_holidays/tests/common.py2
-rw-r--r--addons/mail/tests/common.py120
-rw-r--r--addons/mass_mailing/tests/common.py45
-rw-r--r--addons/mass_mailing/tests/test_mailing_controllers.py4
-rw-r--r--addons/mass_mailing/tests/test_mailing_internals.py6
-rw-r--r--addons/mass_mailing/tests/test_mailing_list.py4
-rw-r--r--addons/mass_mailing_sms/tests/common.py18
-rw-r--r--addons/mass_mailing_sms/tests/test_mailing_internals.py4
-rw-r--r--addons/sms/tests/common.py42
-rw-r--r--addons/test_mail/tests/common.py56
-rw-r--r--addons/test_mail/tests/test_message_composer.py57
-rw-r--r--addons/test_mail_full/tests/common.py37
-rw-r--r--addons/test_mail_full/tests/test_mass_sms.py4
-rw-r--r--addons/test_mail_full/tests/test_phone_blacklist.py4
-rw-r--r--addons/test_mail_full/tests/test_sms_composer.py8
-rw-r--r--addons/test_mail_full/tests/test_sms_management.py4
-rw-r--r--addons/test_mail_full/tests/test_sms_performance.py2
-rw-r--r--addons/test_mail_full/tests/test_sms_post.py8
-rw-r--r--addons/test_mail_full/tests/test_sms_server_actions.py4
-rw-r--r--addons/test_mail_full/tests/test_sms_sms.py4
-rw-r--r--addons/test_mail_full/tests/test_sms_template.py4
-rw-r--r--addons/test_mass_mailing/tests/common.py4
-rw-r--r--addons/test_xlsx_export/tests/test_export.py2
25 files changed, 246 insertions, 203 deletions
diff --git a/addons/event_sms/tests/test_sms_schedule.py b/addons/event_sms/tests/test_sms_schedule.py
index fae816dc215..3b592d61b5a 100644
--- a/addons/event_sms/tests/test_sms_schedule.py
+++ b/addons/event_sms/tests/test_sms_schedule.py
@@ -5,10 +5,10 @@ from dateutil.relativedelta import relativedelta
from odoo.addons.event.tests.common import TestEventCommon
from odoo.addons.phone_validation.tools import phone_validation
-from odoo.addons.sms.tests.common import MockSMS
+from odoo.addons.sms.tests.common import SMSCase
-class TestSMSSchedule(TestEventCommon, MockSMS):
+class TestSMSSchedule(TestEventCommon, SMSCase):
@classmethod
def setUpClass(cls):
diff --git a/addons/hr/tests/common.py b/addons/hr/tests/common.py
index 74aae9fccd0..4aacc2650e5 100644
--- a/addons/hr/tests/common.py
+++ b/addons/hr/tests/common.py
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from odoo.addons.test_mail.tests.common import mail_new_test_user
+from odoo.addons.mail.tests.common import mail_new_test_user
from odoo.tests import common
diff --git a/addons/hr_holidays/tests/common.py b/addons/hr_holidays/tests/common.py
index 9b6d852d634..83e0df4d673 100644
--- a/addons/hr_holidays/tests/common.py
+++ b/addons/hr_holidays/tests/common.py
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from odoo.addons.test_mail.tests.common import mail_new_test_user
+from odoo.addons.mail.tests.common import mail_new_test_user
from odoo.tests import common
diff --git a/addons/mail/tests/common.py b/addons/mail/tests/common.py
index fa764015c7c..e8ece910062 100644
--- a/addons/mail/tests/common.py
+++ b/addons/mail/tests/common.py
@@ -3,7 +3,6 @@
import email
import email.policy
-import json
import time
from collections import defaultdict
@@ -170,16 +169,32 @@ class MockEmail(common.BaseCase):
# GATEWAY ASSERTS
# ------------------------------------------------------------
- def _find_mail(self, author, recipients, mail_message):
+ def _find_mail_mail_wpartners(self, recipients, status, mail_message=None, author=None):
for mail in self._new_mails:
- if mail.mail_message_id != mail_message:
- continue
if author is not None and mail.author_id != author:
continue
+ if mail_message is not None and mail.mail_message_id != mail_message:
+ continue
+ if status and mail.state != status:
+ continue
if all(p in mail.recipient_ids for p in recipients):
break
else:
- raise AssertionError('mail.mail not found for message %s / recipients %s' % (mail_message, recipients.ids))
+ raise AssertionError('mail.mail not found for message %s / status %s / recipients %s' % (mail_message, status, recipients.ids))
+ return mail
+
+ def _find_mail_mail_wemail(self, email_to, status, mail_message=None, author=None):
+ for mail in self._new_mails:
+ if author is not None and mail.author_id != author:
+ continue
+ if mail_message is not None and mail.mail_message_id != mail_message:
+ continue
+ if status and mail.state != status:
+ continue
+ if (mail.email_to == email_to and not mail.recipient_ids) or (not mail.email_to and mail.recipient_ids.email) == email_to:
+ break
+ else:
+ raise AssertionError('mail.mail not found for email_to %s / status %s in %s' % (email_to, status, repr([m.email_to for m in self._new_mails])))
return mail
def _find_mail_mail_wrecord(self, record):
@@ -194,16 +209,33 @@ class MockEmail(common.BaseCase):
mail = self._find_mail(author, recipients, mail_message)
self.assertEqual(mail.state, 'exception')
- def assertMailSent(self, author, recipients, mail_message, check_mail_mail=True, **values):
+ def assertMailMail(self, recipients, status, check_mail_mail=True, mail_message=None, author=None, email_values=None):
if check_mail_mail:
- mail = self._find_mail(author, recipients, mail_message)
- self.assertEqual(mail.state, 'sent')
- for recipient in recipients:
- self.assertSentEmail(author, [recipient], **values)
+ mail = self._find_mail_mail_wpartners(recipients, status, mail_message=mail_message, author=author)
+ self.assertTrue(bool(mail))
+ if status == 'sent':
+ for recipient in recipients:
+ self.assertSentEmail(author, [recipient], **email_values)
+
+ def assertMailMailWEmails(self, emails, status, content, fields_values=None):
+ """ Will check in self._new_mails to find a sent mail.mail. To use with
+ mail gateway mock.
+
+ :param emails: list of emails;
+ :param status: status of mail.mail;
+ :param content: content to check for each email;
+ :param fields_values: specific value to check on the mail.mail record;
+ """
+ for email_to in emails:
+ sent_mail = self._find_mail_mail_wemail(email_to, status)
+ if content:
+ self.assertIn(content, sent_mail.body_html)
+ for fname, fvalue in (fields_values or {}).items():
+ self.assertEqual(sent_mail[fname], fvalue)
def assertNoMail(self, author, recipients, mail_message):
try:
- self._find_mail(author, recipients, mail_message)
+ self._find_mail_mail_wpartners(recipients, False, mail_message=mail_message, author=author)
except AssertionError:
pass
else:
@@ -290,6 +322,11 @@ class MailCase(MockEmail):
mail_notrack=False
)
+ def flush_tracking(self):
+ """ Force the creation of tracking values. """
+ self.env['base'].flush()
+ self.cr.precommit()
+
# ------------------------------------------------------------
# MAIL MOCKS
# ------------------------------------------------------------
@@ -363,6 +400,19 @@ class MailCase(MockEmail):
return cls.env['mail.message'].sudo().create(create_vals)
+ @classmethod
+ def _create_template(cls, model, template_values=None):
+ create_values = {
+ 'name': 'TestTemplate',
+ 'subject': 'About ${object.name}',
+ 'body_html': '<p>Hello ${object.name}</p>',
+ 'model_id': cls.env['ir.model']._get(model).id,
+ }
+ if template_values:
+ create_values.update(template_values)
+ cls.email_template = cls.env['mail.template'].create(create_values)
+ return cls.email_template
+
# ------------------------------------------------------------
# MAIL ASSERTS WRAPPERS
# ------------------------------------------------------------
@@ -505,12 +555,16 @@ class MailCase(MockEmail):
for recipients in email_groups.values():
partners = self.env['res.partner'].sudo().concat(*recipients)
if all(p in mail_groups['failure'] for p in partners):
- self.assertMailFailed(message.author_id, partners, message)
+ self.assertMailMail(partners, 'exception', author=message.author_id, mail_message=message)
else:
check_mail_mail = not self.mail_unlink_sent
- self.assertMailSent(
- message.author_id if message.author_id else message.email_from, partners, message,
- check_mail_mail=check_mail_mail, body_content=mbody)
+ self.assertMailMail(
+ partners, 'sent',
+ author=message.author_id if message.author_id else message.email_from,
+ mail_message=message,
+ check_mail_mail=check_mail_mail,
+ email_values={'body_content': mbody}
+ )
if not any(p for recipients in email_groups.values() for p in recipients):
self.assertNoMail(message.author_id, partners, message)
@@ -580,3 +634,39 @@ class MailCase(MockEmail):
self.assertEqual(tracking.new_value_char, new_value and new_value.display_name or '')
else:
self.assertEqual(1, 0)
+
+
+class MailCommon(common.SavepointCase, MailCase):
+ """ Almost-void class definition setting the savepoint case + mock of mail.
+ Used mainly for class inheritance in other applications and test modules. """
+
+ @classmethod
+ def setUpClass(cls):
+ super(MailCommon, cls).setUpClass()
+ # give default values for all email aliases and domain
+ cls._init_mail_gateway()
+ # ensure admin configuration
+ cls.user_admin = cls.env.ref('base.user_admin')
+ cls.user_admin.write({'notification_type': 'inbox'})
+ cls.partner_admin = cls.env.ref('base.partner_admin')
+ cls.company_admin = cls.user_admin.company_id
+ cls.company_admin.write({'email': 'company@example.com'})
+
+ # test standard employee
+ cls.user_employee = mail_new_test_user(
+ cls.env, login='employee',
+ groups='base.group_user',
+ company_id=cls.company_admin.id,
+ name='Ernest Employee',
+ notification_type='inbox',
+ signature='--\nErnest'
+ )
+ cls.partner_employee = cls.user_employee.partner_id
+
+ @classmethod
+ def _create_portal_user(cls):
+ cls.user_portal = mail_new_test_user(
+ cls.env, login='portal_test', groups='base.group_portal', company_id=cls.company_admin.id,
+ name='Chell Gladys', notification_type='email')
+ cls.partner_portal = cls.user_portal.partner_id
+ return cls.user_portal
diff --git a/addons/mass_mailing/tests/common.py b/addons/mass_mailing/tests/common.py
index 9d49a5c5bcf..8c3925d7527 100644
--- a/addons/mass_mailing/tests/common.py
+++ b/addons/mass_mailing/tests/common.py
@@ -2,48 +2,11 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.addons.link_tracker.tests.common import MockLinkTracker
-from odoo.addons.mail.tests.common import MailCase, mail_new_test_user
-from odoo.tests.common import SavepointCase
+from odoo.addons.mail.tests.common import MailCase, MailCommon, mail_new_test_user
class MassMailCase(MailCase, MockLinkTracker):
- def _find_mail_mail_wemail(self, email_to, state, author=None):
- for mail in self._new_mails:
- if author is not None and mail.author_id != author:
- continue
- if mail.state != state:
- continue
- if (mail.email_to == email_to and not mail.recipient_ids) or (not mail.email_to and mail.recipient_ids.email) == email_to:
- break
- else:
- raise AssertionError('mail.mail not found for email_to %s / state %s in %s' % (email_to, state, repr([m.email_to for m in self._new_mails])))
- return mail
-
- def _find_mail_mail_wrecord(self, record):
- for mail in self._new_mails:
- if mail.model == record._name and mail.res_id == record.id:
- break
- else:
- raise AssertionError('mail.mail not found for record %s in %s' % (record, repr([m.email_to for m in self._new_mails])))
- return mail
-
- def assertMailMailWEmails(self, emails, state, content, fields_values=None):
- """ Will check in self._new_mails to find a sent mail.mail. To use with
- mail gateway mock.
-
- :param emails: list of emails;
- :param state: state of mail.mail;
- :param content: content to check for each email;
- :param fields_values: specific value to check on the mail.mail record;
- """
- for email_to in emails:
- sent_mail = self._find_mail_mail_wemail(email_to, state)
- if content:
- self.assertIn(content, sent_mail.body_html)
- for fname, fvalue in (fields_values or {}).items():
- self.assertEqual(sent_mail[fname], fvalue)
-
def assertMailTraces(self, recipients_info, mailing, records, check_mail=True):
""" Check content of traces.
@@ -90,6 +53,8 @@ class MassMailCase(MailCase, MockLinkTracker):
if state == 'sent':
self.assertMailMailWEmails([email], 'sent', content, fields_values=fields_values)
+ elif state == 'replied': # replied imply something has been sent
+ self.assertMailMailWEmails([email], 'sent', content, fields_values=fields_values)
elif state == 'ignored':
self.assertMailMailWEmails([email], 'cancel', content, fields_values=fields_values)
elif state == 'exception':
@@ -100,11 +65,11 @@ class MassMailCase(MailCase, MockLinkTracker):
raise NotImplementedError()
-class TestMassMailCommon(SavepointCase, MassMailCase):
+class MassMailCommon(MailCommon, MassMailCase):
@classmethod
def setUpClass(cls):
- super(TestMassMailCommon, cls).setUpClass()
+ super(MassMailCommon, cls).setUpClass()
cls.user_marketing = mail_new_test_user(
cls.env, login='user_marketing',
diff --git a/addons/mass_mailing/tests/test_mailing_controllers.py b/addons/mass_mailing/tests/test_mailing_controllers.py
index eb1ecd60178..310664c49c3 100644
--- a/addons/mass_mailing/tests/test_mailing_controllers.py
+++ b/addons/mass_mailing/tests/test_mailing_controllers.py
@@ -3,11 +3,11 @@
import werkzeug
-from odoo.addons.mass_mailing.tests.common import TestMassMailCommon
+from odoo.addons.mass_mailing.tests.common import MassMailCommon
from odoo.tests.common import HttpCase
-class TestMassMailingControllers(TestMassMailCommon, HttpCase):
+class TestMassMailingControllers(MassMailCommon, HttpCase):
def test_tracking_url_token(self):
mail_mail = self.env['mail.mail'].create({})
diff --git a/addons/mass_mailing/tests/test_mailing_internals.py b/addons/mass_mailing/tests/test_mailing_internals.py
index 50cb2e2f708..f19685bdcd0 100644
--- a/addons/mass_mailing/tests/test_mailing_internals.py
+++ b/addons/mass_mailing/tests/test_mailing_internals.py
@@ -3,11 +3,11 @@
from ast import literal_eval
-from odoo.addons.mass_mailing.tests.common import TestMassMailCommon
+from odoo.addons.mass_mailing.tests.common import MassMailCommon
from odoo.tests.common import users, Form
from odoo.tools import formataddr, mute_logger
-class TestMassMailValues(TestMassMailCommon):
+class TestMassMailValues(MassMailCommon):
@classmethod
def setUpClass(cls):
@@ -122,7 +122,7 @@ class TestMassMailValues(TestMassMailCommon):
self.assertEqual(mailing_form.mailing_model_real, 'res.partner')
-class TestMassMailFeatures(TestMassMailCommon):
+class TestMassMailFeatures(MassMailCommon):
@classmethod
def setUpClass(cls):
diff --git a/addons/mass_mailing/tests/test_mailing_list.py b/addons/mass_mailing/tests/test_mailing_list.py
index 4300f31a006..dc029facc43 100644
--- a/addons/mass_mailing/tests/test_mailing_list.py
+++ b/addons/mass_mailing/tests/test_mailing_list.py
@@ -1,11 +1,11 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from odoo.addons.mass_mailing.tests.common import TestMassMailCommon
+from odoo.addons.mass_mailing.tests.common import MassMailCommon
from odoo.tests.common import users
-class TestMailingListMerge(TestMassMailCommon):
+class TestMailingListMerge(MassMailCommon):
@classmethod
def setUpClass(cls):
diff --git a/addons/mass_mailing_sms/tests/common.py b/addons/mass_mailing_sms/tests/common.py
index bffc117ac22..6049fc610b7 100644
--- a/addons/mass_mailing_sms/tests/common.py
+++ b/addons/mass_mailing_sms/tests/common.py
@@ -1,16 +1,11 @@
# -*- coding: utf-8 -*-
-from contextlib import contextmanager
-from unittest.mock import patch
-
-from odoo import exceptions, tools
+from odoo.addons.mass_mailing.tests.common import MassMailCommon
from odoo.addons.phone_validation.tools import phone_validation
-from odoo.addons.sms.tests import common as sms_common
-from odoo.tests import common
-from odoo.addons.sms.models.sms_api import SmsApi
+from odoo.addons.sms.tests.common import SMSCase, SMSCommon
-class MockSMS(sms_common.MockSMS):
+class MassSMSCase(SMSCase):
def assertSMSOutgoingStatistics(self, partners, numbers, records, mailing):
found_sms = self.env['sms.sms'].sudo().search([
@@ -71,3 +66,10 @@ class MockSMS(sms_common.MockSMS):
self.assertSMSCanceled(partner, number, recipient_info.get('failure_type', False), content)
else:
raise NotImplementedError()
+
+
+class MassSMSCommon(MassMailCommon, SMSCommon, MassSMSCase):
+
+ @classmethod
+ def setUpClass(cls):
+ super(MassSMSCommon, cls).setUpClass()
diff --git a/addons/mass_mailing_sms/tests/test_mailing_internals.py b/addons/mass_mailing_sms/tests/test_mailing_internals.py
index a9c4c2f218a..46f1e508665 100644
--- a/addons/mass_mailing_sms/tests/test_mailing_internals.py
+++ b/addons/mass_mailing_sms/tests/test_mailing_internals.py
@@ -3,11 +3,11 @@
from ast import literal_eval
-from odoo.addons.mass_mailing.tests.common import TestMassMailCommon
+from odoo.addons.mass_mailing_sms.tests.common import MassSMSCommon
from odoo.tests.common import users
-class TestMassMailValues(TestMassMailCommon):
+class TestMassMailValues(MassSMSCommon):
@classmethod
def setUpClass(cls):
diff --git a/addons/sms/tests/common.py b/addons/sms/tests/common.py
index e90fcf9a384..901939d15c2 100644
--- a/addons/sms/tests/common.py
+++ b/addons/sms/tests/common.py
@@ -4,8 +4,9 @@ from contextlib import contextmanager
from unittest.mock import patch
from odoo import exceptions, tools
-from odoo.addons.phone_validation.tools import phone_validation
from odoo.tests import common
+from odoo.addons.mail.tests.common import MailCommon
+from odoo.addons.phone_validation.tools import phone_validation
from odoo.addons.sms.models.sms_api import SmsApi
@@ -13,11 +14,11 @@ class MockSMS(common.BaseCase):
def tearDown(self):
super(MockSMS, self).tearDown()
- self._clear_sms_sent
+ self._clear_sms_sent()
@contextmanager
def mockSMSGateway(self, sim_error=None, nbr_t_error=None):
- self._sms = []
+ self._clear_sms_sent()
def _contact_iap(local_endpoint, params):
# mock single sms sending
@@ -60,6 +61,11 @@ class MockSMS(common.BaseCase):
def _clear_sms_sent(self):
self._sms = []
+
+class SMSCase(MockSMS):
+ """ Main test class to use when testing SMS integrations. Contains helpers and tools related
+ to notification sent by SMS. """
+
def assertSMSSent(self, numbers, content):
""" Check sent SMS. Order is not checked. Each number should have received
the same content. Useful to check batch sending.
@@ -180,3 +186,33 @@ class MockSMS(common.BaseCase):
self.assertEqual(message.subtype_id, self.env.ref('mail.mt_note'))
self.assertEqual(message.message_type, 'sms')
self.assertEqual(tools.html2plaintext(message.body).rstrip('\n'), body)
+
+
+class SMSCommon(MailCommon, MockSMS):
+
+ @classmethod
+ def setUpClass(cls):
+ super(SMSCommon, cls).setUpClass()
+ cls.user_employee.write({'login': 'employee'})
+
+ # update country to belgium in order to test sanitization of numbers
+ cls.user_employee.company_id.write({'country_id': cls.env.ref('base.be').id})
+
+ # some numbers for testing
+ cls.random_numbers_str = '+32456998877, 0456665544'
+ cls.random_numbers = cls.random_numbers_str.split(', ')
+ cls.random_numbers_san = [phone_validation.phone_format(number, 'BE', '32', force_format='E164') for number in cls.random_numbers]
+ cls.test_numbers = ['+32456010203', '0456 04 05 06', '0032456070809']
+ cls.test_numbers_san = [phone_validation.phone_format(number, 'BE', '32', force_format='E164') for number in cls.test_numbers]
+
+ # 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.'
+ })
diff --git a/addons/test_mail/tests/common.py b/addons/test_mail/tests/common.py
index a1b7c7000ea..b62b1a444aa 100644
--- a/addons/test_mail/tests/common.py
+++ b/addons/test_mail/tests/common.py
@@ -1,63 +1,19 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from odoo.addons.mail.tests import common as mail_common
-from odoo.tests import common
+from odoo.addons.mail.tests.common import MailCommon
+from odoo.tests.common import SavepointCase
-mail_new_test_user = mail_common.mail_new_test_user
-
-class TestMailCommon(common.SavepointCase, mail_common.MailCase):
-
- @classmethod
- def setUpClass(cls):
- super(TestMailCommon, cls).setUpClass()
- # give default values for all email aliases and domain
- cls._init_mail_gateway()
- # ensure admin configuration
- cls.user_admin = cls.env.ref('base.user_admin')
- cls.user_admin.write({'notification_type': 'inbox'})
- cls.partner_admin = cls.env.ref('base.partner_admin')
- cls.company_admin = cls.user_admin.company_id
- cls.company_admin.write({'email': 'company@example.com'})
- # test standard employee
- cls.user_employee = mail_new_test_user(
- cls.env, login='employee', groups='base.group_user', company_id=cls.company_admin.id,
- name='Ernest Employee', notification_type='inbox', signature='--\nErnest')
- cls.partner_employee = cls.user_employee.partner_id
+class TestMailCommon(MailCommon):
+ """ Main entry point for functional tests. """
@classmethod
def _create_channel_listener(cls):
cls.channel_listen = cls.env['mail.channel'].with_context(cls._test_context).create({'name': 'Listener'})
- @classmethod
- def _create_portal_user(cls):
- cls.user_portal = mail_new_test_user(
- cls.env, login='portal_test', groups='base.group_portal', company_id=cls.company_admin.id,
- name='Chell Gladys', notification_type='email')
- cls.partner_portal = cls.user_portal.partner_id
- return cls.user_portal
-
- @classmethod
- def _create_template(cls, model, template_values=None):
- create_values = {
- 'name': 'TestTemplate',
- 'subject': 'About ${object.name}',
- 'body_html': '<p>Hello ${object.name}</p>',
- 'model_id': cls.env['ir.model']._get(model).id,
- }
- if template_values:
- create_values.update(template_values)
- cls.email_template = cls.env['mail.template'].create(create_values)
- return cls.email_template
-
- def flush_tracking(self):
- """ Force the creation of tracking values. """
- self.env['base'].flush()
- self.cr.precommit()
-
-class TestMailMultiCompanyCommon(TestMailCommon):
+class TestMailMultiCompanyCommon(MailCommon):
@classmethod
def setUpClass(cls):
@@ -67,7 +23,7 @@ class TestMailMultiCompanyCommon(TestMailCommon):
})
-class TestRecipients(common.SavepointCase):
+class TestRecipients(SavepointCase):
@classmethod
def setUpClass(cls):
diff --git a/addons/test_mail/tests/test_message_composer.py b/addons/test_mail/tests/test_message_composer.py
index e94b5a533c3..a93432a1575 100644
--- a/addons/test_mail/tests/test_message_composer.py
+++ b/addons/test_mail/tests/test_message_composer.py
@@ -207,14 +207,21 @@ class TestComposerWTpl(TestMailCommon, TestRecipients):
composer.send_mail()
new_partners = self.env['res.partner'].search([('email', 'in', [self.email_1, self.email_2])])
- self.assertMailSent(
- self.user_employee.partner_id,
+ self.assertMailMail(
[self.partner_1, self.partner_2, new_partners[0], new_partners[1], self.partner_admin],
- False,
+ 'sent',
+ author=self.user_employee.partner_id,
+ mail_message=False,
check_mail_mail=False,
- subject='About %s' % self.test_record.name,
- body_content=self.test_record.name,
- attachments=[('first.txt', b'My first attachment', 'text/plain'), ('second.txt', b'My second attachment', 'text/plain')])
+ email_values={
+ 'subject': 'About %s' % self.test_record.name,
+ 'body_content': self.test_record.name,
+ 'attachments': [
+ ('first.txt', b'My first attachment', 'text/plain'),
+ ('second.txt', b'My second attachment', 'text/plain')
+ ]
+ }
+ )
def test_composer_template_onchange_attachments(self):
"""Tests that all attachments are added to the composer,
@@ -278,24 +285,38 @@ class TestComposerWTpl(TestMailCommon, TestRecipients):
self._mails_record2 = [dict(mail) for mail in self._mails if '%s-%s' % (test_record_2.id, test_record_2._name) in mail['message_id']]
self._mails = self._mails_record1
- self.assertMailSent(
- self.user_employee.partner_id,
+ self.assertMailMail(
[self.partner_1, self.partner_2, new_partners[0], new_partners[1], self.partner_admin],
- False,
+ 'sent',
+ author=self.user_employee.partner_id,
+ mail_message=False,
check_mail_mail=False,
- subject='About %s' % self.test_record.name,
- body_content=self.test_record.name,
- attachments=[('first.txt', b'My first attachment', 'text/plain'), ('second.txt', b'My second attachment', 'text/plain')])
+ email_values={
+ 'subject': 'About %s' % self.test_record.name,
+ 'body_content': self.test_record.name,
+ 'attachments': [
+ ('first.txt', b'My first attachment', 'text/plain'),
+ ('second.txt', b'My second attachment', 'text/plain')
+ ]
+ }
+ )
self._mails = self._mails_record2
- self.assertMailSent(
- self.user_employee.partner_id,
+ self.assertMailMail(
[self.partner_1, self.partner_2, new_partners[0], new_partners[1], self.partner_admin],
- False,
+ 'sent',
+ author=self.user_employee.partner_id,
+ mail_message=False,
check_mail_mail=False,
- subject='About %s' % test_record_2.name,
- body_content=test_record_2.name,
- attachments=[('first.txt', b'My first attachment', 'text/plain'), ('second.txt', b'My second attachment', 'text/plain')])
+ email_values={
+ 'subject': 'About %s' % test_record_2.name,
+ 'body_content': test_record_2.name,
+ 'attachments': [
+ ('first.txt', b'My first attachment', 'text/plain'),
+ ('second.txt', b'My second attachment', 'text/plain')
+ ]
+ }
+ )
message_1 = self.test_record.message_ids[0]
message_2 = test_record_2.message_ids[0]
diff --git a/addons/test_mail_full/tests/common.py b/addons/test_mail_full/tests/common.py
index 6fac92a5aab..1f75394df99 100644
--- a/addons/test_mail_full/tests/common.py
+++ b/addons/test_mail_full/tests/common.py
@@ -1,39 +1,12 @@
# -*- coding: utf-8 -*-
from odoo.addons.phone_validation.tools import phone_validation
-from odoo.addons.mass_mailing_sms.tests import common as mass_mailing_sms_common
-from odoo.addons.test_mail.tests import common as test_mail_common
-from odoo.addons.test_mass_mailing.tests import common as test_mass_mailing_common
+from odoo.addons.mass_mailing_sms.tests.common import MassSMSCommon
+from odoo.addons.test_mail.tests.common import TestRecipients
+from odoo.addons.test_mass_mailing.tests.common import TestMassMailCommon
-class TestSMSCommon(test_mass_mailing_common.TestMassMailCommon, mass_mailing_sms_common.MockSMS):
-
- @classmethod
- def setUpClass(cls):
- super(TestSMSCommon, cls).setUpClass()
- cls.user_employee.write({'login': 'employee'})
-
- # update country to belgium in order to test sanitization of numbers
- cls.user_employee.company_id.write({'country_id': cls.env.ref('base.be').id})
-
- # some numbers for testing
- cls.random_numbers_str = '+32456998877, 0456665544'
- cls.random_numbers = cls.random_numbers_str.split(', ')
- cls.random_numbers_san = [phone_validation.phone_format(number, 'BE', '32', force_format='E164') for number in cls.random_numbers]
- cls.test_numbers = ['+32456010203', '0456 04 05 06', '0032456070809']
- cls.test_numbers_san = [phone_validation.phone_format(number, 'BE', '32', force_format='E164') for number in cls.test_numbers]
-
- # 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.'
- })
+class TestMailFullCommon(TestMassMailCommon, MassSMSCommon):
@classmethod
def _create_records_for_batch(cls, model, count):
@@ -55,7 +28,7 @@ class TestSMSCommon(test_mass_mailing_common.TestMassMailCommon, mass_mailing_sm
cls.partners = partners
-class TestRecipients(test_mail_common.TestRecipients):
+class TestRecipients(TestRecipients):
@classmethod
def setUpClass(cls):
diff --git a/addons/test_mail_full/tests/test_mass_sms.py b/addons/test_mail_full/tests/test_mass_sms.py
index b43ff773316..2bc1760cc60 100644
--- a/addons/test_mail_full/tests/test_mass_sms.py
+++ b/addons/test_mail_full/tests/test_mass_sms.py
@@ -3,12 +3,12 @@
from odoo.addons.phone_validation.tools import phone_validation
-from odoo.addons.test_mail_full.tests import common as test_mail_full_common
+from odoo.addons.test_mail_full.tests.common import TestMailFullCommon
from odoo.tests import tagged
@tagged('mass_mailing')
-class TestMassSMS(test_mail_full_common.TestSMSCommon):
+class TestMassSMS(TestMailFullCommon):
@classmethod
def setUpClass(cls):
diff --git a/addons/test_mail_full/tests/test_phone_blacklist.py b/addons/test_mail_full/tests/test_phone_blacklist.py
index 6276e7a1daa..adf37bdb5c3 100644
--- a/addons/test_mail_full/tests/test_phone_blacklist.py
+++ b/addons/test_mail_full/tests/test_phone_blacklist.py
@@ -1,10 +1,10 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from odoo.addons.test_mail_full.tests import common as test_mail_full_common
+from odoo.addons.test_mail_full.tests.common import TestMailFullCommon, TestRecipients
-class TestPhoneBlacklist(test_mail_full_common.TestSMSCommon, test_mail_full_common.TestRecipients):
+class TestPhoneBlacklist(TestMailFullCommon, TestRecipients):
""" TODO """
@classmethod
diff --git a/addons/test_mail_full/tests/test_sms_composer.py b/addons/test_mail_full/tests/test_sms_composer.py
index 44df9efd951..73b6fdf14a7 100644
--- a/addons/test_mail_full/tests/test_sms_composer.py
+++ b/addons/test_mail_full/tests/test_sms_composer.py
@@ -1,10 +1,10 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from odoo.addons.test_mail_full.tests import common as test_mail_full_common
+from odoo.addons.test_mail_full.tests.common import TestMailFullCommon, TestRecipients
-class TestSMSComposerComment(test_mail_full_common.TestSMSCommon, test_mail_full_common.TestRecipients):
+class TestSMSComposerComment(TestMailFullCommon, TestRecipients):
""" TODO LIST
* add test for default_res_model / default_res_id and stuff like that;
@@ -201,7 +201,7 @@ class TestSMSComposerComment(test_mail_full_common.TestSMSCommon, test_mail_full
self.assertSMSSent(self.random_numbers_san, self._test_body)
-class TestSMSComposerBatch(test_mail_full_common.TestSMSCommon):
+class TestSMSComposerBatch(TestMailFullCommon):
@classmethod
def setUpClass(cls):
super(TestSMSComposerBatch, cls).setUpClass()
@@ -277,7 +277,7 @@ class TestSMSComposerBatch(test_mail_full_common.TestSMSCommon):
self.assertSMSNotification([{'partner': r.customer_id} for r in self.records], 'Zizisse an SMS.', messages)
-class TestSMSComposerMass(test_mail_full_common.TestSMSCommon):
+class TestSMSComposerMass(TestMailFullCommon):
@classmethod
def setUpClass(cls):
diff --git a/addons/test_mail_full/tests/test_sms_management.py b/addons/test_mail_full/tests/test_sms_management.py
index e499d981c43..e0d097971d4 100644
--- a/addons/test_mail_full/tests/test_sms_management.py
+++ b/addons/test_mail_full/tests/test_sms_management.py
@@ -1,10 +1,10 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from odoo.addons.test_mail_full.tests import common as test_mail_full_common
+from odoo.addons.test_mail_full.tests.common import TestMailFullCommon, TestRecipients
-class TestSMSWizards(test_mail_full_common.TestSMSCommon, test_mail_full_common.TestRecipients):
+class TestSMSWizards(TestMailFullCommon, TestRecipients):
@classmethod
def setUpClass(cls):
diff --git a/addons/test_mail_full/tests/test_sms_performance.py b/addons/test_mail_full/tests/test_sms_performance.py
index df716786847..42b6763e30c 100644
--- a/addons/test_mail_full/tests/test_sms_performance.py
+++ b/addons/test_mail_full/tests/test_sms_performance.py
@@ -9,7 +9,7 @@ from odoo.tools import mute_logger
@tagged('mail_performance')
-class TestSMSPerformance(BaseMailPerformance, sms_common.MockSMS):
+class TestSMSPerformance(BaseMailPerformance, sms_common.SMSCase):
def setUp(self):
super(TestSMSPerformance, self).setUp()
diff --git a/addons/test_mail_full/tests/test_sms_post.py b/addons/test_mail_full/tests/test_sms_post.py
index dceb3e7ee7d..e90c9c10b6b 100644
--- a/addons/test_mail_full/tests/test_sms_post.py
+++ b/addons/test_mail_full/tests/test_sms_post.py
@@ -1,10 +1,10 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from odoo.addons.test_mail_full.tests import common as test_mail_full_common
+from odoo.addons.test_mail_full.tests.common import TestMailFullCommon, TestRecipients
-class TestSMSPost(test_mail_full_common.TestSMSCommon, test_mail_full_common.TestRecipients):
+class TestSMSPost(TestMailFullCommon, TestRecipients):
""" TODO
* add tests for new mail.message and mail.thread fields;
@@ -233,7 +233,7 @@ class TestSMSPost(test_mail_full_common.TestSMSCommon, test_mail_full_common.Tes
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.TestSMSCommon, test_mail_full_common.TestRecipients):
+class TestSMSPostException(TestMailFullCommon, TestRecipients):
@classmethod
def setUpClass(cls):
@@ -374,7 +374,7 @@ class TestSMSPostException(test_mail_full_common.TestSMSCommon, test_mail_full_c
], self._test_body, messages)
-class TestSMSApi(test_mail_full_common.TestSMSCommon):
+class TestSMSApi(TestMailFullCommon):
@classmethod
def setUpClass(cls):
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 6cc9995caa3..e44cb6847a4 100644
--- a/addons/test_mail_full/tests/test_sms_server_actions.py
+++ b/addons/test_mail_full/tests/test_sms_server_actions.py
@@ -1,10 +1,10 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from odoo.addons.test_mail_full.tests import common as test_mail_full_common
+from odoo.addons.test_mail_full.tests.common import TestMailFullCommon, TestRecipients
-class TestServerAction(test_mail_full_common.TestSMSCommon, test_mail_full_common.TestRecipients):
+class TestServerAction(TestMailFullCommon, TestRecipients):
@classmethod
def setUpClass(cls):
diff --git a/addons/test_mail_full/tests/test_sms_sms.py b/addons/test_mail_full/tests/test_sms_sms.py
index e404eaec572..f3a0fb711cc 100644
--- a/addons/test_mail_full/tests/test_sms_sms.py
+++ b/addons/test_mail_full/tests/test_sms_sms.py
@@ -8,7 +8,7 @@ from unittest.mock import DEFAULT
from odoo import exceptions
from odoo.addons.sms.models.sms_sms import SmsSms as SmsSms
-from odoo.addons.test_mail_full.tests import common as test_mail_full_common
+from odoo.addons.test_mail_full.tests.common import TestMailFullCommon
from odoo.tests import common
@@ -47,7 +47,7 @@ class LinkTrackerMock(common.BaseCase):
self.assertEqual(redirect_params, url_params)
-class TestSMSPost(test_mail_full_common.TestSMSCommon, LinkTrackerMock):
+class TestSMSPost(TestMailFullCommon, LinkTrackerMock):
@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 d688b30d0f7..c57ae3cfefb 100644
--- a/addons/test_mail_full/tests/test_sms_template.py
+++ b/addons/test_mail_full/tests/test_sms_template.py
@@ -1,10 +1,10 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from odoo.addons.test_mail_full.tests import common as test_mail_full_common
+from odoo.addons.test_mail_full.tests.common import TestMailFullCommon, TestRecipients
-class TestSmsTemplate(test_mail_full_common.TestSMSCommon, test_mail_full_common.TestRecipients):
+class TestSmsTemplate(TestMailFullCommon, TestRecipients):
@classmethod
def setUpClass(cls):
diff --git a/addons/test_mass_mailing/tests/common.py b/addons/test_mass_mailing/tests/common.py
index 8691a4a20b9..22c3be91464 100644
--- a/addons/test_mass_mailing/tests/common.py
+++ b/addons/test_mass_mailing/tests/common.py
@@ -4,11 +4,11 @@
import datetime
import random
-from odoo.addons.mass_mailing.tests.common import TestMassMailCommon
+from odoo.addons.mass_mailing.tests.common import MassMailCommon
from odoo.addons.test_mail.tests.common import TestMailCommon
-class TestMassMailCommon(TestMassMailCommon, TestMailCommon):
+class TestMassMailCommon(MassMailCommon, TestMailCommon):
@classmethod
def setUpClass(cls):
diff --git a/addons/test_xlsx_export/tests/test_export.py b/addons/test_xlsx_export/tests/test_export.py
index 9ba0960be5a..df0f85a5a4c 100644
--- a/addons/test_xlsx_export/tests/test_export.py
+++ b/addons/test_xlsx_export/tests/test_export.py
@@ -8,7 +8,7 @@ from unittest.mock import patch
from odoo import http
from odoo.tests import common, tagged
from odoo.addons.web.controllers.main import ExportXlsxWriter
-from odoo.addons.test_mail.tests.common import mail_new_test_user
+from odoo.addons.mail.tests.common import mail_new_test_user
class XlsxCreatorCase(common.HttpCase):