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')