Skip to content

Commit d29ba49

Browse files
author
Ryan P Kilby
committed
Add test case for issue #24
1 parent a845a34 commit d29ba49

File tree

1 file changed

+30
-1
lines changed

1 file changed

+30
-1
lines changed

rest_framework_filters/tests.py

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from django.utils.dateparse import parse_time, parse_datetime
99

1010
from django.db import models
11-
from django.test import TestCase
11+
from django.test import TestCase, override_settings
1212
from django.contrib.auth.models import User
1313

1414
from . import filters
@@ -632,6 +632,35 @@ class Meta:
632632
p = list(f)[0]
633633
self.assertEqual(p.name, "John")
634634

635+
@override_settings(USE_TZ=True)
636+
def test_datetime_timezone_awareness(self):
637+
# Addresses issue #24 - ensure that datetime strings terminating
638+
# in 'Z' are correctly handled.
639+
from rest_framework import serializers
640+
from rest_framework.renderers import JSONRenderer
641+
642+
class PersonSerializer(serializers.ModelSerializer):
643+
class Meta:
644+
model = Person
645+
646+
# Figure out what the date strings should look like based on the
647+
# serializer output.
648+
john = Person.objects.get(name="John")
649+
data = PersonSerializer(john).data
650+
datetime_str = JSONRenderer().render(parse_datetime(data['datetime_joined']) + datetime.timedelta(seconds=0.6)).decode('utf-8').strip('"')
651+
652+
# This is more for documentation - DRF appends a 'Z' to timezone aware UTC datetimes when rendering:
653+
# https://github.com/tomchristie/django-rest-framework/blob/3.2.0/rest_framework/fields.py#L1002-L1006
654+
self.assertTrue(datetime_str.endswith('Z'))
655+
656+
GET = {
657+
'datetime_joined__lte': datetime_str,
658+
}
659+
f = AllLookupsPersonDateFilter(GET, queryset=Person.objects.all())
660+
self.assertEqual(len(list(f)), 1)
661+
p = list(f)[0]
662+
self.assertEqual(p.name, "John")
663+
635664
def test_inset_filter(self):
636665
p1 = Person.objects.get(name="John").pk
637666
p2 = Person.objects.get(name="Mark").pk

0 commit comments

Comments
 (0)