def test_depends(self): 'Test for missing depends' for mname, model in Pool().iterobject(): if not isregisteredby(model, self.module): continue for fname, field in model._fields.items(): fields = set() fields |= get_eval_fields(field.domain) if hasattr(field, 'digits'): fields |= get_eval_fields(field.digits) if hasattr(field, 'add_remove'): fields |= get_eval_fields(field.add_remove) if hasattr(field, 'size'): fields |= get_eval_fields(field.size) fields.discard(fname) fields.discard('context') fields.discard('_user') depends = set(field.depends) assert fields <= depends, ( 'Missing depends %s in "%s"."%s"' % (list(fields - depends), mname, fname)) assert depends <= set(model._fields), ( 'Unknown depends %s in "%s"."%s"' % (list(depends - set(model._fields)), mname, fname)) if issubclass(model, ModelView): for bname, button in model._buttons.items(): depends = set(button.get('depends', [])) assert depends <= set(model._fields), ( 'Unknown depends %s in button "%s"."%s"' % (list(depends - set(model._fields)), mname, bname))
def test_depends(self): 'Test for missing depends' with Transaction().start(DB_NAME, USER, context=CONTEXT): for mname, model in Pool().iterobject(): # Don't test model not registered by the module if not any(issubclass(model, cls) for cls in Pool().classes['model'].get(self.module, [])): continue for fname, field in model._fields.iteritems(): fields = set() fields |= get_eval_fields(field.domain) if hasattr(field, 'digits'): fields |= get_eval_fields(field.digits) if hasattr(field, 'add_remove'): fields |= get_eval_fields(field.add_remove) fields.discard(fname) fields.discard('context') fields.discard('_user') depends = set(field.depends) assert fields <= depends, ( 'Missing depends %s in "%s"."%s"' % ( list(fields - depends), mname, fname)) assert depends <= set(model._fields), ( 'Unknown depends %s in "%s"."%s"' % ( list(depends - set(model._fields)), mname, fname))
def test_depends(self): 'Test for missing depends' for mname, model in Pool().iterobject(): if not isregisteredby(model, self.module): continue for fname, field in model._fields.iteritems(): fields = set() fields |= get_eval_fields(field.domain) if hasattr(field, 'digits'): fields |= get_eval_fields(field.digits) if hasattr(field, 'add_remove'): fields |= get_eval_fields(field.add_remove) fields.discard(fname) fields.discard('context') fields.discard('_user') depends = set(field.depends) assert fields <= depends, ( 'Missing depends %s in "%s"."%s"' % ( list(fields - depends), mname, fname)) assert depends <= set(model._fields), ( 'Unknown depends %s in "%s"."%s"' % ( list(depends - set(model._fields)), mname, fname))
def test_missing_depends(self): 'Test for missing depends' for mname, model in Pool().iterobject(): if not isregisteredby(model, self.module): continue for fname, field in model._fields.items(): fields = set() fields |= get_eval_fields(field.domain) if hasattr(field, 'digits'): fields |= get_eval_fields(field.digits) if hasattr(field, 'add_remove'): fields |= get_eval_fields(field.add_remove) if hasattr(field, 'size'): fields |= get_eval_fields(field.size) fields.discard(fname) fields.discard('context') fields.discard('_user') # XXX PR https://github.com/coopengo/coog/pull/3458 implies # that parent fields are added to depends. depends = set(d for d in field.depends if not d.startswith('_parent')) self.assertLessEqual(fields, depends, msg='Missing depends %s in "%s"."%s"' % (list(fields - depends), mname, fname)) self.assertLessEqual( depends, set(model._fields), msg='Unknown depends %s in "%s"."%s"' % (list(depends - set(model._fields)), mname, fname)) if issubclass(model, ModelView): for bname, button in model._buttons.items(): depends = set(button.get('depends', [])) self.assertLessEqual( depends, set(model._fields), msg='Unknown depends %s in button "%s"."%s"' % (list(depends - set(model._fields)), mname, bname))
def test_get_eval_fields(self): "Test get_eval_fields" for value, result in [ ('test', set()), (Eval('foo'), {'foo'}), (Eval('_parent_foo'), {'foo'}), (Eval('foo.bar'), {'foo'}), ([Eval('foo'), Eval('bar')], {'foo', 'bar'}), ((Eval('foo'), Eval('bar')), {'foo', 'bar'}), ({ 'foo': Eval('bar') }, {'bar'}), (If(Eval('foo'), Eval('bar'), Eval('baz')), {'foo', 'bar', 'baz'}), ]: with self.subTest(value=value): self.assertEqual(fields.get_eval_fields(value), result)