|
1 | | -# Copyright 2025 Therp BV <https://therp.nl>. |
| 1 | +# Copyright 2025-2026 Therp BV <https://therp.nl>. |
2 | 2 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
3 | | -from email.utils import parseaddr |
4 | 3 |
|
5 | 4 | from odoo.exceptions import ValidationError |
6 | 5 |
|
7 | 6 | from .common import CompanyAwareSenderCase |
8 | 7 |
|
9 | 8 |
|
10 | 9 | class TestMailServer(CompanyAwareSenderCase): |
11 | | - def _assert_email(self, email_from, expected_email, expected_name=None): |
12 | | - """Assert email_from matches expected parts, tolerant to quoting differences.""" |
13 | | - name, email = parseaddr(email_from or "") |
14 | | - self.assertEqual(email, expected_email) |
15 | | - if expected_name is not None: |
16 | | - self.assertEqual(name, expected_name) |
17 | | - |
18 | 10 | def test_test_email_adresses(self): |
19 | 11 | # Whitelist domain, and enable from address. |
20 | 12 | self.mail_server.write( |
@@ -54,3 +46,32 @@ def test_disable_encapsulation(self): |
54 | 46 | self.company_imperium |
55 | 47 | )._get_default_from_address() |
56 | 48 | self.assertEqual(email_from, None) |
| 49 | + |
| 50 | + def test_email_server_selection(self): |
| 51 | + # When one server has domain whitelisted, that server should send message. |
| 52 | + self.IrMailServer.create( |
| 53 | + { |
| 54 | + "name": "default mail server", |
| 55 | + "smtp_host": "localhost", |
| 56 | + "domain_whitelist": "therp.nl", |
| 57 | + "sequence": 5, |
| 58 | + } |
| 59 | + ) |
| 60 | + self.mail_server.write( |
| 61 | + { |
| 62 | + "smtp_from": "info@imperiumromanum.org", |
| 63 | + "domain_whitelist": "imperiumromanum.org", |
| 64 | + } |
| 65 | + ) |
| 66 | + # Partner charles in imperium should use company aware from. |
| 67 | + email_from, email_to = ( |
| 68 | + self.mail_server.with_user(self.user_charles) |
| 69 | + .with_company(self.company_imperium) |
| 70 | + ._get_test_email_addresses() |
| 71 | + ) |
| 72 | + self._assert_email(email_from, "charlemagne@imperiumromanum.org") |
| 73 | + # Call the (misspelled) _get_mail_sever method, defined in the |
| 74 | + # mail_outbound_static module, to select the right mail server. |
| 75 | + mail_server_id = self.IrMailServer._get_mail_sever("imperiumromanum.org") |
| 76 | + # The server with the domain should be used, despite higher sequence. |
| 77 | + self.assertEqual(mail_server_id, self.mail_server.id) |
0 commit comments