summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--odoo/addons/test_testing_utilities/menu.xml13
-rw-r--r--odoo/addons/test_testing_utilities/tests/test_form_impl.py13
-rw-r--r--odoo/tests/common.py6
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