summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorCan Sarigol <ertugrulsarigol@gmail.com>2021-11-11 09:57:50 +0100
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2021-11-12 11:14:08 +0100
commitd54aa49a7d15e708b7da1620310167f39e859cba (patch)
treecf38196b421ddcdddd067b9b7f036dfd682a3e99 /tests
parent45de30dc693fcd63d33816a85fb02abd5f7a10b4 (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.py19
-rw-r--r--tests/db_functions/datetime/test_extract_trunc.py23
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)