Fix default handling for zero values

When int and float arguments to controllers default to zero and no value
is provided in the request, the controller is being passed None instead
of 0.

Closes-bug: #1291084
Change-Id: I35c034e4a793a44d2ddd376046e7dbb841ca13b6
This commit is contained in:
Doug Hellmann 2014-03-11 15:44:06 -07:00
parent 288e0f1ee8
commit 9c8a033415
2 changed files with 30 additions and 1 deletions

View File

@ -18,7 +18,7 @@ ARRAY_MAX_SIZE = 1000
@generic
def from_param(datatype, value):
return datatype(value) if value else None
return datatype(value) if value is not None else None
@from_param.when_object(datetime.date)

View File

@ -75,3 +75,32 @@ class TestProtocolsCommons(unittest.TestCase):
assert fake_type.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))