Files
odoo_source/addons/test_mail_full/tests/test_mass_mailing.py
T
Xavier Morel 5fc8254a89 [FIX] test_mail_full: test only runs with default port
The test fails when running tests with a non-standard http_port (which
is necessary to run tests in multiple Odoo instances concurrently)
because the http port is hard-coded.

Soft-code it properly.

closes odoo/odoo#60192

X-original-commit: 3ab87ade4274600a2d97708e54436db162b68547
Signed-off-by: Xavier Morel (xmo) <xmo@odoo.com>
2020-10-16 15:44:57 +00:00

81 lines
3.2 KiB
Python

# -*- 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 config, 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>'''
mailing.write({
'preview': 'Hi ${object.name} :)',
'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(
'Hi %s :)' % recipient.name,
email['body'])
# rendered unsubscribe
self.assertIn(
'http://localhost:%s/mail/mailing/%s/unsubscribe' % (config['http_port'], mailing.id),
email['body'])
# rendered view
self.assertIn(
'http://localhost:%s/mailing/%s/view' % (config['http_port'], mailing.id),
email['body'])
self.assertMailTraces([recipient_info], mailing, recipient, check_mail=True)
self.assertEqual(mailing.ignored, 4)