def test_closed(self): d = Dict(required_fields={'foo': Int()}, optional_fields={'bar': Int()}, closed=True) d.check("name", {'foo': 1}) d.check("name", {'foo': 1, 'bar': 2}) self.assertRaises(RpcCheckError, d.check, "name", { 'foo': 1, 'bar': 2, 'extra': 3 })
def test_fallback_to_item_type(self): d = Dict(required_fields={'foo': Int()}, optional_fields={'bar': Int()}, item_type=Unicode()) d.check("name", {'foo': 1}) d.check("name", {'foo': 1, 'bar': 2}) d.check("name", {'foo': 1, 'bar': 2, 'extra': u'foo'}) self.assertRaises(RpcCheckError, d.check, "name", { 'foo': 1, 'bar': 2, 'extra': 3 })
def test_check_params(self): s = Signature(lambda slf, x, y: x, x=Int(), y=Unicode()) s.check_params([None, 1, u"a"], {}) self.assertRaises(RpcCheckError, s.check_params, [None, u"a", u"a"], {}) self.assertRaises(RpcCheckError, s.check_params, [None, 1, 2], {}) self.assertRaises(RpcCheckError, s.check_params, [None, 1, u"a", 3], {})
class DummyApi(object): def __init__(self, result=None): self.result = result @signature(a=Unicode(), b=Int()) def test(self, a, b): """Basic doc.""" return self.result
def test_optional_fields(self): d = Dict(optional_fields={'foo': Int(null=True), 'bar': Unicode()}) d.check("name", {'foo': None, 'bar': u'b'}) d.check("name", {'foo': 1, 'bar': u'b'}) d.check("name", {'foo': 1, 'bar': u'b', 'extra': 2}) d.check("name", {"foo": 1}) d.check("name", {"bar": u"b"}) self.assertRaises(RpcCheckError, d.check, "name", {"foo": u'b'})
def test_check(self): i = Int() i.check("name", 1) self.assertRaises(RpcCheckError, i.check, "name", "foo")
def test_jsonrpc_signature(self): s = Signature(lambda slf, x: unicode(x), x=Int("foo"), returns=Unicode("bar")) self.assertEqual(s.jsonrpc_signature(), [['string', 'int']])
def test_param_doc(self): s = Signature(lambda slf, x: x, x=Int("foo"), returns=Int("bar")) self.assertEqual( s.param_doc(), [':param Int x:', ' foo', ':rtype Int:', ' bar'])
def test_check_result(self): s = Signature(lambda slf, x: x, x=Int("foo"), returns=Int("bar")) self.assertEqual(s.check_result(5), 5) self.assertRaises(RpcCheckError, s.check_result, 'a')
def test_check_params_with_defaults(self): s = Signature(lambda slf, x, y=u"default": x, x=Int(), y=Unicode()) s.check_params([None, 1, u"a"], {}) s.check_params([None, 1], {})
def test_item_type(self): d = Dict(item_type=Int()) d.check("name", {}) d.check("name", {"a": 1, "b": 2}) self.assertRaises(RpcCheckError, d.check, "name", {"a": 1, "b": "c"})
def test_item_type(self): l = List(item_type=Int()) l.check("name", []) l.check("name", [1, 2, 3]) self.assertRaises(RpcCheckError, l.check, "name", [1, 0.1])
x=Int("foo"), returns=Unicode("bar")) self.assertEqual(s.jsonrpc_signature(), [['string', 'int']]) class DummyApi(object): def __init__(self, result=None): self.result = result @signature(a=Unicode(), b=Int()) def test(self, a, b): """Basic doc.""" return self.result @signature(a=Unicode(), b=Int(), returns=Unicode(), requires_self=False) def dummy_function(a, b): return unicode(a * b) class TestSignatureDecorate(VumiTestCase): def test_decorate_unbound_method(self): api = DummyApi() self.assertEqual(api.test.signature, [['null', 'string', 'int']]) self.assertTrue(isinstance(api.test.signature_object, Signature)) self.assertEqual(api.test.__name__, 'test') self.assertEqual(api.test.__module__, 'vumi.tests.test_rpc') self.assertEqual( api.test.__doc__, 'Basic doc.\n\n:param Unicode a:\n:param Int b:\n:rtype Null:')