diff options
| author | Thibault Delavallée <tde@odoo.com> | 2020-08-05 10:02:23 +0000 |
|---|---|---|
| committer | Thibault Delavallée <tde@odoo.com> | 2020-08-05 13:55:04 +0000 |
| commit | cfbbc229d88b74ec7080c47cf1b6555dfc3c23b4 (patch) | |
| tree | 65ec41a1fe7a330502afafdc20641cf623be769d /addons/test_mail_full | |
| parent | c1865706b06a6cea7f37ba4c8d962e374edfab83 (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__.py | 1 | ||||
| -rw-r--r-- | addons/test_mail_full/tests/test_mass_mailing.py | 86 |
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) |
