From 4cf75bb1767fe7524c8e4d895d84ad2b56ef404d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?=
Hello ${object.name}
', + 'mailing_model_id': self.env['ir.model']._get('mailing.list').id, + 'contact_list_ids': [(4, ml.id) for ml in mailing_list_1 | mailing_list_2], + }) + mailing.action_put_in_queue() + with self.mock_mail_gateway(mail_unlink_sent=False): + mailing._process_mass_mailing_queue() + + self.assertMailTraces( + [{'email': 'test@test.example.com', 'state': 'sent'}, + {'email': 'test@test.example.com', 'state': 'ignored'}, + {'email': 'test3@test.example.com'}, + {'email': 'test4@test.example.com'}, + {'email': 'test5@test.example.com', 'state': 'ignored'}], + mailing, + mailing_contact_1 + mailing_contact_2 + mailing_contact_3 + mailing_contact_4 + mailing_contact_5, + check_mail=True + ) + self.assertEqual(mailing.ignored, 2) diff --git a/addons/test_mass_mailing/tests/test_mailing_internals.py b/addons/test_mass_mailing/tests/test_mailing_internals.py deleted file mode 100644 index 555578e492d..00000000000 --- a/addons/test_mass_mailing/tests/test_mailing_internals.py +++ /dev/null @@ -1,163 +0,0 @@ -# -*- coding: utf-8 -*- -# Part of Odoo. See LICENSE file for full copyright and licensing details. - -from odoo.addons.test_mass_mailing.tests.common import TestMassMailCommon -from odoo.addons.test_mass_mailing.data.mail_test_data import MAIL_TEMPLATE -from odoo.tests.common import users -from odoo.tools import mute_logger - - -class TestMailingInternals(TestMassMailCommon): - - def setUp(self): - super(TestMailingInternals, self).setUp() - - self.env['ir.config_parameter'].set_param('mail.bounce.alias', 'bounce.test') - self.env['ir.config_parameter'].set_param('mail.catchall.alias', 'catchall.test') - self.env['ir.config_parameter'].set_param('mail.catchall.domain', 'test.example.com') - - self.test_alias = self.env['mail.alias'].create({ - 'alias_name': 'test.alias', - 'alias_user_id': False, - 'alias_model_id': self.env['ir.model']._get('mailing.test.simple').id, - 'alias_contact': 'everyone' - }) - - @mute_logger('odoo.addons.mail.models.mail_render_mixin') - def test_mailing_test_button(self): - mailing = self.env['mailing.mailing'].create({ - 'name': 'TestButton', - 'subject': 'Subject ${object.name}', - 'preview': 'Preview ${object.name}', - 'state': 'draft', - 'mailing_type': 'mail', - 'body_html': 'Hello ${object.name}
', - 'mailing_model_id': self.env['ir.model']._get('res.partner').id, - }) - mailing_test = self.env['mailing.mailing.test'].create({ - 'email_to': 'test@test.com', - 'mass_mailing_id': mailing.id, - }) - - with self.mock_mail_gateway(): - mailing_test.send_mail_test() - - # Test if bad jinja in the subject raises an error - mailing.write({'subject': 'Subject ${object.name_id.id}'}) - with self.mock_mail_gateway(), self.assertRaises(Exception): - mailing_test.send_mail_test() - - # Test if bad jinja in the body raises an error - mailing.write({ - 'subject': 'Subject ${object.name}', - 'body_html': 'Hello ${object.name_id.id}
', - }) - with self.mock_mail_gateway(), self.assertRaises(Exception): - mailing_test.send_mail_test() - - # Test if bad jinja in the preview raises an error - mailing.write({ - 'body_html': 'Hello ${object.name}
', - 'preview': 'Preview ${object.name_id.id}', - }) - with self.mock_mail_gateway(), self.assertRaises(Exception): - mailing_test.send_mail_test() - - def test_mailing_trace_update(self): - customers = self.env['res.partner'] - for x in range(0, 3): - customers |= self.env['res.partner'].create({ - 'name': 'Customer_%02d' % x, - 'email': '"Customer_%02d"Hello ${object.name}
', + 'mailing_model_id': self.env['ir.model']._get('res.partner').id, + }) + mailing_test = self.env['mailing.mailing.test'].create({ + 'email_to': 'test@test.com', + 'mass_mailing_id': mailing.id, + }) + + with self.mock_mail_gateway(): + mailing_test.send_mail_test() + + # Test if bad jinja in the subject raises an error + mailing.write({'subject': 'Subject ${object.name_id.id}'}) + with self.mock_mail_gateway(), self.assertRaises(Exception): + mailing_test.send_mail_test() + + # Test if bad jinja in the body raises an error + mailing.write({ + 'subject': 'Subject ${object.name}', + 'body_html': 'Hello ${object.name_id.id}
', + }) + with self.mock_mail_gateway(), self.assertRaises(Exception): + mailing_test.send_mail_test() + + # Test if bad jinja in the preview raises an error + mailing.write({ + 'body_html': 'Hello ${object.name}
', + 'preview': 'Preview ${object.name_id.id}', + }) + with self.mock_mail_gateway(), self.assertRaises(Exception): + mailing_test.send_mail_test() diff --git a/addons/test_mass_mailing/tests/test_mass_mailing.py b/addons/test_mass_mailing/tests/test_mass_mailing.py deleted file mode 100644 index 0a2f45f0e17..00000000000 --- a/addons/test_mass_mailing/tests/test_mass_mailing.py +++ /dev/null @@ -1,176 +0,0 @@ -# -*- coding: utf-8 -*- -# Part of Odoo. See LICENSE file for full copyright and licensing details. - -from odoo.addons.test_mass_mailing.tests.common import TestMassMailCommon -from odoo.tests import tagged -from odoo.tests.common import users -from odoo.tools import mute_logger - - -@tagged('mass_mailing') -class TestMassMailing(TestMassMailCommon): - - @classmethod - def setUpClass(cls): - super(TestMassMailing, cls).setUpClass() - - @users('user_marketing') - @mute_logger('odoo.addons.mail.models.mail_mail') - def test_mailing_gateway_update(self): - mailing = self.env['mailing.mailing'].browse(self.mailing_bl.ids) - recipients = self._create_mailing_test_records(model='mailing.test.optout', count=5) - self.assertEqual(len(recipients), 5) - - mailing.write({ - 'mailing_model_id': self.env['ir.model']._get('mailing.test.optout'), - '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() - - self.assertMailTraces( - [{'email': record.email_normalized} - for record in recipients], - mailing, recipients, - mail_links_info=[[ - ('url0', 'https://www.odoo.tz/my/%s' % record.name, True, {}), - ('url1', 'https://www.odoo.be', True, {}), - ('url2', 'https://www.odoo.com', True, {}), - ('url3', 'https://www.odoo.eu', True, {}), - ('url4', 'https://www.example.com/foo/bar?baz=qux', True, {'baz': 'qux'}), - ('url5', '%s/event/dummy-event-0' % mailing.get_base_url(), True, {}), - # view is not shortened and parsed at sending - ('url6', '%s/view' % mailing.get_base_url(), False, {}), - ('url7', 'mailto:test@odoo.com', False, {}), - # unsubscribe is not shortened and parsed at sending - ('url8', '%s/unsubscribe_from_list' % mailing.get_base_url(), False, {}), - ] for record in recipients], - check_mail=True - ) - self.assertMailingStatistics(mailing, expected=5, delivered=5, sent=5) - - # simulate a click - self.gateway_mail_click(mailing, recipients[0], 'https://www.odoo.be') - mailing.invalidate_cache() - self.assertMailingStatistics(mailing, expected=5, delivered=5, sent=5, opened=1, clicked=1) - - # simulate a bounce - self.assertEqual(recipients[1].message_bounce, 0) - self.gateway_mail_bounce(mailing, recipients[1]) - mailing.invalidate_cache() - self.assertMailingStatistics(mailing, expected=5, delivered=4, sent=5, opened=1, clicked=1, bounced=1) - self.assertEqual(recipients[1].message_bounce, 1) - - @users('user_marketing') - @mute_logger('odoo.addons.mail.models.mail_mail') - def test_mailing_w_blacklist(self): - mailing = self.env['mailing.mailing'].browse(self.mailing_bl.ids) - recipients = self._create_mailing_test_records(count=5) - - # 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() - - self.assertMailTraces( - [{'email': 'test.record.00@test.example.com'}, - {'email': 'test.record.01@test.example.com'}, - {'email': 'test.record.02@test.example.com'}, - {'email': 'test.record.03@test.example.com', 'state': 'ignored'}, - {'email': 'test.record.04@test.example.com', 'state': 'ignored'}], - mailing, recipients, check_mail=True - ) - self.assertEqual(mailing.ignored, 2) - - @users('user_marketing') - @mute_logger('odoo.addons.mail.models.mail_mail') - def test_mailing_w_opt_out(self): - mailing = self.env['mailing.mailing'].browse(self.mailing_bl.ids) - recipients = self._create_mailing_test_records(model='mailing.test.optout', count=5) - - # optout records 0 and 1 - (recipients[0] | recipients[1]).write({'opt_out': True}) - # blacklist records 4 - self.env['mail.blacklist'].create({'email': recipients[4].email_normalized}) - - mailing.write({ - 'mailing_model_id': self.env['ir.model']._get('mailing.test.optout'), - '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() - - self.assertMailTraces( - [{'email': 'test.record.00@test.example.com', 'state': 'ignored'}, - {'email': 'test.record.01@test.example.com', 'state': 'ignored'}, - {'email': 'test.record.02@test.example.com'}, - {'email': 'test.record.03@test.example.com'}, - {'email': 'test.record.04@test.example.com', 'state': 'ignored'}], - mailing, recipients, check_mail=True - ) - self.assertEqual(mailing.ignored, 3) - - @users('user_marketing') - @mute_logger('odoo.addons.mail.models.mail_mail') - def test_mailing_mailing_list_optout(self): - """ Test mailing list model specific optout behavior """ - mailing_contact_1 = self.env['mailing.contact'].create({'name': 'test 1A', 'email': 'test@test.example.com'}) - mailing_contact_2 = self.env['mailing.contact'].create({'name': 'test 1B', 'email': 'test@test.example.com'}) - mailing_contact_3 = self.env['mailing.contact'].create({'name': 'test 3', 'email': 'test3@test.example.com'}) - mailing_contact_4 = self.env['mailing.contact'].create({'name': 'test 4', 'email': 'test4@test.example.com'}) - mailing_contact_5 = self.env['mailing.contact'].create({'name': 'test 5', 'email': 'test5@test.example.com'}) - - # create mailing list record - mailing_list_1 = self.env['mailing.list'].create({ - 'name': 'A', - 'contact_ids': [ - (4, mailing_contact_1.id), - (4, mailing_contact_2.id), - (4, mailing_contact_3.id), - (4, mailing_contact_5.id), - ] - }) - mailing_list_2 = self.env['mailing.list'].create({ - 'name': 'B', - 'contact_ids': [ - (4, mailing_contact_3.id), - (4, mailing_contact_4.id), - ] - }) - # contact_1 is optout but same email is not optout from the same list - # contact 3 is optout in list 1 but not in list 2 - # contact 5 is optout - Sub = self.env['mailing.contact.subscription'] - Sub.search([('contact_id', '=', mailing_contact_1.id), ('list_id', '=', mailing_list_1.id)]).write({'opt_out': True}) - Sub.search([('contact_id', '=', mailing_contact_3.id), ('list_id', '=', mailing_list_1.id)]).write({'opt_out': True}) - Sub.search([('contact_id', '=', mailing_contact_5.id), ('list_id', '=', mailing_list_1.id)]).write({'opt_out': True}) - - # create mass mailing record - mailing = self.env['mailing.mailing'].create({ - 'name': 'SourceName', - 'subject': 'MailingSubject', - 'body_html': 'Hello ${object.name}
', - 'mailing_model_id': self.env['ir.model']._get('mailing.list').id, - 'contact_list_ids': [(4, ml.id) for ml in mailing_list_1 | mailing_list_2], - }) - mailing.action_put_in_queue() - with self.mock_mail_gateway(mail_unlink_sent=False): - mailing._process_mass_mailing_queue() - - self.assertMailTraces( - [{'email': 'test@test.example.com', 'state': 'sent'}, - {'email': 'test@test.example.com', 'state': 'ignored'}, - {'email': 'test3@test.example.com'}, - {'email': 'test4@test.example.com'}, - {'email': 'test5@test.example.com', 'state': 'ignored'}], - mailing, - mailing_contact_1 + mailing_contact_2 + mailing_contact_3 + mailing_contact_4 + mailing_contact_5, - check_mail=True - ) - self.assertEqual(mailing.ignored, 2) -- cgit v1.2.3