server-env/test_server_environment/tests/test_server_env_mixin_inher...

162 lines
6.9 KiB
Python

# Copyright 2018 Camptocamp (https://www.camptocamp.com).
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo.addons.server_environment.tests.common import ServerEnvironmentCase
class TestServerEnvMixinSameFieldName(ServerEnvironmentCase):
def setUp(self):
super().setUp()
self.public = (
# global for all server.env.test records
"[server_env_test]\n"
"host=global_value\n"
# for our server.env.test test record now
"[server_env_test.foo]\n"
"host=foo_value\n"
# for our server.env.test2 test record now
"[server_env_test2.foo]\n"
"host=foo2_value\n"
)
self.foo = self.env['server.env.test'].create({'name': 'foo'})
self.foo2 = self.env['server.env.test2'].create({
'name': 'foo',
})
def test_env_computed_fields_read(self):
"""Read values from the config in env-computed fields"""
with self.load_config(self.public):
self.assertEqual(self.foo.name, 'foo')
self.assertEqual(self.foo2.name, 'foo')
self.assertEqual(self.foo.host, 'foo_value')
self.assertEqual(self.foo2.host, 'foo2_value')
def test_env_computed_fields_not_editable(self):
"""Env-computed fields without key in config can be written"""
# we can create the record even if we didn't provide
# the field host which was required
with self.load_config(self.public):
self.assertEqual(self.foo.host, 'foo_value')
self.assertFalse(self.foo.host_env_is_editable)
self.assertEqual(self.foo2.host, 'foo2_value')
self.assertFalse(self.foo2.host_env_is_editable)
def test_env_computed_fields_editable(self):
"""Env-computed fields without key in config can be written"""
# we can create the record even if we didn't provide
# the field host which was required
with self.load_config():
self.assertFalse(self.foo.host)
self.assertTrue(self.foo.host_env_is_editable)
self.assertFalse(self.foo2.host)
self.assertTrue(self.foo2.host_env_is_editable)
self.foo.host_env_default = 'foo_value'
self.foo.invalidate_cache()
self.assertEqual(self.foo.host, 'foo_value')
self.foo2.host_env_default = 'foo2_value'
self.foo2.invalidate_cache()
self.assertEqual(self.foo2.host, 'foo2_value')
self.foo.host = 'foo_new_value'
self.foo.invalidate_cache()
self.assertEqual(self.foo.host, 'foo_new_value')
self.foo2.host = 'foo2_new_value'
self.foo2.invalidate_cache()
self.assertEqual(self.foo2.host, 'foo2_new_value')
class TestServerEnvMixinInherits(ServerEnvironmentCase):
def setUp(self):
super().setUp()
self.public = (
# global for all server.env.test records
"[server_env_test]\n"
"host=global_value\n"
# for our server.env.test test record now
"[server_env_test.foo]\n"
"host=foo_value\n"
# for our server.env.test.inherits1 test record now
"[server_env_test_inherits1.foo]\n"
"host=foo_inherits_value\n"
# for our server.env.test.inherits2 test record now
"[server_env_test_inherits2.foo]\n"
"host=foo_inherits_value\n"
)
self.foo = self.env['server.env.test'].create({'name': 'foo'})
self.foo_inh1 = self.env['server.env.test.inherits1'].create({
'name': 'foo'
})
self.foo_inh2 = self.env['server.env.test.inherits2'].create({
'name': 'foo'
})
def test_env_computed_fields_read(self):
"""Read values from the config in env-computed fields"""
with self.load_config(self.public):
self.assertEqual(self.foo.name, 'foo')
self.assertEqual(self.foo_inh1.name, 'foo')
self.assertEqual(self.foo_inh2.name, 'foo')
self.assertEqual(self.foo.host, 'foo_value')
# inh1 does not redefine the host field so has the
# same value than the parent record (delegate)
self.assertEqual(self.foo_inh1.host, 'foo_value')
# inh2 redefines self.the host field so has its own value
self.assertEqual(self.foo_inh2.host, 'foo_inherits_value')
def test_env_computed_fields_not_editable(self):
"""Env-computed fields without key in config can be written"""
with self.load_config(self.public):
self.assertEqual(self.foo.host, 'foo_value')
self.assertFalse(self.foo.host_env_is_editable)
self.assertEqual(self.foo_inh1.host, 'foo_value')
self.assertFalse(self.foo_inh1.host_env_is_editable)
self.assertEqual(self.foo_inh2.host, 'foo_inherits_value')
self.assertFalse(self.foo_inh2.host_env_is_editable)
def test_env_computed_fields_editable(self):
"""Env-computed fields without key in config can be written"""
with self.load_config():
self.assertFalse(self.foo.host)
self.assertTrue(self.foo.host_env_is_editable)
self.assertFalse(self.foo_inh1.host)
self.assertTrue(self.foo_inh1.host_env_is_editable)
self.assertFalse(self.foo_inh2.host)
self.assertTrue(self.foo_inh2.host_env_is_editable)
self.foo.host_env_default = 'foo_value'
self.foo.invalidate_cache()
self.assertEqual(self.foo.host, 'foo_value')
self.foo.host = 'foo_new_value'
self.foo.invalidate_cache()
self.assertEqual(self.foo.host, 'foo_new_value')
self.foo_inh1.host_env_default = 'foo2_value'
self.foo_inh1.invalidate_cache()
self.assertEqual(self.foo_inh1.host, 'foo2_value')
self.assertEqual(self.foo_inh1.base_id.host, 'foo2_value')
self.foo_inh1.host = 'foo2_new_value'
self.foo_inh1.invalidate_cache()
self.assertEqual(self.foo_inh1.host, 'foo2_new_value')
self.assertEqual(self.foo_inh1.base_id.host, 'foo2_new_value')
self.foo_inh2.host_env_default = 'foo_inherits_value'
self.foo_inh2.base_id.host_env_default = 'bar_value'
self.foo_inh2.invalidate_cache()
self.foo_inh2.base_id.invalidate_cache()
self.assertEqual(self.foo_inh2.host, 'foo_inherits_value')
self.assertEqual(self.foo_inh2.base_id.host, 'bar_value')
self.foo_inh2.host = 'foo_inherits_new_value'
self.foo_inh2.base_id.host = 'bar_new_value'
self.foo_inh2.invalidate_cache()
self.foo_inh2.base_id.invalidate_cache()
self.assertEqual(self.foo_inh2.host, 'foo_inherits_new_value')
self.assertEqual(self.foo_inh2.base_id.host, 'bar_new_value')