changeset 072daf920a7c in trytond:default
details: https://hg.tryton.org/trytond?cmd=changeset;node=072daf920a7c
description:
        Verify keys of fields and buttons states

        issue8262
        review279221003
diffstat:

 trytond/model/fields/field.py |   6 ++++--
 trytond/tests/test_tryton.py  |  19 +++++++++++++++++++
 2 files changed, 23 insertions(+), 2 deletions(-)

diffs (46 lines):

diff -r 8dd832481bb8 -r 072daf920a7c trytond/model/fields/field.py
--- a/trytond/model/fields/field.py     Thu Apr 11 18:35:25 2019 +0200
+++ b/trytond/model/fields/field.py     Fri Apr 12 13:08:01 2019 +0200
@@ -46,9 +46,11 @@
 
 def states_validate(value):
     assert isinstance(value, dict), 'states must be a dict'
+    assert set(value).issubset({'required', 'readonly', 'invisible'}), (
+        'extra keys "%(keys)s" in states' % {
+            'keys': set(value) - {'required', 'readonly', 'invisible'},
+            })
     for state in value:
-        if state == 'icon':
-            continue
         assert isinstance(value[state], (bool, PYSON)), \
             'values of states must be PYSON'
         if hasattr(value[state], 'types'):
diff -r 8dd832481bb8 -r 072daf920a7c trytond/tests/test_tryton.py
--- a/trytond/tests/test_tryton.py      Thu Apr 11 18:35:25 2019 +0200
+++ b/trytond/tests/test_tryton.py      Fri Apr 12 13:08:01 2019 +0200
@@ -612,6 +612,25 @@
                     'model': model.__name__,
                     })
 
+    @with_transaction()
+    def test_buttons_states(self):
+        "Test the states of buttons"
+        pool = Pool()
+        keys = {'readonly', 'invisible', 'icon', 'pre_validate', 'depends'}
+        for mname, model in pool.iterobject():
+            if not isregisteredby(model, self.module):
+                continue
+            if not issubclass(model, ModelView):
+                continue
+            for button, states in model._buttons.items():
+                assert set(states).issubset(keys), (
+                    'The button "%(button)s" of Model "%(model)s" has extra '
+                    'keys "%(keys)s".' % {
+                        'button': button,
+                        'model': mname,
+                        'keys': set(states) - keys,
+                        })
+
 
 def db_exist(name=DB_NAME):
     Database = backend.get('Database')

Reply via email to