diff --git a/addons/mass_mailing/models/mailing.py b/addons/mass_mailing/models/mailing.py index 25e5f271d58..5f8cf2ba2f6 100644 --- a/addons/mass_mailing/models/mailing.py +++ b/addons/mass_mailing/models/mailing.py @@ -261,8 +261,8 @@ class MassMailing(models.Model): def _compute_total(self): for mass_mailing in self: total = self.env[mass_mailing.mailing_model_real].search_count(mass_mailing._parse_mailing_domain()) - if mass_mailing.ab_testing_pc < 100: - total = int(total / 100.0 * mass_mailing.ab_testing_pc) + if total and mass_mailing.ab_testing_pc < 100: + total = max(int(total / 100.0 * mass_mailing.ab_testing_pc), 1) mass_mailing.total = total def _compute_clicks_ratio(self): @@ -990,7 +990,9 @@ class MassMailing(models.Model): # randomly choose a fragment if self.ab_testing_enabled and self.ab_testing_pc < 100: contact_nbr = self.env[self.mailing_model_real].search_count(mailing_domain) - topick = int(contact_nbr / 100.0 * self.ab_testing_pc) + topick = 0 + if contact_nbr: + topick = max(int(contact_nbr / 100.0 * self.ab_testing_pc), 1) if self.campaign_id and self.ab_testing_enabled: already_mailed = self.campaign_id._get_mailing_recipients()[self.campaign_id.id] else: diff --git a/addons/mass_mailing/tests/test_mailing_ab_testing.py b/addons/mass_mailing/tests/test_mailing_ab_testing.py index 5d950598088..b951cb094d5 100644 --- a/addons/mass_mailing/tests/test_mailing_ab_testing.py +++ b/addons/mass_mailing/tests/test_mailing_ab_testing.py @@ -173,3 +173,22 @@ class TestMailingABTesting(MassMailCommon): self.ab_testing_mailing_ids.invalidate_recordset() winner_mailing = self.ab_testing_campaign.mailing_mail_ids.filtered(lambda mailing: mailing.ab_testing_pc == 100) self.assertEqual(winner_mailing.subject, 'A/B Testing V2') + + @mute_logger('odoo.addons.mail.models.mail_mail') + @users('user_marketing') + def test_mailing_ab_testing_minimum_participants(self): + """ Test that it should send minimum one mail(if possible) when ab_testing_pc is too small compared to the amount of targeted records.""" + mailing_list = self._create_mailing_list_of_x_contacts(10) + ab_testing = self.env['mailing.mailing'].create({ + 'subject': 'A/B Testing SMS V1', + 'contact_list_ids': mailing_list.ids, + 'ab_testing_enabled': True, + 'ab_testing_pc': 2, + 'ab_testing_schedule_datetime': datetime.now(), + 'mailing_type': 'mail', + 'campaign_id': self.ab_testing_campaign.id, + }) + with self.mock_mail_gateway(): + ab_testing.action_send_mail() + self.assertEqual(ab_testing.state, 'done') + self.assertEqual(len(self._mails), 1)