summaryrefslogtreecommitdiff
path: root/addons/test_mail_full
diff options
context:
space:
mode:
authorThibault Delavallée <tde@odoo.com>2020-08-05 10:02:23 +0000
committerThibault Delavallée <tde@odoo.com>2020-08-05 13:55:04 +0000
commitcfbbc229d88b74ec7080c47cf1b6555dfc3c23b4 (patch)
tree65ec41a1fe7a330502afafdc20641cf623be769d /addons/test_mail_full
parentc1865706b06a6cea7f37ba4c8d962e374edfab83 (diff)
[IMP] test_mail_full: add mass_mailing test, notably for preview / browser view
Purpose of this commit is to add some mass mailing tests in test mail full (with all community mailing capabilities installed). In this commit we notably tests unsubscribe and view URLs computation in sent emails, as well as the invisible preview block for email clients. Task ID-2239327 Task ID-2239327 PR #49886 Related: odoo/enterprise#10091 Signed-off-by: Thibault Delavallee (tde) <tde@openerp.com>
Diffstat (limited to 'addons/test_mail_full')
-rw-r--r--addons/test_mail_full/tests/__init__.py1
-rw-r--r--addons/test_mail_full/tests/test_mass_mailing.py86
2 files changed, 87 insertions, 0 deletions
diff --git a/addons/test_mail_full/tests/__init__.py b/addons/test_mail_full/tests/__init__.py
index 149facf9fa7..9c4bf096766 100644
--- a/addons/test_mail_full/tests/__init__.py
+++ b/addons/test_mail_full/tests/__init__.py
@@ -3,6 +3,7 @@
from . import common
from . import test_odoobot
from . import test_phone_blacklist
+from . import test_mass_mailing
from . import test_mass_sms
from . import test_sms_composer
from . import test_sms_management
diff --git a/addons/test_mail_full/tests/test_mass_mailing.py b/addons/test_mail_full/tests/test_mass_mailing.py
new file mode 100644
index 00000000000..9fefdab2248
--- /dev/null
+++ b/addons/test_mail_full/tests/test_mass_mailing.py
@@ -0,0 +1,86 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo.addons.test_mail_full.tests.common import TestMailFullCommon
+from odoo.tests.common import users
+from odoo.tools import mute_logger
+from odoo.tests import tagged
+
+
+@tagged('mass_mailing')
+class TestMassMailing(TestMailFullCommon):
+
+ @classmethod
+ def setUpClass(cls):
+ super(TestMassMailing, cls).setUpClass()
+
+ @users('user_marketing')
+ @mute_logger('odoo.addons.mail.models.mail_mail')
+ def test_mailing_w_blacklist_opt_out(self):
+ # TDE FIXME: better URLs check for unsubscribe / view (res_id + email + correct parse of url)
+ mailing = self.mailing_bl.with_user(self.env.user)
+
+ jinja_html = '''
+<div>
+ <p>Hello <span class="text-muted">${object.name}</span></p>
+ <p>
+ Here are your personal links
+ <a href="http://www.example.com">External link</a>
+ <a href="/event/dummy-event-0">Internal link</a>
+ <a role="button" href="/unsubscribe_from_list" class="btn btn-link">Unsubscribe link</a>
+ <a href="/view">
+ View link
+ </a>
+ </p>
+</div>'''
+ jinja_html_preview = self.env['mail.render.mixin']._generate_preview(jinja_html)
+ self.assertIn('Hello ${object.name}', jinja_html_preview)
+ self.assertIn('Here are your personal links', jinja_html_preview)
+ self.assertIn('External link', jinja_html_preview)
+ self.assertIn('Internal link', jinja_html_preview)
+ self.assertIn('Unsubscribe link', jinja_html_preview)
+ self.assertIn('View link', jinja_html_preview)
+
+ mailing.write({
+ 'body_html': jinja_html,
+ 'mailing_model_id': self.env['ir.model']._get('mailing.test.optout').id,
+ })
+ recipients = self._create_test_blacklist_records(model='mailing.test.optout', count=10)
+
+ # optout records 1 and 2
+ (recipients[1] | recipients[2]).write({'opt_out': True})
+ # blacklist records 3 and 4
+ self.env['mail.blacklist'].create({'email': recipients[3].email_normalized})
+ self.env['mail.blacklist'].create({'email': recipients[4].email_normalized})
+
+ mailing.write({'mailing_domain': [('id', 'in', recipients.ids)]})
+ mailing.action_put_in_queue()
+ with self.mock_mail_gateway(mail_unlink_sent=False):
+ mailing._process_mass_mailing_queue()
+
+ for recipient in recipients:
+ recipient_info = {
+ 'email': recipient.email_normalized,
+ 'content': 'Hello <span class="text-muted">%s</span' % recipient.name}
+ if recipient in recipients[1] | recipients[2]:
+ recipient_info['state'] = 'ignored'
+ elif recipient in recipients[3] | recipients[4]:
+ recipient_info['state'] = 'ignored'
+ else:
+ email = self._find_sent_mail_wemail(recipient.email_normalized)
+ # preview correctly integrated rendered jinja
+ self.assertIn(
+ 'Hello %s Here are your personal links External link Internal link Unsubscribe link View link' % recipient.name,
+ email['body'])
+ # rendered unsubscribe
+ self.assertIn(
+ 'http://localhost:8069/mail/mailing/%s/unsubscribe' % mailing.id,
+ email['body'])
+ # rendered view
+ self.assertIn(
+ 'http://localhost:8069/mailing/%s/view' % mailing.id,
+ email['body'])
+
+ self.assertMailTraces([recipient_info], mailing, recipient, check_mail=True)
+
+ self.assertEqual(mailing.ignored, 4)