diff options
| author | Can Sarigol <ertugrulsarigol@gmail.com> | 2021-11-11 09:57:50 +0100 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2021-11-12 11:14:08 +0100 |
| commit | d54aa49a7d15e708b7da1620310167f39e859cba (patch) | |
| tree | cf38196b421ddcdddd067b9b7f036dfd682a3e99 /tests | |
| parent | 45de30dc693fcd63d33816a85fb02abd5f7a10b4 (diff) | |
[4.0.x] Fixed #33279 -- Fixed handling time zones with "-" sign in names.
Thanks yakimka for the report.
Regression in fde9b7d35e4e185903cc14aa587ca870037941b1.
Backport of 661316b066923493ff91d6d2aa92e463f595a6b1 from main.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/backends/test_utils.py | 19 | ||||
| -rw-r--r-- | tests/db_functions/datetime/test_extract_trunc.py | 23 |
2 files changed, 41 insertions, 1 deletions
diff --git a/tests/backends/test_utils.py b/tests/backends/test_utils.py index 7974dee607..54819829fd 100644 --- a/tests/backends/test_utils.py +++ b/tests/backends/test_utils.py @@ -3,7 +3,7 @@ from decimal import Decimal, Rounded from django.db import NotSupportedError, connection from django.db.backends.utils import ( - format_number, split_identifier, truncate_name, + format_number, split_identifier, split_tzname_delta, truncate_name, ) from django.test import ( SimpleTestCase, TransactionTestCase, skipIfDBFeature, skipUnlessDBFeature, @@ -57,6 +57,23 @@ class TestUtils(SimpleTestCase): with self.assertRaises(Rounded): equal('1234567890.1234', 5, None, '1234600000') + def test_split_tzname_delta(self): + tests = [ + ('Asia/Ust+Nera', ('Asia/Ust+Nera', None, None)), + ('Asia/Ust-Nera', ('Asia/Ust-Nera', None, None)), + ('Asia/Ust+Nera-02:00', ('Asia/Ust+Nera', '-', '02:00')), + ('Asia/Ust-Nera+05:00', ('Asia/Ust-Nera', '+', '05:00')), + ('America/Coral_Harbour-01:00', ('America/Coral_Harbour', '-', '01:00')), + ('America/Coral_Harbour+02:30', ('America/Coral_Harbour', '+', '02:30')), + ('UTC+15:00', ('UTC', '+', '15:00')), + ('UTC-04:43', ('UTC', '-', '04:43')), + ('UTC', ('UTC', None, None)), + ('UTC+1', ('UTC+1', None, None)), + ] + for tzname, expected in tests: + with self.subTest(tzname=tzname): + self.assertEqual(split_tzname_delta(tzname), expected) + class CursorWrapperTests(TransactionTestCase): available_apps = [] diff --git a/tests/db_functions/datetime/test_extract_trunc.py b/tests/db_functions/datetime/test_extract_trunc.py index a129448470..71d9b676ed 100644 --- a/tests/db_functions/datetime/test_extract_trunc.py +++ b/tests/db_functions/datetime/test_extract_trunc.py @@ -1210,6 +1210,29 @@ class DateFunctionWithTimeZoneTests(DateFunctionTests): self.assertEqual(melb_model.hour, 9) self.assertEqual(melb_model.hour_melb, 9) + def test_extract_func_with_timezone_minus_no_offset(self): + start_datetime = datetime(2015, 6, 15, 23, 30, 1, 321) + end_datetime = datetime(2015, 6, 16, 13, 11, 27, 123) + start_datetime = timezone.make_aware(start_datetime) + end_datetime = timezone.make_aware(end_datetime) + self.create_model(start_datetime, end_datetime) + for ust_nera in self.get_timezones('Asia/Ust-Nera'): + with self.subTest(repr(ust_nera)): + qs = DTModel.objects.annotate( + hour=ExtractHour('start_datetime'), + hour_tz=ExtractHour('start_datetime', tzinfo=ust_nera), + ).order_by('start_datetime') + + utc_model = qs.get() + self.assertEqual(utc_model.hour, 23) + self.assertEqual(utc_model.hour_tz, 9) + + with timezone.override(ust_nera): + ust_nera_model = qs.get() + + self.assertEqual(ust_nera_model.hour, 9) + self.assertEqual(ust_nera_model.hour_tz, 9) + def test_extract_func_explicit_timezone_priority(self): start_datetime = datetime(2015, 6, 15, 23, 30, 1, 321) end_datetime = datetime(2015, 6, 16, 13, 11, 27, 123) |
