diff options
Diffstat (limited to 'tests/admin_views/tests.py')
| -rw-r--r-- | tests/admin_views/tests.py | 46 |
1 files changed, 32 insertions, 14 deletions
diff --git a/tests/admin_views/tests.py b/tests/admin_views/tests.py index 0b2415cdb8..8cb3fda966 100644 --- a/tests/admin_views/tests.py +++ b/tests/admin_views/tests.py @@ -7,6 +7,14 @@ from urllib.parse import parse_qsl, urljoin, urlparse import pytz +try: + import zoneinfo +except ImportError: + try: + from backports import zoneinfo + except ImportError: + zoneinfo = None + from django.contrib import admin from django.contrib.admin import AdminSite, ModelAdmin from django.contrib.admin.helpers import ACTION_CHECKBOX_NAME @@ -63,6 +71,14 @@ for a staff account. Note that both fields may be case-sensitive." MULTIPART_ENCTYPE = 'enctype="multipart/form-data"' +def make_aware_datetimes(dt, iana_key): + """Makes one aware datetime for each supported time zone provider.""" + yield pytz.timezone(iana_key).localize(dt, is_dst=None) + + if zoneinfo is not None: + yield dt.replace(tzinfo=zoneinfo.ZoneInfo(iana_key)) + + class AdminFieldExtractionMixin: """ Helper methods for extracting data from AdminForm. @@ -995,24 +1011,26 @@ class AdminViewBasicTest(AdminViewBasicTestCase): @override_settings(TIME_ZONE='America/Sao_Paulo', USE_TZ=True) def test_date_hierarchy_timezone_dst(self): # This datetime doesn't exist in this timezone due to DST. - date = pytz.timezone('America/Sao_Paulo').localize(datetime.datetime(2016, 10, 16, 15), is_dst=None) - q = Question.objects.create(question='Why?', expires=date) - Answer2.objects.create(question=q, answer='Because.') - response = self.client.get(reverse('admin:admin_views_answer2_changelist')) - self.assertContains(response, 'question__expires__day=16') - self.assertContains(response, 'question__expires__month=10') - self.assertContains(response, 'question__expires__year=2016') + for date in make_aware_datetimes(datetime.datetime(2016, 10, 16, 15), 'America/Sao_Paulo'): + with self.subTest(repr(date.tzinfo)): + q = Question.objects.create(question='Why?', expires=date) + Answer2.objects.create(question=q, answer='Because.') + response = self.client.get(reverse('admin:admin_views_answer2_changelist')) + self.assertContains(response, 'question__expires__day=16') + self.assertContains(response, 'question__expires__month=10') + self.assertContains(response, 'question__expires__year=2016') @override_settings(TIME_ZONE='America/Los_Angeles', USE_TZ=True) def test_date_hierarchy_local_date_differ_from_utc(self): # This datetime is 2017-01-01 in UTC. - date = pytz.timezone('America/Los_Angeles').localize(datetime.datetime(2016, 12, 31, 16)) - q = Question.objects.create(question='Why?', expires=date) - Answer2.objects.create(question=q, answer='Because.') - response = self.client.get(reverse('admin:admin_views_answer2_changelist')) - self.assertContains(response, 'question__expires__day=31') - self.assertContains(response, 'question__expires__month=12') - self.assertContains(response, 'question__expires__year=2016') + for date in make_aware_datetimes(datetime.datetime(2016, 12, 31, 16), 'America/Los_Angeles'): + with self.subTest(repr(date.tzinfo)): + q = Question.objects.create(question='Why?', expires=date) + Answer2.objects.create(question=q, answer='Because.') + response = self.client.get(reverse('admin:admin_views_answer2_changelist')) + self.assertContains(response, 'question__expires__day=31') + self.assertContains(response, 'question__expires__month=12') + self.assertContains(response, 'question__expires__year=2016') def test_sortable_by_columns_subset(self): expected_sortable_fields = ('date', 'callable_year') |
