PURPOSE Improve tooling of mail tests. Lessen custom code, try to use same tools in all tests. SPECIFICATIONS Use MailCommon as a base class for performance test. It now uses the same boilerplate as other tests, leading to easier to reproduce and understand testing setup. This notably now adds outgoing mail servers which means adding one query to some tests involving emails. Task-2673913 (TestMail: Cleanup and improve test coverage) Part-of: odoo/odoo#86393
95 lines
3.7 KiB
Python
95 lines
3.7 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo.addons.mail.tests.common import mail_new_test_user
|
|
from odoo.addons.test_mail.tests.test_performance import BaseMailPerformance
|
|
from odoo.tests.common import users, warmup
|
|
from odoo.tests import tagged
|
|
from odoo.tools import mute_logger
|
|
|
|
|
|
class TestMassMailPerformanceBase(BaseMailPerformance):
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super(TestMassMailPerformanceBase, cls).setUpClass()
|
|
|
|
cls.user_marketing = mail_new_test_user(
|
|
cls.env,
|
|
groups='base.group_user,mass_mailing.group_mass_mailing_user',
|
|
login='marketing',
|
|
name='Martial Marketing',
|
|
signature='--\nMartial'
|
|
)
|
|
|
|
@tagged('mail_performance')
|
|
class TestMassMailPerformance(TestMassMailPerformanceBase):
|
|
|
|
def setUp(self):
|
|
super(TestMassMailPerformance, self).setUp()
|
|
values = [{
|
|
'name': 'Recipient %s' % x,
|
|
'email_from': 'Recipient <rec.%s@example.com>' % x,
|
|
} for x in range(0, 50)]
|
|
self.mm_recs = self.env['mailing.performance'].create(values)
|
|
|
|
@users('__system__', 'marketing')
|
|
@warmup
|
|
@mute_logger('odoo.addons.mail.models.mail_mail', 'odoo.models.unlink', 'odoo.tests')
|
|
def test_send_mailing(self):
|
|
mailing = self.env['mailing.mailing'].create({
|
|
'name': 'Test',
|
|
'subject': 'Test',
|
|
'body_html': '<p>Hello <a role="button" href="https://www.example.com/foo/bar?baz=qux">quux</a><a role="button" href="/unsubscribe_from_list">Unsubscribe</a></p>',
|
|
'reply_to_mode': 'new',
|
|
'mailing_model_id': self.ref('test_mass_mailing.model_mailing_performance'),
|
|
'mailing_domain': [('id', 'in', self.mm_recs.ids)],
|
|
})
|
|
|
|
# runbot needs +101 compared to local (1570)
|
|
with self.assertQueryCount(__system__=1672, marketing=1673):
|
|
mailing.action_send_mail()
|
|
|
|
self.assertEqual(mailing.sent, 50)
|
|
self.assertEqual(mailing.delivered, 50)
|
|
|
|
|
|
@tagged('mail_performance')
|
|
class TestMassMailBlPerformance(TestMassMailPerformanceBase):
|
|
|
|
def setUp(self):
|
|
""" In this setup we prepare 20 blacklist entries. We therefore add
|
|
20 recipients compared to first test in order to have comparable results. """
|
|
super(TestMassMailBlPerformance, self).setUp()
|
|
values = [{
|
|
'name': 'Recipient %s' % x,
|
|
'email_from': 'Recipient <rec.%s@example.com>' % x,
|
|
} for x in range(0, 62)]
|
|
self.mm_recs = self.env['mailing.performance.blacklist'].create(values)
|
|
|
|
for x in range(1, 13):
|
|
self.env['mail.blacklist'].create({
|
|
'email': 'rec.%s@example.com' % (x * 5)
|
|
})
|
|
self.env['mailing.performance.blacklist'].flush()
|
|
|
|
@users('__system__', 'marketing')
|
|
@warmup
|
|
@mute_logger('odoo.addons.mail.models.mail_mail', 'odoo.models.unlink', 'odoo.tests')
|
|
def test_send_mailing_w_bl(self):
|
|
mailing = self.env['mailing.mailing'].create({
|
|
'name': 'Test',
|
|
'subject': 'Test',
|
|
'body_html': '<p>Hello <a role="button" href="https://www.example.com/foo/bar?baz=qux">quux</a><a role="button" href="/unsubscribe_from_list">Unsubscribe</a></p>',
|
|
'reply_to_mode': 'new',
|
|
'mailing_model_id': self.ref('test_mass_mailing.model_mailing_performance_blacklist'),
|
|
'mailing_domain': [('id', 'in', self.mm_recs.ids)],
|
|
})
|
|
|
|
# runbot needs +125 compared to local (1836)
|
|
with self.assertQueryCount(__system__=1962, marketing=1963):
|
|
mailing.action_send_mail()
|
|
|
|
self.assertEqual(mailing.sent, 50)
|
|
self.assertEqual(mailing.delivered, 50)
|