diff options
| -rw-r--r-- | odoo/addons/test_testing_utilities/menu.xml | 13 | ||||
| -rw-r--r-- | odoo/addons/test_testing_utilities/tests/test_form_impl.py | 13 | ||||
| -rw-r--r-- | odoo/tests/common.py | 6 |
3 files changed, 31 insertions, 1 deletions
diff --git a/odoo/addons/test_testing_utilities/menu.xml b/odoo/addons/test_testing_utilities/menu.xml index 72a4ba79157..0ca37f58658 100644 --- a/odoo/addons/test_testing_utilities/menu.xml +++ b/odoo/addons/test_testing_utilities/menu.xml @@ -91,4 +91,17 @@ </form> </field> </record> + + <record id="non_normalized_attrs" model="ir.ui.view"> + <field name="name">Non Normalised Domains</field> + <field name="model">test_testing_utilities.a</field> + <field name="arch" type="xml"> + <form> + <field name="f1"/> + <field name="f2" attrs="{'readonly': [['f1', '=', 63], ['f3', '=', 5]]}"/> + <field name="f3"/> + <field name="f4"/> + </form> + </field> + </record> </odoo> diff --git a/odoo/addons/test_testing_utilities/tests/test_form_impl.py b/odoo/addons/test_testing_utilities/tests/test_form_impl.py index 19d192365a5..2806a972335 100644 --- a/odoo/addons/test_testing_utilities/tests/test_form_impl.py +++ b/odoo/addons/test_testing_utilities/tests/test_form_impl.py @@ -65,6 +65,19 @@ class TestBasic(TransactionCase): with self.assertRaises(AssertionError): f.f2 = 42 + def test_attrs(self): + """ Checks that attrs/modifiers with non-normalized domains work + """ + f = Form(self.env['test_testing_utilities.a'], view='test_testing_utilities.non_normalized_attrs') + + # not readonly yet, should work + f.f2 = 5 + # make f2 readonly + f.f1 = 63 + f.f3 = 5 + with self.assertRaises(AssertionError): + f.f2 = 6 + class TestM2O(TransactionCase): def test_default_and_onchange(self): """ Checks defaults & onchanges impacting m2o fields diff --git a/odoo/tests/common.py b/odoo/tests/common.py index a0420eb5423..005b5a1cfcc 100644 --- a/odoo/tests/common.py +++ b/odoo/tests/common.py @@ -28,6 +28,7 @@ from decorator import decorator from lxml import etree, html from odoo.models import BaseModel +from odoo.osv.expression import normalize_domain from odoo.tools import pycompat from odoo.tools.safe_eval import safe_eval @@ -758,7 +759,10 @@ class Form(object): contexts = fvg['contexts'] = {} for f in etree.fromstring(fvg['arch']).iter('field'): fname = f.get('name') - modifiers[fname] = json.loads(f.get('modifiers', '{}')) + modifiers[fname] = { + modifier: domain if isinstance(domain, bool) else normalize_domain(domain) + for modifier, domain in json.loads(f.get('modifiers', '{}')).items() + } ctx = f.get('context') if ctx: contexts[fname] = ctx |
