From 29b6ee1e1e487ff9ce5131667fb4e86223f001cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20D=C3=ADaz?= Date: Thu, 16 Apr 2020 19:36:32 +0200 Subject: [PATCH] [IMP] mail_tracking: Ignore catchall --- mail_tracking/models/__init__.py | 1 + mail_tracking/models/ir_config_parameter.py | 26 +++++++++++++++++++++ mail_tracking/models/mail_alias.py | 8 ++++++- mail_tracking/tests/test_mail_tracking.py | 16 +++++++------ 4 files changed, 43 insertions(+), 8 deletions(-) create mode 100644 mail_tracking/models/ir_config_parameter.py diff --git a/mail_tracking/models/__init__.py b/mail_tracking/models/__init__.py index 0f2e248a4..1a5aded02 100644 --- a/mail_tracking/models/__init__.py +++ b/mail_tracking/models/__init__.py @@ -10,3 +10,4 @@ from . import res_partner from . import mail_thread from . import mail_resend_message from . import mail_alias +from . import ir_config_parameter diff --git a/mail_tracking/models/ir_config_parameter.py b/mail_tracking/models/ir_config_parameter.py new file mode 100644 index 000000000..bdfcf72a5 --- /dev/null +++ b/mail_tracking/models/ir_config_parameter.py @@ -0,0 +1,26 @@ +# Copyright 2020 Tecnativa - Alexandre Díaz +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import models, api + + +class IrConfigParameter(models.Model): + _inherit = 'ir.config_parameter' + + @api.model_create_multi + def create(self, vals_list): + res = super().create(vals_list) + self.env['mail.alias'].clear_caches() + return res + + @api.multi + def write(self, vals): + res = super().write(vals) + self.env['mail.alias'].clear_caches() + return res + + @api.multi + def unlink(self): + res = super().unlink() + self.env['mail.alias'].clear_caches() + return res diff --git a/mail_tracking/models/mail_alias.py b/mail_tracking/models/mail_alias.py index 45b7cfee4..53f7b7ff9 100644 --- a/mail_tracking/models/mail_alias.py +++ b/mail_tracking/models/mail_alias.py @@ -10,9 +10,15 @@ class MailAlias(models.Model): @api.model @tools.ormcache() def get_aliases(self): - return set(x['display_name'] for x in self.search_read([ + aliases = set(x['display_name'] for x in self.search_read([ ('alias_name', '!=', False), ], ['display_name'])) + IrConfigParamObj = self.env["ir.config_parameter"].sudo() + catchall = "%s@%s" % ( + IrConfigParamObj.get_param("mail.catchall.alias"), + IrConfigParamObj.get_param("mail.catchall.domain")) + aliases.add(catchall) + return aliases @api.model_create_multi def create(self, vals_list): diff --git a/mail_tracking/tests/test_mail_tracking.py b/mail_tracking/tests/test_mail_tracking.py index ccd3e6e90..c66e51a5f 100644 --- a/mail_tracking/tests/test_mail_tracking.py +++ b/mail_tracking/tests/test_mail_tracking.py @@ -179,7 +179,7 @@ class TestMailTracking(TransactionCase): email[1] for email in recipients[self.recipient.id] } self.assertIn('unnamed@test.com', suggested_mails) - self.assertEqual(len(recipients[self.recipient.id][0]), 3) + self.assertEqual(len(recipients[self.recipient.id]), 3) # Repeated Cc recipients message = self.env['mail.message'].create({ 'subject': 'Message test', @@ -195,12 +195,12 @@ class TestMailTracking(TransactionCase): }) message._notify(message, {}, force_send=True) recipients = self.recipient.message_get_suggested_recipients() - self.assertEqual(len(recipients[self.recipient.id][0]), 3) + self.assertEqual(len(recipients[self.recipient.id]), 3) self._check_partner_trackings_cc(message) def _check_partner_trackings_to(self, message): message_dict = message.message_format()[0] - self.assertEqual(len(message_dict['partner_trackings']), 3) + self.assertEqual(len(message_dict['partner_trackings']), 4) # mail cc foundPartner = False foundNoPartner = False @@ -241,16 +241,18 @@ class TestMailTracking(TransactionCase): 'res_id': self.recipient.id, 'partner_ids': [(4, self.recipient.id)], 'email_to': 'Dominique Pinon ' - ', sender@example.com, recipient@example.com', + ', sender@example.com, recipient@example.com' + ', TheCatchall@test.com', 'body': '

This is another test message

', }) message._notify(message, {}, force_send=True) recipients = self.recipient.message_get_suggested_recipients() - self.assertEqual(len(recipients[self.recipient.id][0]), 3) + self.assertEqual(len(recipients[self.recipient.id]), 4) self._check_partner_trackings_to(message) # Catchall + Alias - self.env['ir.config_parameter'].set_param( - 'mail.catchall.domain', 'test.com') + IrConfigParamObj = self.env["ir.config_parameter"].sudo() + IrConfigParamObj.set_param("mail.catchall.alias", "TheCatchall") + IrConfigParamObj.set_param('mail.catchall.domain', 'test.com') self.env['mail.alias'].create({ 'alias_model_id': self.env['ir.model']._get('res.partner').id, 'alias_name': 'support+unnamed',