From 3dd8d8d329b666944bd0236aacf948ead480bac3 Mon Sep 17 00:00:00 2001 From: Noe Antoine Date: Thu, 30 Nov 2023 13:41:29 +0100 Subject: [PATCH] [FIX] {test_}mass_mailing: exclude 'cancel' traces from ratio ISSUE ===== clicks_ratio uses a formula that is not relevant as it accounts for emails that could not lead to a click. It divides the number of clicks by the total of expected emails instead of substracting cancelled ones. HOW TO REPRODUCE ================ 1. Create a mailing M 2. Create a mailing list of 5 contacts with same email adress 3. Create a link tracker associated to M 4. Send -> 4 emails will be canceled as same email is used 5. Click the link. 6. Ratio of 'clicked' on the mailing view will be 20% instead of 100% FIX === Only use mailing traces where trace status is not 'cancelled'; aligning the formula to other stats set in _compute_statistics. The formula becomes: CR = # clicks / (# total_traces - # cancel_traces) A test on statistics is modified to check this behavior. Task-3607171 closes odoo/odoo#148551 X-original-commit: 5dc7c6102f1d23ffa02d3b6aff3c518204fb4566 Signed-off-by: Thibault Delavallee (tde) --- addons/mass_mailing/models/mailing.py | 1 + addons/test_mass_mailing/tests/test_mailing_statistics.py | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/addons/mass_mailing/models/mailing.py b/addons/mass_mailing/models/mailing.py index 50e73aff0a9..851edc5100e 100644 --- a/addons/mass_mailing/models/mailing.py +++ b/addons/mass_mailing/models/mailing.py @@ -289,6 +289,7 @@ class MassMailing(models.Model): FROM mailing_trace AS stats LEFT OUTER JOIN link_tracker_click AS clicks ON clicks.mailing_trace_id = stats.id WHERE stats.mass_mailing_id IN %s + AND stats.trace_status != 'cancel' GROUP BY stats.mass_mailing_id """, [tuple(self.ids) or (None,)]) mass_mailing_data = self.env.cr.dictfetchall() diff --git a/addons/test_mass_mailing/tests/test_mailing_statistics.py b/addons/test_mass_mailing/tests/test_mailing_statistics.py index 56c3edede50..13be8bb5286 100644 --- a/addons/test_mass_mailing/tests/test_mailing_statistics.py +++ b/addons/test_mass_mailing/tests/test_mailing_statistics.py @@ -29,7 +29,8 @@ class TestMailingStatistics(TestMassMailCommon): @users('user_marketing') @mute_logger('odoo.addons.mass_mailing.models.mailing', 'odoo.addons.mail.models.mail_mail', 'odoo.addons.mail.models.mail_thread') def test_mailing_statistics(self): - target_records = self._create_mailing_test_records(model='mailing.test.blacklist', count=10) + target_records = self._create_mailing_test_records(model='mailing.test.blacklist', count=11) + target_records[10]['email_from'] = False # void email should lead to a 'cancel' trace_status mailing = self.env['mailing.mailing'].browse(self.mailing_bl.ids) mailing.write({'mailing_domain': [('id', 'in', target_records.ids)], 'user_id': self.user_marketing_2.id}) mailing.action_put_in_queue() @@ -45,7 +46,9 @@ class TestMailingStatistics(TestMassMailCommon): self.gateway_mail_click(mailing, target_records[3], 'https://www.odoo.be') # check mailing statistics + self.assertEqual(mailing.canceled, 1) self.assertEqual(mailing.clicked, 3) + self.assertEqual(mailing.clicks_ratio, 30) self.assertEqual(mailing.delivered, 10) self.assertEqual(mailing.opened, 4) self.assertEqual(mailing.opened_ratio, 40)