[IMP] mass_mailing: improve contact order
Use name instead of email, as contact is notably used in sms marketing application with mainly phone numbers. Better use the name as primary ordering field. Then use ID to avoid non deterministic behavior. This requires to fix some tests in 'test_mass_mailing' so that they use test models instead of existing models. That way they are not dependent on existing data and existing models definition anymore. An issue with ordering rose as we modified the ordering of contact model. Task-2150462 (Mass Mailing: Improve subscription management) Part-of: odoo/odoo#86084
This commit is contained in:
@@ -14,7 +14,7 @@ class MassMailingContact(models.Model):
|
||||
_name = 'mailing.contact'
|
||||
_inherit = ['mail.thread.blacklist']
|
||||
_description = 'Mailing Contact'
|
||||
_order = 'email'
|
||||
_order = 'name ASC, id DESC'
|
||||
_mailing_enabled = True
|
||||
|
||||
def default_get(self, fields_list):
|
||||
|
||||
@@ -61,6 +61,7 @@ class MailingBLacklist(models.Model):
|
||||
_description = 'Mailing Blacklist Enabled'
|
||||
_name = 'mailing.test.blacklist'
|
||||
_inherit = ['mail.thread.blacklist']
|
||||
_order = 'name ASC, id DESC'
|
||||
_primary_email = 'email_from'
|
||||
|
||||
name = fields.Char()
|
||||
|
||||
@@ -11,18 +11,31 @@ from odoo.tools import mute_logger
|
||||
@tagged('mailing_manage')
|
||||
class TestMailingTest(TestMassMailCommon):
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super().setUpClass()
|
||||
cls.test_records = cls.env['mailing.test.blacklist'].create([
|
||||
{
|
||||
'email_from': f'test.mailing.{idx}@test.example.com',
|
||||
'name': f'Test Mailing {idx}',
|
||||
'user_id': cls.user_marketing.id,
|
||||
}
|
||||
for idx in range(5)
|
||||
])
|
||||
cls.test_mailing_bl = cls.env['mailing.mailing'].create({
|
||||
'body_html': '<p>Hello <t t-out="object.name"/></p>',
|
||||
'mailing_domain': [('id', 'in', cls.test_records.ids)],
|
||||
'mailing_model_id': cls.env['ir.model']._get_id('mailing.test.blacklist'),
|
||||
'mailing_type': 'mail',
|
||||
'name': 'TestButton',
|
||||
'preview': 'Preview {{ object.name }}',
|
||||
'subject': 'Subject {{ object.name }}',
|
||||
})
|
||||
|
||||
@users('user_marketing')
|
||||
@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': '<p>Hello <t t-out="object.name"/></p>',
|
||||
'mailing_model_id': self.env['ir.model']._get('res.partner').id,
|
||||
})
|
||||
mailing = self.test_mailing_bl.with_env(self.env)
|
||||
mailing_test = self.env['mailing.mailing.test'].create({
|
||||
'email_to': 'test@test.com',
|
||||
'mass_mailing_id': mailing.id,
|
||||
@@ -63,25 +76,12 @@ class TestMailingTest(TestMassMailCommon):
|
||||
mailing_test.send_mail_test()
|
||||
|
||||
def test_mailing_test_equals_reality(self):
|
||||
"""
|
||||
Check that both test and real emails will format the qweb and inline placeholders correctly in body and subject.
|
||||
"""
|
||||
contact_list = self.env['mailing.list'].create({
|
||||
'name': 'Testers',
|
||||
'contact_ids': [Command.create({
|
||||
'name': 'Mitchell Admin',
|
||||
'email': 'real@real.com',
|
||||
})],
|
||||
})
|
||||
|
||||
mailing = self.env['mailing.mailing'].create({
|
||||
'name': 'TestButton',
|
||||
'subject': 'Subject {{ object.name }} <t t-out="object.name"/>',
|
||||
'state': 'draft',
|
||||
'mailing_type': 'mail',
|
||||
""" Check that both test and real emails will format the qweb and inline
|
||||
placeholders correctly in body and subject. """
|
||||
mailing = self.test_mailing_bl.with_env(self.env)
|
||||
mailing.write({
|
||||
'body_html': '<p>Hello {{ object.name }} <t t-out="object.name"/></p>',
|
||||
'mailing_model_id': self.env['ir.model']._get('mailing.list').id,
|
||||
'contact_list_ids': [contact_list.id],
|
||||
'subject': 'Subject {{ object.name }} <t t-out="object.name"/>',
|
||||
})
|
||||
mailing_test = self.env['mailing.mailing.test'].create({
|
||||
'email_to': 'test@test.com',
|
||||
@@ -91,8 +91,10 @@ class TestMailingTest(TestMassMailCommon):
|
||||
with self.mock_mail_gateway():
|
||||
mailing_test.send_mail_test()
|
||||
|
||||
expected_subject = 'Subject Mitchell Admin <t t-out="object.name"/>'
|
||||
expected_body = 'Hello {{ object.name }} Mitchell Admin'
|
||||
expected_test_record = self.env[mailing.mailing_model_real].search([], limit=1)
|
||||
self.assertEqual(expected_test_record, self.test_records[0], 'Should take first found one')
|
||||
expected_subject = f'Subject {expected_test_record.name} <t t-out="object.name"/>'
|
||||
expected_body = 'Hello {{ object.name }}' + f' {expected_test_record.name}'
|
||||
|
||||
self.assertSentEmail(self.env.user.partner_id, ['test@test.com'],
|
||||
subject=expected_subject,
|
||||
@@ -103,6 +105,9 @@ class TestMailingTest(TestMassMailCommon):
|
||||
mailing.action_launch()
|
||||
self.env.ref('mass_mailing.ir_cron_mass_mailing_queue').method_direct_trigger()
|
||||
|
||||
self.assertSentEmail(self.env.user.partner_id, ['real@real.com'],
|
||||
self.assertSentEmail(
|
||||
self.env.user.partner_id,
|
||||
[expected_test_record.email_from],
|
||||
subject=expected_subject,
|
||||
body_content=expected_body)
|
||||
body_content=expected_body,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user