From 2f34207bd15406c9acdfcf8f6a65afdd55e6c2e4 Mon Sep 17 00:00:00 2001
From: Martin Burchell <martinb@aptivate.org>
Date: Fri, 10 Jul 2015 17:33:34 +0100
Subject: [PATCH] Fixed display of date fields on view/edit page

Previously were strings - django tables2 requires datetime objects
---
 django/website/hid/tests/views_tests.py       |  1 +
 django/website/transport/items.py             | 19 ++++++++++++++++--
 .../transport/tests/item_list_tests.py        | 20 +++++++++++++++++++
 3 files changed, 38 insertions(+), 2 deletions(-)

diff --git a/django/website/hid/tests/views_tests.py b/django/website/hid/tests/views_tests.py
index af305258..5aa70977 100644
--- a/django/website/hid/tests/views_tests.py
+++ b/django/website/hid/tests/views_tests.py
@@ -94,6 +94,7 @@ def test_get_categories_filters_out_removed():
 @pytest.fixture
 def request_item():
     '''Create item and request'''
+
     msg = {'body': "Message text"}
     transport.items.create(msg)
 
diff --git a/django/website/transport/items.py b/django/website/transport/items.py
index 2476566c..57f34c2e 100644
--- a/django/website/transport/items.py
+++ b/django/website/transport/items.py
@@ -1,4 +1,5 @@
 from django.core.urlresolvers import reverse
+from django.utils.dateparse import parse_datetime
 from rest_framework.test import APIRequestFactory
 from rest_framework import status
 from rest_api.views import ItemViewSet
@@ -6,7 +7,6 @@ from rest_api.views import ItemViewSet
 from .exceptions import TransportException
 
 
-
 url_name = 'item-list'
 actions = {
     'get': 'list',
@@ -33,7 +33,22 @@ def list(**kwargs):
     # FIXME: currently only body exact filtering is supported
     view = get_view()
     request = request_factory.get(url(), kwargs)
-    return view(request).data
+
+    items = view(request).data
+
+    date_fields = ('created', 'timestamp')
+
+    for item in items:
+        item_dict = dict(item)
+        for date_field in date_fields:
+            value = item_dict[date_field]
+            if value is not None:
+                item_dict[date_field] = parse_datetime(value)
+
+        item.update(item_dict)
+
+    return items
+
 
 def create(item):
     """ Create an Item from the given dict """
diff --git a/django/website/transport/tests/item_list_tests.py b/django/website/transport/tests/item_list_tests.py
index 479a26ee..44147662 100644
--- a/django/website/transport/tests/item_list_tests.py
+++ b/django/website/transport/tests/item_list_tests.py
@@ -1,4 +1,6 @@
 from __future__ import unicode_literals, absolute_import
+
+from datetime import datetime
 import pytest
 
 from data_layer.tests.factories import ItemFactory
@@ -31,3 +33,21 @@ def test_list_items_filters_by_body():
     assert len(items) == 1
     [item] = items
     assert item['body'] == 'one'
+
+
+@pytest.mark.django_db
+def test_date_fields_are_converted_to_datetimes():
+    stored_item = ItemFactory()
+
+    retrieved_items = transport.items.list()
+
+    [retrieved_item] = retrieved_items
+
+    date_fields = ('timestamp', 'created')
+
+    for date_field in date_fields:
+        stored_date = getattr(stored_item, date_field).replace(
+            microsecond=0  # MySQL discards microseconds
+        )
+
+        assert stored_date == retrieved_item[date_field]
-- 
GitLab