Skip to content

Commit 4d83890

Browse files
committed
[18.0-mail] [IMP] mail_environment: Keep existing settings at install of module
1 parent 4a3b946 commit 4d83890

File tree

5 files changed

+133
-0
lines changed

5 files changed

+133
-0
lines changed

mail_environment/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
from . import models
2+
from .hooks import post_init_hook, pre_init_hook

mail_environment/__manifest__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,6 @@
1010
"license": "AGPL-3",
1111
"website": "https://github.com/OCA/server-env",
1212
"depends": ["mail", "server_environment"],
13+
"pre_init_hook": "pre_init_hook",
14+
"post_init_hook": "post_init_hook",
1315
}

mail_environment/hooks.py

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
from odoo.tools import config
2+
3+
4+
def pre_init_hook(env):
5+
if config["test_enable"]:
6+
env["ir.mail_server"].create(
7+
{
8+
"name": "Test Outgoing Mail Server",
9+
"smtp_host": "localhost",
10+
"smtp_port": 25,
11+
"smtp_user": "test",
12+
"smtp_pass": "test123",
13+
"active": False,
14+
}
15+
)
16+
env.cr.execute(
17+
"SELECT * FROM ir_mail_server where name = 'Test Outgoing Mail Server'"
18+
)
19+
mail_server = env.cr.dictfetchone()
20+
assert mail_server
21+
assert mail_server["smtp_host"] == "localhost"
22+
assert mail_server["smtp_port"] == 25
23+
assert mail_server["smtp_user"] == "test"
24+
assert mail_server["smtp_pass"] == "test123"
25+
env["fetchmail.server"].create(
26+
{
27+
"name": "Test Incoming Mail Server",
28+
"server": "localhost",
29+
"port": 143,
30+
"user": "test",
31+
"password": "test123",
32+
"active": False,
33+
}
34+
)
35+
env.cr.execute(
36+
"SELECT * FROM fetchmail_server where name = 'Test Incoming Mail Server'"
37+
)
38+
mail_server = env.cr.dictfetchone()
39+
assert mail_server
40+
assert mail_server["server"] == "localhost"
41+
assert mail_server["port"] == 143
42+
assert mail_server["user"] == "test"
43+
assert mail_server["password"] == "test123"
44+
45+
46+
def post_init_hook(env):
47+
# Migrate Outgoing Mail Server data
48+
env.cr.execute("SELECT * FROM ir_mail_server")
49+
for row in env.cr.dictfetchall():
50+
mail_server = (
51+
env["ir.mail_server"]
52+
.with_context(active_test=False)
53+
.search([("name", "=", row["name"])])
54+
)
55+
if mail_server:
56+
mail_server_values = {}
57+
for field_name, _options in env[
58+
"ir.mail_server"
59+
]._server_env_fields.items():
60+
if field_name in row:
61+
mail_server_values[field_name] = row[field_name]
62+
mail_server.write(mail_server_values)
63+
64+
# Migrate Incoming Mail Server data
65+
env.cr.execute("SELECT * FROM fetchmail_server")
66+
for row in env.cr.dictfetchall():
67+
mail_server = (
68+
env["fetchmail.server"]
69+
.with_context(active_test=False)
70+
.search([("name", "=", row["name"])])
71+
)
72+
if mail_server:
73+
mail_server_values = {}
74+
for field_name, _options in env[
75+
"fetchmail.server"
76+
]._server_env_fields.items():
77+
if field_name in row:
78+
mail_server_values[field_name] = row[field_name]
79+
mail_server.write(mail_server_values)

mail_environment/tests/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1+
from . import test_existing_mail_server_config
12
from . import test_mail_environment
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import json
2+
3+
from odoo.tests import tagged
4+
5+
from odoo.addons.server_environment.tests.common import ServerEnvironmentCase
6+
7+
8+
@tagged("post_install", "-at_install")
9+
class TestMailEnvironment(ServerEnvironmentCase):
10+
def test_outgoing_mail_server(self):
11+
mail_server = (
12+
self.env["ir.mail_server"]
13+
.with_context(active_test=False)
14+
.search([("name", "=", "Test Outgoing Mail Server")])
15+
)
16+
self.assertTrue(mail_server)
17+
self.assertEqual(mail_server.smtp_host, "localhost")
18+
self.assertEqual(mail_server.smtp_port, 25)
19+
self.assertEqual(mail_server.smtp_user, "test")
20+
self.assertEqual(mail_server.smtp_pass, "test123")
21+
self.env.cr.execute(
22+
"SELECT * FROM ir_mail_server where name = 'Test Outgoing Mail Server'"
23+
)
24+
mail_server = self.env.cr.dictfetchone()
25+
server_env_defaults = json.loads(mail_server["server_env_defaults"])
26+
self.assertEqual(server_env_defaults["x_smtp_host_env_default"], "localhost")
27+
self.assertEqual(server_env_defaults["x_smtp_port_env_default"], 25)
28+
self.assertEqual(server_env_defaults["x_smtp_user_env_default"], "test")
29+
self.assertEqual(server_env_defaults["x_smtp_pass_env_default"], "test123")
30+
31+
def test_incoming_mail_server(self):
32+
mail_server = (
33+
self.env["fetchmail.server"]
34+
.with_context(active_test=False)
35+
.search([("name", "=", "Test Incoming Mail Server")])
36+
)
37+
self.assertTrue(mail_server)
38+
self.assertEqual(mail_server.server, "localhost")
39+
self.assertEqual(mail_server.port, 143)
40+
self.assertEqual(mail_server.user, "test")
41+
self.assertEqual(mail_server.password, "test123")
42+
self.env.cr.execute(
43+
"SELECT * FROM fetchmail_server where name = 'Test Incoming Mail Server'"
44+
)
45+
mail_server = self.env.cr.dictfetchone()
46+
server_env_defaults = json.loads(mail_server["server_env_defaults"])
47+
self.assertEqual(server_env_defaults["x_server_env_default"], "localhost")
48+
self.assertEqual(server_env_defaults["x_port_env_default"], 143)
49+
self.assertEqual(server_env_defaults["x_user_env_default"], "test")
50+
self.assertEqual(server_env_defaults["x_password_env_default"], "test123")

0 commit comments

Comments
 (0)