summaryrefslogtreecommitdiff
path: root/odoo/addons
diff options
context:
space:
mode:
authorRaphael Collet <rco@odoo.com>2019-02-14 12:59:04 +0000
committerRaphael Collet <rco@odoo.com>2019-03-22 16:42:14 +0000
commitd87443a21337bcc3d785ae23e19f66b11ba8bb9e (patch)
tree0a10e803beca0026560ecb32c18b492c7323de22 /odoo/addons
parent1ced3bfca457ac50845637bcd42a8e53bd7f088d (diff)
[FIX] convert: enable kwargs in tag <function>
closes odoo/odoo#31417 Signed-off-by: Raphael Collet (rco) <rco@openerp.com>
Diffstat (limited to 'odoo/addons')
-rw-r--r--odoo/addons/test_convert/__init__.py12
-rw-r--r--odoo/addons/test_convert/models.py20
-rw-r--r--odoo/addons/test_convert/tests/test_convert.py114
3 files changed, 136 insertions, 10 deletions
diff --git a/odoo/addons/test_convert/__init__.py b/odoo/addons/test_convert/__init__.py
index a301ab24b52..dc5e6b693d1 100644
--- a/odoo/addons/test_convert/__init__.py
+++ b/odoo/addons/test_convert/__init__.py
@@ -1,10 +1,4 @@
-from odoo import fields, models
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
-
-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)
+from . import models
diff --git a/odoo/addons/test_convert/models.py b/odoo/addons/test_convert/models.py
new file mode 100644
index 00000000000..e48ac2d1e7f
--- /dev/null
+++ b/odoo/addons/test_convert/models.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import models, fields, api
+
+
+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)
+
+ @api.model
+ def model_method(self, *args, **kwargs):
+ return self, args, kwargs
+
+ def method(self, *args, **kwargs):
+ return self, args, kwargs
diff --git a/odoo/addons/test_convert/tests/test_convert.py b/odoo/addons/test_convert/tests/test_convert.py
index e81526dd43c..709a5eeab10 100644
--- a/odoo/addons/test_convert/tests/test_convert.py
+++ b/odoo/addons/test_convert/tests/test_convert.py
@@ -7,7 +7,7 @@ import unittest
from lxml.builder import E
from odoo.tests import common
-from odoo.tools.convert import _eval_xml
+from odoo.tools.convert import xml_import, _eval_xml
Field = E.field
Value = E.value
@@ -74,6 +74,118 @@ class TestEvalXML(common.TransactionCase):
with self.assertRaises(IOError):
self.eval_xml(Field('test_nofile.txt', type='file'), obj)
+ def test_function(self):
+ obj = xml_import(self.cr, 'test_convert', None, 'init')
+
+ # pass args in eval
+ xml = E.function(
+ model="test_convert.usered",
+ name="model_method",
+ eval="[1, 2]",
+ )
+ rec, args, kwargs = self.eval_xml(xml, obj)
+ self.assertEqual(rec.env.context, self.env.context)
+ self.assertEqual(rec.ids, [])
+ self.assertEqual(args, (1, 2))
+ self.assertEqual(kwargs, {})
+
+ xml = E.function(
+ model="test_convert.usered",
+ name="method",
+ eval="[1, 2]",
+ )
+ rec, args, kwargs = self.eval_xml(xml, obj)
+ self.assertEqual(rec.env.context, self.env.context)
+ self.assertEqual(rec.ids, [1])
+ self.assertEqual(args, (2,))
+ self.assertEqual(kwargs, {})
+
+ # pass args in child elements
+ xml = E.function(
+ E.value(eval="1"), E.value(eval="2"),
+ model="test_convert.usered",
+ name="model_method",
+ )
+ rec, args, kwargs = self.eval_xml(xml, obj)
+ self.assertEqual(rec.env.context, self.env.context)
+ self.assertEqual(rec.ids, [])
+ self.assertEqual(args, (1, 2))
+ self.assertEqual(kwargs, {})
+
+ xml = E.function(
+ E.value(eval="1"), E.value(eval="2"),
+ model="test_convert.usered",
+ name="method",
+ )
+ rec, args, kwargs = self.eval_xml(xml, obj)
+ self.assertEqual(rec.env.context, self.env.context)
+ self.assertEqual(rec.ids, [1])
+ self.assertEqual(args, (2,))
+ self.assertEqual(kwargs, {})
+
+ def test_function_kwargs(self):
+ obj = xml_import(self.cr, 'test_convert', None, 'init')
+
+ # pass args and kwargs in child elements
+ xml = E.function(
+ E.value(eval="1"), E.value(name="foo", eval="2"),
+ model="test_convert.usered",
+ name="model_method",
+ )
+ rec, args, kwargs = self.eval_xml(xml, obj)
+ self.assertEqual(rec.env.context, self.env.context)
+ self.assertEqual(rec.ids, [])
+ self.assertEqual(args, (1,))
+ self.assertEqual(kwargs, {'foo': 2})
+
+ xml = E.function(
+ E.value(eval="1"), E.value(name="foo", eval="2"),
+ model="test_convert.usered",
+ name="method",
+ )
+ rec, args, kwargs = self.eval_xml(xml, obj)
+ self.assertEqual(rec.env.context, self.env.context)
+ self.assertEqual(rec.ids, [1])
+ self.assertEqual(args, ())
+ self.assertEqual(kwargs, {'foo': 2})
+
+ # pass args and context in kwargs
+ xml = E.function(
+ E.value(eval="1"), E.value(name="context", eval="{'foo': 2}"),
+ model="test_convert.usered",
+ name="model_method",
+ )
+ rec, args, kwargs = self.eval_xml(xml, obj)
+ self.assertEqual(rec.env.context, {'foo': 2})
+ self.assertEqual(rec.ids, [])
+ self.assertEqual(args, (1,))
+ self.assertEqual(kwargs, {})
+
+ xml = E.function(
+ E.value(eval="1"), E.value(name="context", eval="{'foo': 2}"),
+ model="test_convert.usered",
+ name="method",
+ )
+ rec, args, kwargs = self.eval_xml(xml, obj)
+ self.assertEqual(rec.env.context, {'foo': 2})
+ self.assertEqual(rec.ids, [1])
+ self.assertEqual(args, ())
+ self.assertEqual(kwargs, {})
+
+ def test_function_function(self):
+ obj = xml_import(self.cr, 'test_convert', None, 'init')
+
+ xml = E.function(
+ E.function(model="test_convert.usered", name="search", eval="[[]]"),
+ model="test_convert.usered",
+ name="method",
+ )
+ rec, args, kwargs = self.eval_xml(xml, obj)
+ self.assertEqual(rec.env.context, {})
+ self.assertEqual(rec.ids, [])
+ self.assertEqual(args, ())
+ self.assertEqual(kwargs, {})
+
@unittest.skip("not tested")
def test_xml(self):
pass