empty non-string values are returned as string traits

when an integer or float trait are 0 or 0.0, sql backend incorrect
returns them as string traits.

Change-Id: I70b311e24bfab264bc2623a5089cd7971041896e
Closes-Bug: #1450042
This commit is contained in:
gordon chung 2015-04-29 15:25:12 -04:00
parent 9f76e5b580
commit 229f9f98b7
2 changed files with 19 additions and 3 deletions

View File

@ -320,13 +320,13 @@ class Connection(base.Connection):
for id_, key, t_date, t_int, t_float, t_text in (
trait_q.order_by('2')).all():
if t_int:
if t_int is not None:
dtype = api_models.Trait.INT_TYPE
val = t_int
elif t_float:
elif t_float is not None:
dtype = api_models.Trait.FLOAT_TYPE
val = t_float
elif t_date:
elif t_date is not None:
dtype = api_models.Trait.DATETIME_TYPE
val = t_date
else:

View File

@ -3668,6 +3668,22 @@ class GetEventTest(EventTestBase):
self.assertTrue(events)
self.assertEqual({'status': {'nested': 'started'}}, events[0].raw)
def test_trait_type_enforced_on_none(self):
new_events = [event_models.Event(
"id_testid", "MessageIDTest", self.start,
[event_models.Trait('text', event_models.Trait.TEXT_TYPE, ''),
event_models.Trait('int', event_models.Trait.INT_TYPE, 0),
event_models.Trait('float', event_models.Trait.FLOAT_TYPE, 0.0)],
{})]
self.event_conn.record_events(new_events)
event_filter = storage.EventFilter(message_id="id_testid")
events = [event for event in self.event_conn.get_events(event_filter)]
options = [(event_models.Trait.TEXT_TYPE, ''),
(event_models.Trait.INT_TYPE, 0.0),
(event_models.Trait.FLOAT_TYPE, 0.0)]
for trait in events[0].traits:
options.remove((trait.dtype, trait.value))
class BigIntegerTest(tests_db.TestBase,
tests_db.MixinTestsWithBackendScenarios):