summaryrefslogtreecommitdiff
path: root/odoo/addons/test_convert
diff options
context:
space:
mode:
authorXavier Morel <xmo@odoo.com>2018-10-01 14:45:50 +0000
committerXavier Morel <xmo@odoo.com>2018-10-11 15:00:22 +0000
commitbf0ed03d0f133633da17fb8917df369799286f81 (patch)
tree099d941828d471fa99dc6581dc0ffc74011dc116 /odoo/addons/test_convert
parent77b5911137664f177e821d78187055da0ee99d5f (diff)
[FIX] core: support for uid/context in XML data files
* add tests for uid/context on record & function & root nodes (odoo, data, openerp) "inherited" by record & function * add rng validation to the test cases to ensure technical capabilities are matched by validation capabilities (which was not the case as we could validate nonsense and import stuff which didn't pass validation or something) * extact uid/context into its own rng pattern - add uid support to record validation - add uid support to root nodes validation - fix uid support on function validation: was typoed to @id, which is not used anywhere in function tags loading & makes no sense as far as I can tell * replace get_uid/get_context by get_env & reimplement the whole mess: build a stack of environments from the root nodes (each root node = one env in the stack, though the exact same env can be present multiple times if none of the root nodes has a @uid or @context) and leaves can build upon this "ready made" environment for their own uses or use it as-is. As a result, all uid/context should now properly transfer from the root nodes to the leaves needing them * fix support for context on functions: was not actually implemented as the context was not propagated into the old-style API call * add uid support to record & context is now inherited from env
Diffstat (limited to 'odoo/addons/test_convert')
-rw-r--r--odoo/addons/test_convert/__init__.py10
-rw-r--r--odoo/addons/test_convert/__manifest__.py3
-rw-r--r--odoo/addons/test_convert/ir.model.access.csv2
-rw-r--r--odoo/addons/test_convert/tests/__init__.py1
-rw-r--r--odoo/addons/test_convert/tests/test_env.py166
5 files changed, 182 insertions, 0 deletions
diff --git a/odoo/addons/test_convert/__init__.py b/odoo/addons/test_convert/__init__.py
index e69de29bb2d..a301ab24b52 100644
--- a/odoo/addons/test_convert/__init__.py
+++ b/odoo/addons/test_convert/__init__.py
@@ -0,0 +1,10 @@
+from odoo import fields, models
+
+
+class Usered(models.Model):
+ _name = 'test_convert.usered'
+ _description = "z test model ignore"
+
+ name = fields.Char()
+ user_id = fields.Many2one('res.users', default=lambda self: self.env.user)
+ tz = fields.Char(default=lambda self: self.env.context.get('tz') or self.env.user.tz)
diff --git a/odoo/addons/test_convert/__manifest__.py b/odoo/addons/test_convert/__manifest__.py
index af6cd1af6e4..1411f093f90 100644
--- a/odoo/addons/test_convert/__manifest__.py
+++ b/odoo/addons/test_convert/__manifest__.py
@@ -5,4 +5,7 @@
'name': 'test_convert',
'description': "Data for xml conversion tests",
'version': '0.0.1',
+ 'data': [
+ 'ir.model.access.csv',
+ ]
}
diff --git a/odoo/addons/test_convert/ir.model.access.csv b/odoo/addons/test_convert/ir.model.access.csv
new file mode 100644
index 00000000000..0282a269c41
--- /dev/null
+++ b/odoo/addons/test_convert/ir.model.access.csv
@@ -0,0 +1,2 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_test_convert_usered,access_test_convert_usered,model_test_convert_usered,base.group_user,1,1,1,1
diff --git a/odoo/addons/test_convert/tests/__init__.py b/odoo/addons/test_convert/tests/__init__.py
index 2b608870b30..14d4ce40ead 100644
--- a/odoo/addons/test_convert/tests/__init__.py
+++ b/odoo/addons/test_convert/tests/__init__.py
@@ -1,2 +1,3 @@
# -*- coding: utf-8 -*-
from . import test_convert
+from . import test_env
diff --git a/odoo/addons/test_convert/tests/test_env.py b/odoo/addons/test_convert/tests/test_env.py
new file mode 100644
index 00000000000..fc5d9a094d3
--- /dev/null
+++ b/odoo/addons/test_convert/tests/test_env.py
@@ -0,0 +1,166 @@
+# -*- coding: utf-8 -*-
+"""
+Tests the ability to update environmental information on various nodes (e.g.
+change user, add context keys, ...)
+"""
+import os.path
+
+from lxml import etree
+from lxml.builder import E
+
+from odoo.tests import common
+from odoo.tools import config
+from odoo.tools.convert import xml_import
+
+odoo = E.odoo
+data = E.data
+record = E.record
+field = E.field
+function = E.function
+
+class TestEnv(common.TransactionCase):
+ def setUp(self):
+ super().setUp()
+ self._importer = xml_import(self.env.cr, 'test_convert', None, 'init')
+
+ def importer(self, doc):
+ etree.RelaxNG(
+ etree.parse(
+ os.path.join(config['root_path'], 'import_xml.rng')
+ )
+ ).assert_(doc)
+ self._importer.parse(doc)
+
+ def test_uid_data_record(self):
+ self.importer(
+ odoo(
+ record(
+ field("a", name="name"),
+ model="test_convert.usered",
+ id="test_convert.testing"
+ ),
+ uid="base.user_demo"
+ )
+ )
+
+ r = self.env.ref('test_convert.testing')
+ self.assertEqual(r.name, 'a')
+ self.assertEqual(r.create_uid, self.env.ref('base.user_demo'))
+ self.assertEqual(r.user_id, self.env.ref('base.user_demo'))
+
+ def test_uid_data_function(self):
+ self.importer(
+ odoo(
+ function(
+ model="test_convert.usered",
+ name="create",
+ eval="[[{'name': 'b'}]]",
+ ),
+ uid="base.user_demo"
+ )
+ )
+
+ r = self.env['test_convert.usered'].search([])
+ self.assertEqual(r.name, 'b')
+ self.assertEqual(r.create_uid, self.env.ref('base.user_demo'))
+ self.assertEqual(r.user_id, self.env.ref('base.user_demo'))
+
+ def test_uid_record(self):
+ self.importer(
+ odoo(
+ record(
+ field('c', name="name"),
+ model="test_convert.usered",
+ id="test_convert.testing",
+ uid="base.user_demo"
+ ),
+ uid="base.user_root"
+ )
+ )
+
+ r = self.env.ref('test_convert.testing')
+ self.assertEqual(r.name, 'c')
+ self.assertEqual(r.create_uid, self.env.ref('base.user_demo'))
+ self.assertEqual(r.user_id, self.env.ref('base.user_demo'))
+
+
+ def test_uid_function(self):
+ self.importer(
+ odoo(
+ function(
+ model="test_convert.usered",
+ name="create",
+ uid="base.user_demo",
+ eval="[[{'name': 'd'}]]"
+ ),
+ uid="base.user_root"
+ )
+ )
+ r = self.env['test_convert.usered'].search([])
+ self.assertEqual(r.name, 'd')
+ self.assertEqual(r.create_uid, self.env.ref('base.user_demo'))
+ self.assertEqual(r.user_id, self.env.ref('base.user_demo'))
+
+ def test_context_data_function(self):
+ self.env.user.tz = 'UTC'
+ self.importer(
+ odoo(
+ function(
+ model="test_convert.usered",
+ name="create",
+ eval="[[{'name': 'e'}]]",
+ ),
+ context="{'tz': 'Asia/Kabul'}",
+ )
+ )
+ r = self.env['test_convert.usered'].search([])
+ self.assertEqual(r.name, 'e')
+ self.assertEqual(r.tz, 'Asia/Kabul')
+
+ def test_context_function(self):
+ self.env.user.tz = 'UTC'
+ self.importer(
+ odoo(
+ function(
+ model="test_convert.usered",
+ name="create",
+ context="{'tz': 'Pacific/Apia'}",
+ eval="[[{'name': 'e'}]]",
+ ),
+ context="{'tz': 'Asia/Kabul'}",
+ )
+ )
+ r = self.env['test_convert.usered'].search([])
+ self.assertEqual(r.name, 'e')
+ self.assertEqual(r.tz, 'Pacific/Apia')
+
+ def test_context_data_record(self):
+ self.env.user.tz = 'UTC'
+ self.importer(
+ odoo(
+ record(
+ field("f", name="name"),
+ model="test_convert.usered",
+ ),
+ context="{'tz': 'America/Knox_IN'}"
+ )
+ )
+ r = self.env['test_convert.usered'].search([])
+ self.assertEqual(r.name, 'f')
+ self.assertEqual(r.tz, 'America/Knox_IN')
+
+ def test_context_record(self):
+ self.env.user.tz = 'UTC'
+ self.importer(
+ odoo(
+ record(
+ field("f", name="name"),
+ model="test_convert.usered",
+ context="{'tz': 'America/Adak'}",
+ ),
+ context="{'tz': 'America/Knox_IN'}"
+ )
+ )
+ r = self.env['test_convert.usered'].search([])
+ self.assertEqual(r.name, 'f')
+ self.assertEqual(r.tz, 'America/Adak')