1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import datetime
from odoo.addons.test_mass_mailing.tests import common
from odoo.tests.common import users
from odoo.addons.mass_mailing.models.mail_thread import BLACKLIST_MAX_BOUNCED_LIMIT
class TestAutoBlacklist(common.TestMassMailCommon):
@classmethod
def setUpClass(cls):
super(TestAutoBlacklist, cls).setUpClass()
cls.target_rec = cls._create_mailing_test_records()[0]
cls.mailing_bl.write({'mailing_domain': [('id', 'in', cls.target_rec.ids)]})
@users('user_marketing')
def test_mailing_bounce_w_auto_bl(self):
self._test_mailing_bounce_w_auto_bl(None)
@users('user_marketing')
def test_mailing_bounce_w_auto_bl_partner(self):
bounced_partner = self.env['res.partner'].sudo().create({
'name': 'Bounced Partner',
'email': self.target_rec.email_from,
'message_bounce': BLACKLIST_MAX_BOUNCED_LIMIT,
})
self._test_mailing_bounce_w_auto_bl({'bounced_partner': bounced_partner})
@users('user_marketing')
def test_mailing_bounce_w_auto_bl_partner_duplicates(self):
bounced_partners = self.env['res.partner'].sudo().create({
'name': 'Bounced Partner1',
'email': self.target_rec.email_from,
'message_bounce': BLACKLIST_MAX_BOUNCED_LIMIT,
}) | self.env['res.partner'].sudo().create({
'name': 'Bounced Partner2',
'email': self.target_rec.email_from,
'message_bounce': BLACKLIST_MAX_BOUNCED_LIMIT,
})
self._test_mailing_bounce_w_auto_bl({'bounced_partner': bounced_partners})
def _test_mailing_bounce_w_auto_bl(self, bounce_base_values):
mailing = self.env['mailing.mailing'].browse(self.mailing_bl.ids)
target = self.env['mailing.test.blacklist'].browse(self.target_rec.ids)
# create bounced history of 4 statistics
for idx in range(4):
new_mailing = mailing.copy()
self._create_bounce_trace(new_mailing, target, dt=datetime.datetime.now() - datetime.timedelta(weeks=idx+2))
self.gateway_mail_bounce(new_mailing, target, bounce_base_values)
# mass mail record: ok, not blacklisted yet
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'}],
mailing, target,
check_mail=True
)
# call bounced
self.gateway_mail_bounce(mailing, target, bounce_base_values)
# check blacklist
blacklist_record = self.env['mail.blacklist'].sudo().search([('email', '=', target.email_normalized)])
self.assertEqual(len(blacklist_record), 1)
self.assertTrue(target.is_blacklisted)
# mass mail record: ko, blacklisted
new_mailing = mailing.copy()
new_mailing.write({'mailing_domain': [('id', 'in', target.ids)]})
new_mailing.action_put_in_queue()
with self.mock_mail_gateway(mail_unlink_sent=False):
new_mailing._process_mass_mailing_queue()
self.assertMailTraces(
[{'email': 'test.record.00@test.example.com', 'state': 'ignored'}],
new_mailing, target, check_mail=True
)
|