def test_obj(s): data = {'a': 'b', 'c': 33} v = shm.obj( shm.prim(~vld.is_int).apply_to('a'), shm.prim(vld.is_int).apply_to('c'), shm.prim(~vld.required).apply_to('e'), ) result = v.validate(data) assert data == result
def test_obj_required_undef_default(s, logger): data = {'c': 33} set_def = lambda *a, **kw: 'b' req = vld.required(default=set_def) v = shm.obj( shm.prim(req, ~vld.is_int).apply_to('a'), shm.prim(vld.is_int).apply_to('c'), ) result = v.validate(data) assert {'a': 'b', 'c': 33} == result
def test_nested(s): data = {'a': 'b', 'c': 33, 'u': {'name': 'michael', 'age': 44}} user_schm = shm.obj( shm.prim(~vld.is_int).apply_to('name'), shm.prim(vld.is_int).apply_to('age')) data_schm = shm.obj( shm.prim(~vld.is_int).apply_to('a'), shm.prim(vld.is_int).apply_to('c'), user_schm.apply_to('u'), ) rv = data_schm.validate(data) assert rv == data
def test_object_context(context, diagnostic_proc, logger): proclist = [lambda x=x, *a, **kw: 'abc' for x in range(5)] def run(data, state): logger.info(data) logger.info(state) proc = diagnostic_proc(run) c = obj( prim().apply_to('a', 'c'), #prim().apply_to('b', 'a'), #prim().apply_to('c', 'd'), proc, #p[3]().apply_to('d'), #p[4]().apply_to('e'), ) # qualifier stack qs = c.runners[2]['qualifiers'] assert qs._qualifiers['keys'] == set(['a', 'c']) c.validate({ 'a': 'bec', 'b': 'bec', 'c': 'bec', 'd': 'bec', 'e': 'bec', 'f': 'bec', 'g': 'bec', })
def test_rejects_int(s): s = shm.prim(~vld.is_int) for v in [33, 29, 0]: with pytest.raises(err.ValidationErrorStack) as e: v == s.validate(v) assert 'wrong data type. not expected: "int"' in str( e.value[0]).lower()
def test_validate_primitive(s): s = shm.prim() s.validate(None)
def test_required_default(s, logger): from vino.utils import _undef set_def = lambda *a, **kw: 'b' req = vld.required(default=set_def) v = shm.prim(req, ~vld.is_int) logger.info(v.validate())
def test_accepts_non_int(s): s = shm.prim(~vld.is_int) for v in [33.2, 29.1, 0.3, None, False, 'abc']: assert v == s.validate(v)
def test_accepts_int(s): s = shm.prim(vld.is_int) for v in [33, 29, 0]: assert v == s.validate(v)
def test_adds_object_type_processor_after_required(s): o = shm.obj(shm.prim().apply_to('field_1')) assert o.runners[1]['runner']._raw_processor is vld.is_object_type
def test_should_not_allow_prim(s): o = shm.obj(shm.prim().apply_to('field_1')) with pytest.raises(err.ValidationErrorStack) as e: o.validate('some string') assert 'Wrong data type' in str(e.value[0])