diff options
| author | Anatol Ulrich <anatol@versteht.es> | 2019-10-01 00:12:19 +0200 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2019-10-02 10:41:34 +0200 |
| commit | 8ed6788aa479034a44a8aa87da47de56dd728c95 (patch) | |
| tree | 1beb121695f5b6331bc8bc2d7fb2f7e808034026 /tests/db_functions/datetime | |
| parent | e1aa93280276c7197637a763344cb9740d0e91ff (diff) | |
Fixed #30821 -- Added ExtractIsoWeekYear database function and iso_week_day lookup.
Diffstat (limited to 'tests/db_functions/datetime')
| -rw-r--r-- | tests/db_functions/datetime/test_extract_trunc.py | 65 |
1 files changed, 60 insertions, 5 deletions
diff --git a/tests/db_functions/datetime/test_extract_trunc.py b/tests/db_functions/datetime/test_extract_trunc.py index f2f75ee620..f8ebb81cb5 100644 --- a/tests/db_functions/datetime/test_extract_trunc.py +++ b/tests/db_functions/datetime/test_extract_trunc.py @@ -8,10 +8,11 @@ from django.db.models import ( TimeField, ) from django.db.models.functions import ( - Extract, ExtractDay, ExtractHour, ExtractIsoYear, ExtractMinute, - ExtractMonth, ExtractQuarter, ExtractSecond, ExtractWeek, ExtractWeekDay, - ExtractYear, Trunc, TruncDate, TruncDay, TruncHour, TruncMinute, - TruncMonth, TruncQuarter, TruncSecond, TruncTime, TruncWeek, TruncYear, + Extract, ExtractDay, ExtractHour, ExtractIsoWeekDay, ExtractIsoYear, + ExtractMinute, ExtractMonth, ExtractQuarter, ExtractSecond, ExtractWeek, + ExtractWeekDay, ExtractYear, Trunc, TruncDate, TruncDay, TruncHour, + TruncMinute, TruncMonth, TruncQuarter, TruncSecond, TruncTime, TruncWeek, + TruncYear, ) from django.test import ( TestCase, override_settings, skipIfDBFeature, skipUnlessDBFeature, @@ -218,6 +219,16 @@ class DateFunctionTests(TestCase): lambda m: (m.start_datetime, m.extracted) ) self.assertQuerysetEqual( + DTModel.objects.annotate( + extracted=Extract('start_datetime', 'iso_week_day'), + ).order_by('start_datetime'), + [ + (start_datetime, start_datetime.isoweekday()), + (end_datetime, end_datetime.isoweekday()), + ], + lambda m: (m.start_datetime, m.extracted) + ) + self.assertQuerysetEqual( DTModel.objects.annotate(extracted=Extract('start_datetime', 'hour')).order_by('start_datetime'), [(start_datetime, start_datetime.hour), (end_datetime, end_datetime.hour)], lambda m: (m.start_datetime, m.extracted) @@ -275,7 +286,10 @@ class DateFunctionTests(TestCase): def test_extract_duration_unsupported_lookups(self): msg = "Cannot extract component '%s' from DurationField 'duration'." - for lookup in ('year', 'iso_year', 'month', 'week', 'week_day', 'quarter'): + for lookup in ( + 'year', 'iso_year', 'month', 'week', 'week_day', 'iso_week_day', + 'quarter', + ): with self.subTest(lookup): with self.assertRaisesMessage(ValueError, msg % lookup): DTModel.objects.annotate(extracted=Extract('duration', lookup)) @@ -499,6 +513,41 @@ class DateFunctionTests(TestCase): ) self.assertEqual(DTModel.objects.filter(start_datetime__week_day=ExtractWeekDay('start_datetime')).count(), 2) + def test_extract_iso_weekday_func(self): + start_datetime = datetime(2015, 6, 15, 14, 30, 50, 321) + end_datetime = 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=ExtractIsoWeekDay('start_datetime'), + ).order_by('start_datetime'), + [ + (start_datetime, start_datetime.isoweekday()), + (end_datetime, end_datetime.isoweekday()), + ], + lambda m: (m.start_datetime, m.extracted) + ) + self.assertQuerysetEqual( + DTModel.objects.annotate( + extracted=ExtractIsoWeekDay('start_date'), + ).order_by('start_datetime'), + [ + (start_datetime, start_datetime.isoweekday()), + (end_datetime, end_datetime.isoweekday()), + ], + lambda m: (m.start_datetime, m.extracted) + ) + self.assertEqual( + DTModel.objects.filter( + start_datetime__week_day=ExtractWeekDay('start_datetime'), + ).count(), + 2, + ) + def test_extract_hour_func(self): start_datetime = datetime(2015, 6, 15, 14, 30, 50, 321) end_datetime = datetime(2016, 6, 15, 14, 10, 50, 123) @@ -1005,6 +1054,8 @@ class DateFunctionWithTimeZoneTests(DateFunctionTests): isoyear=ExtractIsoYear('start_datetime', tzinfo=melb), weekday=ExtractWeekDay('start_datetime'), weekday_melb=ExtractWeekDay('start_datetime', tzinfo=melb), + isoweekday=ExtractIsoWeekDay('start_datetime'), + isoweekday_melb=ExtractIsoWeekDay('start_datetime', tzinfo=melb), quarter=ExtractQuarter('start_datetime', tzinfo=melb), hour=ExtractHour('start_datetime'), hour_melb=ExtractHour('start_datetime', tzinfo=melb), @@ -1020,6 +1071,8 @@ class DateFunctionWithTimeZoneTests(DateFunctionTests): self.assertEqual(utc_model.isoyear, 2015) self.assertEqual(utc_model.weekday, 2) self.assertEqual(utc_model.weekday_melb, 3) + self.assertEqual(utc_model.isoweekday, 1) + self.assertEqual(utc_model.isoweekday_melb, 2) self.assertEqual(utc_model.quarter, 2) self.assertEqual(utc_model.hour, 23) self.assertEqual(utc_model.hour_melb, 9) @@ -1035,8 +1088,10 @@ class DateFunctionWithTimeZoneTests(DateFunctionTests): self.assertEqual(melb_model.week, 25) self.assertEqual(melb_model.isoyear, 2015) self.assertEqual(melb_model.weekday, 3) + self.assertEqual(melb_model.isoweekday, 2) self.assertEqual(melb_model.quarter, 2) self.assertEqual(melb_model.weekday_melb, 3) + self.assertEqual(melb_model.isoweekday_melb, 2) self.assertEqual(melb_model.hour, 9) self.assertEqual(melb_model.hour_melb, 9) |
