diff options
| author | Raphael Collet <rco@odoo.com> | 2019-02-14 12:59:04 +0000 |
|---|---|---|
| committer | Raphael Collet <rco@odoo.com> | 2019-03-22 16:42:14 +0000 |
| commit | d87443a21337bcc3d785ae23e19f66b11ba8bb9e (patch) | |
| tree | 0a10e803beca0026560ecb32c18b492c7323de22 /odoo/addons/test_convert | |
| parent | 1ced3bfca457ac50845637bcd42a8e53bd7f088d (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/test_convert')
| -rw-r--r-- | odoo/addons/test_convert/__init__.py | 12 | ||||
| -rw-r--r-- | odoo/addons/test_convert/models.py | 20 | ||||
| -rw-r--r-- | odoo/addons/test_convert/tests/test_convert.py | 114 |
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 |
