summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorThibault Delavallée <tde@odoo.com>2021-04-08 14:41:56 +0000
committerThibault Delavallée <tde@odoo.com>2021-04-08 15:06:28 +0000
commitcb648d20dfe949c71c1f50ebda822d32ec8c976f (patch)
treeb28d6a89bf78be052f867cff80708d53c80109c1 /addons
parent070bec2f3a7a50c6fc8f104cf92a9416ebc001b8 (diff)
[IMP] mail, (test_)mass_mailing: also check sent emails if possible
When using assertMailMailWEmails custom assert we now check that a sent mail.mail matches a sent email. It allows to have a complete check from mailing traces to sent emails. Task ID-2500615 COM PR odoo/odoo#68874 ENT PR odoo/enterprise#17558
Diffstat (limited to 'addons')
-rw-r--r--addons/mail/tests/common.py3
-rw-r--r--addons/mass_mailing/tests/common.py29
-rw-r--r--addons/mass_mailing/tests/test_mailing_internals.py4
-rw-r--r--addons/test_mail_full/tests/test_mass_mailing.py2
-rw-r--r--addons/test_mass_mailing/tests/common.py4
-rw-r--r--addons/test_mass_mailing/tests/test_blacklist_behavior.py3
6 files changed, 28 insertions, 17 deletions
diff --git a/addons/mail/tests/common.py b/addons/mail/tests/common.py
index bfed47a57bc..4bb38d819c8 100644
--- a/addons/mail/tests/common.py
+++ b/addons/mail/tests/common.py
@@ -325,6 +325,9 @@ class MockEmail(common.BaseCase):
self.assertEqual(
found_mail[fname], fvalue,
'Mail: expected %s for %s, got %s' % (fvalue, fname, found_mail[fname]))
+ if status == 'sent':
+ for email_to in emails:
+ self.assertSentEmail(email_values['email_from'] if email_values and email_values.get('email_from') else author, [email_to], **(email_values or {}))
def assertNoMail(self, recipients, mail_message=None, author=None):
try:
diff --git a/addons/mass_mailing/tests/common.py b/addons/mass_mailing/tests/common.py
index 5f6d8fa8f73..b4a2fa1d5e3 100644
--- a/addons/mass_mailing/tests/common.py
+++ b/addons/mass_mailing/tests/common.py
@@ -7,7 +7,8 @@ from odoo.addons.mail.tests.common import MailCase, MailCommon, mail_new_test_us
class MassMailCase(MailCase, MockLinkTracker):
- def assertMailTraces(self, recipients_info, mailing, records, check_mail=True):
+ def assertMailTraces(self, recipients_info, mailing, records,
+ check_mail=True, author=None):
""" Check content of traces.
:param recipients_info: list[{
@@ -19,6 +20,15 @@ class MassMailCase(MailCase, MockLinkTracker):
'failure_type': optional: UPDATE ME
}, { ... }]
"""
+ # map trace state to email state
+ state_mapping = {
+ 'sent': 'sent',
+ 'replied': 'sent', # replied imply something has been sent
+ 'ignored': 'cancel',
+ 'exception': 'exception',
+ 'canceled': 'canceled',
+ }
+
traces = self.env['mailing.trace'].search([
('mass_mailing_id', 'in', mailing.ids),
('res_id', 'in', records.ids)
@@ -47,22 +57,17 @@ class MassMailCase(MailCase, MockLinkTracker):
)
if check_mail:
+ if author is None:
+ author = self.env.user.partner_id
+
fields_values = {'mailing_id': mailing}
if 'failure_type' in recipient_info:
fields_values['failure_type'] = recipient_info['failure_type']
- if state == 'sent':
- self.assertMailMailWEmails([email], 'sent', content=content, fields_values=fields_values)
- elif state == 'replied': # replied imply something has been sent
- self.assertMailMailWEmails([email], 'sent', content=content, fields_values=fields_values)
- elif state == 'ignored':
- self.assertMailMailWEmails([email], 'cancel', content=content, fields_values=fields_values)
- elif state == 'exception':
- self.assertMailMailWEmails([email], 'exception', content=content, fields_values=fields_values)
- elif state == 'canceled':
- self.assertMailMailWEmails([email], 'canceled', content=content, fields_values=fields_values)
+ if partner:
+ self.assertMailMail(partner, state_mapping[state], author=author, content=content, fields_values=fields_values)
else:
- raise NotImplementedError()
+ self.assertMailMailWEmails([email], state_mapping[state], author=author, content=content, fields_values=fields_values)
class MassMailCommon(MailCommon, MassMailCase):
diff --git a/addons/mass_mailing/tests/test_mailing_internals.py b/addons/mass_mailing/tests/test_mailing_internals.py
index 115736e987d..fbb61f3f0fd 100644
--- a/addons/mass_mailing/tests/test_mailing_internals.py
+++ b/addons/mass_mailing/tests/test_mailing_internals.py
@@ -200,8 +200,8 @@ class TestMassMailFeatures(MassMailCommon):
mailing._process_mass_mailing_queue()
self.assertMailTraces(
- [{'email': 'test1@example.com'},
- {'email': 'test2@example.com', 'state': 'ignored'}],
+ [{'partner': partner_a},
+ {'partner': partner_b, 'state': 'ignored'}],
mailing, partner_a | partner_b, check_mail=True
)
diff --git a/addons/test_mail_full/tests/test_mass_mailing.py b/addons/test_mail_full/tests/test_mass_mailing.py
index 2745855cea8..693022572fa 100644
--- a/addons/test_mail_full/tests/test_mass_mailing.py
+++ b/addons/test_mail_full/tests/test_mass_mailing.py
@@ -75,6 +75,6 @@ class TestMassMailing(TestMailFullCommon):
'http://localhost:%s/mailing/%s/view' % (config['http_port'], mailing.id),
email['body'])
- self.assertMailTraces([recipient_info], mailing, recipient, check_mail=True)
+ self.assertMailTraces([recipient_info], mailing, recipient, check_mail=True, author=self.env.user.partner_id)
self.assertEqual(mailing.ignored, 4)
diff --git a/addons/test_mass_mailing/tests/common.py b/addons/test_mass_mailing/tests/common.py
index 84f04bb29b1..2a550878b12 100644
--- a/addons/test_mass_mailing/tests/common.py
+++ b/addons/test_mass_mailing/tests/common.py
@@ -14,7 +14,9 @@ class TestMassMailCommon(MassMailCommon, TestMailCommon):
def setUpClass(cls):
super(TestMassMailCommon, cls).setUpClass()
- cls.mailing_bl = cls.env['mailing.mailing'].create({
+ # enforce last update by user_marketing to match _process_mass_mailing_queue
+ # taking last writer as user running a batch
+ cls.mailing_bl = cls.env['mailing.mailing'].with_user(cls.user_marketing).create({
'name': 'SourceName',
'subject': 'MailingSubject',
'body_html': '<p>Hello ${object.name}</p>',
diff --git a/addons/test_mass_mailing/tests/test_blacklist_behavior.py b/addons/test_mass_mailing/tests/test_blacklist_behavior.py
index aa513d2a389..e07bfff760c 100644
--- a/addons/test_mass_mailing/tests/test_blacklist_behavior.py
+++ b/addons/test_mass_mailing/tests/test_blacklist_behavior.py
@@ -35,7 +35,8 @@ class TestAutoBlacklist(common.TestMassMailCommon):
self.assertMailTraces(
[{'email': 'test.record.00@test.example.com'}],
- mailing, target, check_mail=True
+ mailing, target,
+ check_mail=True
)
# call bounced