From b99d16670c05da22164d9543ea0ee7e3811e4d9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Mon, 23 Oct 2023 14:07:58 +0200 Subject: [PATCH] [FIX] base: make ir_mail_server ordering deterministic This may have an impact when trying to find an outgoing mail server based on from and filter, as first match wins when checking matching filter on a bunch of mail servers. Prepares Task-36879 (Mail: Support Multi Domains Aliases) Part-of: odoo/odoo#76734 --- addons/mail/models/mail_mail.py | 2 +- odoo/addons/base/models/ir_mail_server.py | 2 +- odoo/addons/base/tests/common.py | 4 ++++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/addons/mail/models/mail_mail.py b/addons/mail/models/mail_mail.py index 0c31e94428e..7673cfcae9b 100644 --- a/addons/mail/models/mail_mail.py +++ b/addons/mail/models/mail_mail.py @@ -494,7 +494,7 @@ class MailMail(models.Model): # Then find the mail server for each email_from and group the # per mail_server_id and smtp_from - mail_servers = self.env['ir.mail_server'].sudo().search([], order='sequence') + mail_servers = self.env['ir.mail_server'].sudo().search([], order='sequence, id') group_per_smtp_from = defaultdict(list) for (mail_server_id, email_from), mail_ids in group_per_email_from.items(): if not mail_server_id: diff --git a/odoo/addons/base/models/ir_mail_server.py b/odoo/addons/base/models/ir_mail_server.py index 72389b038f4..03529e9e2f9 100644 --- a/odoo/addons/base/models/ir_mail_server.py +++ b/odoo/addons/base/models/ir_mail_server.py @@ -87,7 +87,7 @@ class IrMailServer(models.Model): """Represents an SMTP server, able to send outgoing emails, with SSL and TLS capabilities.""" _name = "ir.mail_server" _description = 'Mail Server' - _order = 'sequence' + _order = 'sequence, id' NO_VALID_RECIPIENT = ("At least one valid recipient address should be " "specified for outgoing emails (To/Cc/Bcc)") diff --git a/odoo/addons/base/tests/common.py b/odoo/addons/base/tests/common.py index 83e972544ee..937479ad452 100644 --- a/odoo/addons/base/tests/common.py +++ b/odoo/addons/base/tests/common.py @@ -430,18 +430,22 @@ class MockSmtplibCase: { 'name': 'Domain based server', 'from_filter': 'test.mycompany.com', + 'sequence': 0, ** ir_mail_server_values, }, { 'name': 'User specific server', 'from_filter': 'specific_user@test.mycompany.com', + 'sequence': 1, ** ir_mail_server_values, }, { 'name': 'Server Notifications', 'from_filter': 'notifications.test@test.mycompany.com', + 'sequence': 2, ** ir_mail_server_values, }, { 'name': 'Server No From Filter', 'from_filter': False, + 'sequence': 3, ** ir_mail_server_values, }, ])