This makes debugging the problems easier. Change-Id: I285d8176b8cfb0cdf1e9cecd8ae5a0a7f0f109e7
160 lines
4.8 KiB
Python
160 lines
4.8 KiB
Python
# encoding=utf8
|
|
|
|
import datetime
|
|
import unittest
|
|
|
|
from wsme.api import FunctionArgument, FunctionDefinition
|
|
from wsme.rest.args import from_param, from_params, args_from_args
|
|
from wsme.exc import InvalidInput
|
|
|
|
from wsme.types import UserType, Unset, ArrayType, DictType, Base
|
|
|
|
|
|
class MyBaseType(Base):
|
|
test = str
|
|
|
|
|
|
class MyUserType(UserType):
|
|
basetype = str
|
|
|
|
|
|
class DictBasedUserType(UserType):
|
|
basetype = DictType(int, int)
|
|
|
|
|
|
class TestProtocolsCommons(unittest.TestCase):
|
|
def test_from_param_date(self):
|
|
assert from_param(datetime.date, '2008-02-28') == \
|
|
datetime.date(2008, 2, 28)
|
|
|
|
def test_from_param_time(self):
|
|
assert from_param(datetime.time, '12:14:56') == \
|
|
datetime.time(12, 14, 56)
|
|
|
|
def test_from_param_datetime(self):
|
|
assert from_param(datetime.datetime, '2009-12-23T12:14:56') == \
|
|
datetime.datetime(2009, 12, 23, 12, 14, 56)
|
|
|
|
def test_from_param_usertype(self):
|
|
assert from_param(MyUserType(), 'test') == 'test'
|
|
|
|
def test_from_params_empty(self):
|
|
assert from_params(str, {}, '', set()) is Unset
|
|
|
|
def test_from_params_native_array(self):
|
|
class params(dict):
|
|
def getall(self, path):
|
|
return ['1', '2']
|
|
p = params({'a': []})
|
|
assert from_params(ArrayType(int), p, 'a', set()) == [1, 2]
|
|
|
|
def test_from_params_empty_array(self):
|
|
assert from_params(ArrayType(int), {}, 'a', set()) is Unset
|
|
|
|
def test_from_params_dict(self):
|
|
value = from_params(
|
|
DictType(int, str),
|
|
{'a[2]': 'a2', 'a[3]': 'a3'},
|
|
'a',
|
|
set()
|
|
)
|
|
assert value == {2: 'a2', 3: 'a3'}, value
|
|
|
|
def test_from_params_dict_unset(self):
|
|
assert from_params(DictType(int, str), {}, 'a', set()) is Unset
|
|
|
|
def test_from_params_usertype(self):
|
|
value = from_params(
|
|
DictBasedUserType(),
|
|
{'a[2]': '2'},
|
|
'a',
|
|
set()
|
|
)
|
|
self.assertEqual(value, {2: 2})
|
|
|
|
def test_args_from_args_usertype(self):
|
|
|
|
class FakeType(UserType):
|
|
name = 'fake-type'
|
|
basetype = int
|
|
|
|
fake_type = FakeType()
|
|
fd = FunctionDefinition(FunctionDefinition)
|
|
fd.arguments.append(FunctionArgument('fake-arg', fake_type, True, 0))
|
|
|
|
new_args = args_from_args(fd, [1], {})
|
|
self.assertEqual([1], new_args[0])
|
|
|
|
# can't convert str to int
|
|
try:
|
|
args_from_args(fd, ['invalid-argument'], {})
|
|
except InvalidInput as e:
|
|
assert fake_type.name in str(e)
|
|
else:
|
|
self.fail('Should have thrown an InvalidInput')
|
|
|
|
def test_args_from_args_custom_exc(self):
|
|
|
|
class FakeType(UserType):
|
|
name = 'fake-type'
|
|
basetype = int
|
|
|
|
def validate(self, value):
|
|
if value < 10:
|
|
raise ValueError('should be greater than 10')
|
|
|
|
def frombasetype(self, value):
|
|
self.validate(value)
|
|
|
|
fake_type = FakeType()
|
|
fd = FunctionDefinition(FunctionDefinition)
|
|
fd.arguments.append(FunctionArgument('fake-arg', fake_type, True, 0))
|
|
|
|
try:
|
|
args_from_args(fd, [9], {})
|
|
except InvalidInput as e:
|
|
assert fake_type.name in str(e)
|
|
assert 'Error: should be greater than 10' in str(e)
|
|
else:
|
|
self.fail('Should have thrown an InvalidInput')
|
|
|
|
def test_args_from_args_array_type(self):
|
|
fake_type = ArrayType(MyBaseType)
|
|
fd = FunctionDefinition(FunctionDefinition)
|
|
fd.arguments.append(FunctionArgument('fake-arg', fake_type, True, []))
|
|
try:
|
|
args_from_args(fd, [['invalid-argument']], {})
|
|
except InvalidInput as e:
|
|
assert ArrayType.__name__ in str(e)
|
|
else:
|
|
self.fail('Should have thrown an InvalidInput')
|
|
|
|
|
|
class ArgTypeConversion(unittest.TestCase):
|
|
|
|
def test_int_zero(self):
|
|
self.assertEqual(0, from_param(int, 0))
|
|
self.assertEqual(0, from_param(int, '0'))
|
|
|
|
def test_int_nonzero(self):
|
|
self.assertEqual(1, from_param(int, 1))
|
|
self.assertEqual(1, from_param(int, '1'))
|
|
|
|
def test_int_none(self):
|
|
self.assertEqual(None, from_param(int, None))
|
|
|
|
def test_float_zero(self):
|
|
self.assertEqual(0.0, from_param(float, 0))
|
|
self.assertEqual(0.0, from_param(float, 0.0))
|
|
self.assertEqual(0.0, from_param(float, '0'))
|
|
self.assertEqual(0.0, from_param(float, '0.0'))
|
|
|
|
def test_float_nonzero(self):
|
|
self.assertEqual(1.0, from_param(float, 1))
|
|
self.assertEqual(1.0, from_param(float, 1.0))
|
|
self.assertEqual(1.0, from_param(float, '1'))
|
|
self.assertEqual(1.0, from_param(float, '1.0'))
|
|
|
|
def test_float_none(self):
|
|
self.assertEqual(None, from_param(float, None))
|