diff options
| author | Simon Charette <charette.s@gmail.com> | 2016-06-18 23:39:26 -0400 |
|---|---|---|
| committer | Simon Charette <charette.s@gmail.com> | 2016-07-08 12:35:34 -0400 |
| commit | 8a4f017f4565c51c83aabb61a816e334e8638432 (patch) | |
| tree | fa6f6a4fcaf158dd161ef85fa85c3072390626e6 /tests/db_functions/test_datetime.py | |
| parent | 082c52dbedd76c312cebf3b23e04c449a94c20b6 (diff) | |
Fixed #26348 -- Added TruncTime and exposed it through the __time lookup.
Thanks Tim for the review.
Diffstat (limited to 'tests/db_functions/test_datetime.py')
| -rw-r--r-- | tests/db_functions/test_datetime.py | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/tests/db_functions/test_datetime.py b/tests/db_functions/test_datetime.py index e727ea5b7d..1b44c9a658 100644 --- a/tests/db_functions/test_datetime.py +++ b/tests/db_functions/test_datetime.py @@ -9,7 +9,7 @@ from django.db.models import DateField, DateTimeField, IntegerField, TimeField from django.db.models.functions import ( Extract, ExtractDay, ExtractHour, ExtractMinute, ExtractMonth, ExtractSecond, ExtractWeekDay, ExtractYear, Trunc, TruncDate, TruncDay, - TruncHour, TruncMinute, TruncMonth, TruncSecond, TruncYear, + TruncHour, TruncMinute, TruncMonth, TruncSecond, TruncTime, TruncYear, ) from django.test import TestCase, override_settings from django.utils import timezone @@ -512,6 +512,30 @@ class DateFunctionTests(TestCase): with self.assertRaisesMessage(ValueError, "Cannot truncate TimeField 'start_time' to DateField"): list(DTModel.objects.annotate(truncated=TruncDate('start_time', output_field=TimeField()))) + def test_trunc_time_func(self): + start_datetime = microsecond_support(datetime(2015, 6, 15, 14, 30, 50, 321)) + end_datetime = microsecond_support(datetime(2016, 6, 15, 14, 10, 50, 123)) + if settings.USE_TZ: + start_datetime = timezone.make_aware(start_datetime, is_dst=False) + end_datetime = timezone.make_aware(end_datetime, is_dst=False) + self.create_model(start_datetime, end_datetime) + self.create_model(end_datetime, start_datetime) + self.assertQuerysetEqual( + DTModel.objects.annotate(extracted=TruncTime('start_datetime')).order_by('start_datetime'), + [ + (start_datetime, start_datetime.time()), + (end_datetime, end_datetime.time()), + ], + lambda m: (m.start_datetime, m.extracted) + ) + self.assertEqual(DTModel.objects.filter(start_datetime__time=TruncTime('start_datetime')).count(), 2) + + with self.assertRaisesMessage(ValueError, "Cannot truncate DateField 'start_date' to TimeField"): + list(DTModel.objects.annotate(truncated=TruncTime('start_date'))) + + with self.assertRaisesMessage(ValueError, "Cannot truncate DateField 'start_date' to TimeField"): + list(DTModel.objects.annotate(truncated=TruncTime('start_date', output_field=DateField()))) + def test_trunc_day_func(self): start_datetime = microsecond_support(datetime(2015, 6, 15, 14, 30, 50, 321)) end_datetime = truncate_to(microsecond_support(datetime(2016, 6, 15, 14, 10, 50, 123)), 'day') |
