Add tests for the server env mixin
This commit is contained in:
parent
d3fe970be8
commit
ea30313c43
|
|
@ -136,7 +136,7 @@ class ServerEnvMixin(models.AbstractModel):
|
||||||
},
|
},
|
||||||
"sftp_port": {
|
"sftp_port": {
|
||||||
"getter": "getint",
|
"getter": "getint",
|
||||||
},,
|
},
|
||||||
"sftp_login": {},
|
"sftp_login": {},
|
||||||
"sftp_password": {},
|
"sftp_password": {},
|
||||||
}
|
}
|
||||||
|
|
@ -319,6 +319,7 @@ class ServerEnvMixin(models.AbstractModel):
|
||||||
def _server_env_transform_field_to_read_from_env(self, field):
|
def _server_env_transform_field_to_read_from_env(self, field):
|
||||||
"""Transform the original field in a computed field"""
|
"""Transform the original field in a computed field"""
|
||||||
field.compute = '_compute_server_env'
|
field.compute = '_compute_server_env'
|
||||||
|
|
||||||
inverse_method_name = '_inverse_server_env_%s' % field.name
|
inverse_method_name = '_inverse_server_env_%s' % field.name
|
||||||
inverse_method = partialmethod(
|
inverse_method = partialmethod(
|
||||||
ServerEnvMixin._inverse_server_env, field.name
|
ServerEnvMixin._inverse_server_env, field.name
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,46 @@
|
||||||
|
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
|
||||||
|
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
|
||||||
|
:alt: License: AGPL-3
|
||||||
|
|
||||||
|
=======================
|
||||||
|
Test Server Environment
|
||||||
|
=======================
|
||||||
|
|
||||||
|
This addon is not meant to be used. It extends the Odoo Models
|
||||||
|
in order to run automated tests on the Server Environment module.
|
||||||
|
|
||||||
|
Same basic tests are integrated within the ``server_environment`` addon.
|
||||||
|
|
||||||
|
Usage
|
||||||
|
=====
|
||||||
|
|
||||||
|
This module only contains Python tests.
|
||||||
|
|
||||||
|
Credits
|
||||||
|
=======
|
||||||
|
|
||||||
|
Images
|
||||||
|
------
|
||||||
|
|
||||||
|
* Odoo Community Association: `Icon <https://github.com/OCA/maintainer-tools/blob/master/template/module/static/description/icon.svg>`_.
|
||||||
|
|
||||||
|
Contributors
|
||||||
|
------------
|
||||||
|
|
||||||
|
* Guewen Baconnier <guewen.baconnier@camptocamp.com>
|
||||||
|
|
||||||
|
Maintainer
|
||||||
|
----------
|
||||||
|
|
||||||
|
.. image:: https://odoo-community.org/logo.png
|
||||||
|
:alt: Odoo Community Association
|
||||||
|
:target: https://odoo-community.org
|
||||||
|
|
||||||
|
This module is maintained by the OCA.
|
||||||
|
|
||||||
|
OCA, or the Odoo Community Association, is a nonprofit organization whose
|
||||||
|
mission is to support the collaborative development of Odoo features and
|
||||||
|
promote its widespread use.
|
||||||
|
|
||||||
|
To contribute to this module, please visit https://odoo-community.org.
|
||||||
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
from . import models
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
# Copyright 2018 Camptocamp (https://www.camptocamp.com).
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "Automated tests for server environment - technical",
|
||||||
|
"summary": "Used to run automated tests, do not install",
|
||||||
|
"version": "11.0.1.0.0",
|
||||||
|
"depends": [
|
||||||
|
"server_environment",
|
||||||
|
],
|
||||||
|
"author": "Camptocamp,Odoo Community Association (OCA)",
|
||||||
|
"website": "http://odoo-community.org/",
|
||||||
|
"license": "GPL-3 or any later version",
|
||||||
|
"category": "Tools",
|
||||||
|
"data": [
|
||||||
|
'security/ir.model.access.csv',
|
||||||
|
],
|
||||||
|
'installable': True,
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
from . import server_env_test
|
||||||
|
|
@ -0,0 +1,45 @@
|
||||||
|
# Copyright 2018 Camptocamp (https://www.camptocamp.com).
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
|
""" Models used for testing server_environment
|
||||||
|
|
||||||
|
Create models that will be used in tests.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
from odoo import fields, models
|
||||||
|
|
||||||
|
|
||||||
|
class ServerEnvTest(models.Model):
|
||||||
|
_name = 'server.env.test'
|
||||||
|
_description = 'Server Environment Test Model'
|
||||||
|
|
||||||
|
name = fields.Char(required=True)
|
||||||
|
# if the original field is required, it must not
|
||||||
|
# be required anymore as we set it with config
|
||||||
|
host = fields.Char(required=True)
|
||||||
|
port = fields.Integer()
|
||||||
|
user = fields.Char()
|
||||||
|
password = fields.Char()
|
||||||
|
ssl = fields.Boolean()
|
||||||
|
|
||||||
|
|
||||||
|
# Intentionally re-declares a class to stress the inclusion of the mixin
|
||||||
|
class ServerEnvTestWithMixin(models.Model):
|
||||||
|
_name = 'server.env.test'
|
||||||
|
_inherit = ['server.env.test', 'server.env.mixin']
|
||||||
|
|
||||||
|
@property
|
||||||
|
def _server_env_fields(self):
|
||||||
|
base_fields = super()._server_env_fields
|
||||||
|
sftp_fields = {
|
||||||
|
"host": {},
|
||||||
|
"port": {
|
||||||
|
"getter": "getint",
|
||||||
|
},
|
||||||
|
"user": {},
|
||||||
|
"password": {},
|
||||||
|
"ssl": {},
|
||||||
|
}
|
||||||
|
sftp_fields.update(base_fields)
|
||||||
|
return sftp_fields
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||||
|
access_server_env_test,access_server_env_test,model_server_env_test,,1,0,0,0
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
from . import test_server_env_mixin
|
||||||
|
|
@ -0,0 +1,133 @@
|
||||||
|
# Copyright 2018 Camptocamp (https://www.camptocamp.com).
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
|
from contextlib import contextmanager
|
||||||
|
|
||||||
|
from odoo.addons.server_environment import server_env
|
||||||
|
from odoo.addons.server_environment.tests.common import ServerEnvironmentCase
|
||||||
|
|
||||||
|
import odoo.addons.server_environment.models.server_env_mixin as \
|
||||||
|
server_env_mixin
|
||||||
|
|
||||||
|
|
||||||
|
class TestServerEnvMixin(ServerEnvironmentCase):
|
||||||
|
|
||||||
|
@contextmanager
|
||||||
|
def load_config(self, public=None, secret=None):
|
||||||
|
original_serv_config = server_env_mixin.serv_config
|
||||||
|
try:
|
||||||
|
with self.set_config_dir(None), \
|
||||||
|
self.set_env_variables(public, secret):
|
||||||
|
parser = server_env._load_config()
|
||||||
|
server_env_mixin.serv_config = parser
|
||||||
|
yield
|
||||||
|
|
||||||
|
finally:
|
||||||
|
server_env_mixin.serv_config = original_serv_config
|
||||||
|
|
||||||
|
def test_env_computed_fields_read(self):
|
||||||
|
"""Read values from the config in env-computed fields"""
|
||||||
|
public = (
|
||||||
|
# global for all server.env.test records
|
||||||
|
"[server_env_test]\n"
|
||||||
|
"ssl=1\n"
|
||||||
|
# for our server.env.test test record now
|
||||||
|
"[server_env_test.foo]\n"
|
||||||
|
"host=test.example.com\n"
|
||||||
|
"port=21\n"
|
||||||
|
"user=foo\n"
|
||||||
|
)
|
||||||
|
secret = (
|
||||||
|
"[server_env_test.foo]\n"
|
||||||
|
"password=bar\n"
|
||||||
|
)
|
||||||
|
# we can create the record even if we didn't provide
|
||||||
|
# the field host which was required
|
||||||
|
foo = self.env['server.env.test'].create({
|
||||||
|
'name': 'foo',
|
||||||
|
})
|
||||||
|
with self.load_config(public, secret):
|
||||||
|
self.assertEqual(foo.name, 'foo')
|
||||||
|
self.assertEqual(foo.host, 'test.example.com')
|
||||||
|
self.assertEqual(foo.port, 21)
|
||||||
|
self.assertEqual(foo.user, 'foo')
|
||||||
|
self.assertEqual(foo.password, 'bar')
|
||||||
|
self.assertTrue(foo.ssl)
|
||||||
|
|
||||||
|
def test_env_computed_fields_write(self):
|
||||||
|
"""Env-computed fields without key in config can be written"""
|
||||||
|
public = (
|
||||||
|
# for our server.env.test test record now
|
||||||
|
"[server_env_test.foo]\n"
|
||||||
|
"host=test.example.com\n"
|
||||||
|
"port=21\n"
|
||||||
|
)
|
||||||
|
secret = (
|
||||||
|
"[server_env_test.foo]\n"
|
||||||
|
"password=bar\n"
|
||||||
|
)
|
||||||
|
# we can create the record even if we didn't provide
|
||||||
|
# the field host which was required
|
||||||
|
foo = self.env['server.env.test'].create({
|
||||||
|
'name': 'foo',
|
||||||
|
})
|
||||||
|
with self.load_config(public, secret):
|
||||||
|
self.assertEqual(foo.host, 'test.example.com')
|
||||||
|
self.assertFalse(foo.host_env_is_editable)
|
||||||
|
self.assertEqual(foo.port, 21)
|
||||||
|
self.assertFalse(foo.port_env_is_editable)
|
||||||
|
self.assertEqual(foo.password, 'bar')
|
||||||
|
self.assertFalse(foo.password_env_is_editable)
|
||||||
|
|
||||||
|
self.assertFalse(foo.user)
|
||||||
|
self.assertTrue(foo.user_env_is_editable)
|
||||||
|
self.assertFalse(foo.ssl)
|
||||||
|
self.assertTrue(foo.ssl_env_is_editable)
|
||||||
|
|
||||||
|
# field set in config, no effect
|
||||||
|
foo.host = 'new.example.com'
|
||||||
|
self.assertFalse(foo.host_env_default)
|
||||||
|
|
||||||
|
# fields not set in config, written
|
||||||
|
foo.user = 'dummy'
|
||||||
|
self.assertEqual(foo.user_env_default, 'dummy')
|
||||||
|
foo.ssl = True
|
||||||
|
self.assertTrue(foo.ssl_env_default)
|
||||||
|
|
||||||
|
def test_env_computed_default(self):
|
||||||
|
"""Env-computed fields read from default fields"""
|
||||||
|
# we can create the record even if we didn't provide
|
||||||
|
# the field host which was required
|
||||||
|
foo = self.env['server.env.test'].create({
|
||||||
|
'name': 'foo',
|
||||||
|
})
|
||||||
|
# empty files
|
||||||
|
with self.load_config():
|
||||||
|
self.assertFalse(foo.host)
|
||||||
|
self.assertFalse(foo.port)
|
||||||
|
self.assertFalse(foo.password)
|
||||||
|
self.assertFalse(foo.user)
|
||||||
|
self.assertFalse(foo.ssl)
|
||||||
|
|
||||||
|
self.assertTrue(foo.host_env_is_editable)
|
||||||
|
self.assertTrue(foo.port_env_is_editable)
|
||||||
|
self.assertTrue(foo.password_env_is_editable)
|
||||||
|
self.assertTrue(foo.user_env_is_editable)
|
||||||
|
self.assertTrue(foo.ssl_env_is_editable)
|
||||||
|
|
||||||
|
foo.write({
|
||||||
|
'host_env_default': 'test.example.com',
|
||||||
|
'port_env_default': 21,
|
||||||
|
'password_env_default': 'bar',
|
||||||
|
'user_env_default': 'foo',
|
||||||
|
'ssl_env_default': True,
|
||||||
|
})
|
||||||
|
|
||||||
|
# refresh env-computed fields, it should read from
|
||||||
|
# the default fields
|
||||||
|
foo.invalidate_cache()
|
||||||
|
self.assertEqual(foo.host, 'test.example.com')
|
||||||
|
self.assertEqual(foo.port, 21)
|
||||||
|
self.assertEqual(foo.user, 'foo')
|
||||||
|
self.assertEqual(foo.password, 'bar')
|
||||||
|
self.assertTrue(foo.ssl)
|
||||||
Loading…
Reference in New Issue