Adjusted tests that were messing with database connections too heavily.
The previous implementation would result in tests hitting the wrong database when running tests in parallel on multiple databases.
This commit is contained in:
parent
442baabd0b
commit
e39dd61808
|
@ -4,6 +4,7 @@ import datetime
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
import warnings
|
import warnings
|
||||||
|
from contextlib import contextmanager
|
||||||
from unittest import SkipTest, skipIf
|
from unittest import SkipTest, skipIf
|
||||||
from xml.dom.minidom import parseString
|
from xml.dom.minidom import parseString
|
||||||
|
|
||||||
|
@ -611,27 +612,41 @@ class ForcedTimeZoneDatabaseTests(TransactionTestCase):
|
||||||
raise SkipTest("Database doesn't support feature(s): test_db_allows_multiple_connections")
|
raise SkipTest("Database doesn't support feature(s): test_db_allows_multiple_connections")
|
||||||
|
|
||||||
super(ForcedTimeZoneDatabaseTests, cls).setUpClass()
|
super(ForcedTimeZoneDatabaseTests, cls).setUpClass()
|
||||||
connections.databases['tz'] = connections.databases['default'].copy()
|
|
||||||
connections.databases['tz']['TIME_ZONE'] = 'Asia/Bangkok'
|
|
||||||
|
|
||||||
@classmethod
|
@contextmanager
|
||||||
def tearDownClass(cls):
|
def override_database_connection_timezone(self, timezone):
|
||||||
connections['tz'].close()
|
try:
|
||||||
del connections['tz']
|
orig_timezone = connection.settings_dict['TIME_ZONE']
|
||||||
del connections.databases['tz']
|
connection.settings_dict['TIME_ZONE'] = timezone
|
||||||
super(ForcedTimeZoneDatabaseTests, cls).tearDownClass()
|
# Clear cached properties, after first accessing them to ensure they exist.
|
||||||
|
connection.timezone
|
||||||
|
del connection.timezone
|
||||||
|
connection.timezone_name
|
||||||
|
del connection.timezone_name
|
||||||
|
|
||||||
|
yield
|
||||||
|
|
||||||
|
finally:
|
||||||
|
connection.settings_dict['TIME_ZONE'] = orig_timezone
|
||||||
|
# Clear cached properties, after first accessing them to ensure they exist.
|
||||||
|
connection.timezone
|
||||||
|
del connection.timezone
|
||||||
|
connection.timezone_name
|
||||||
|
del connection.timezone_name
|
||||||
|
|
||||||
def test_read_datetime(self):
|
def test_read_datetime(self):
|
||||||
fake_dt = datetime.datetime(2011, 9, 1, 17, 20, 30, tzinfo=UTC)
|
fake_dt = datetime.datetime(2011, 9, 1, 17, 20, 30, tzinfo=UTC)
|
||||||
Event.objects.create(dt=fake_dt)
|
Event.objects.create(dt=fake_dt)
|
||||||
|
|
||||||
event = Event.objects.using('tz').get()
|
with self.override_database_connection_timezone('Asia/Bangkok'):
|
||||||
|
event = Event.objects.get()
|
||||||
dt = datetime.datetime(2011, 9, 1, 10, 20, 30, tzinfo=UTC)
|
dt = datetime.datetime(2011, 9, 1, 10, 20, 30, tzinfo=UTC)
|
||||||
self.assertEqual(event.dt, dt)
|
self.assertEqual(event.dt, dt)
|
||||||
|
|
||||||
def test_write_datetime(self):
|
def test_write_datetime(self):
|
||||||
dt = datetime.datetime(2011, 9, 1, 10, 20, 30, tzinfo=UTC)
|
dt = datetime.datetime(2011, 9, 1, 10, 20, 30, tzinfo=UTC)
|
||||||
Event.objects.using('tz').create(dt=dt)
|
with self.override_database_connection_timezone('Asia/Bangkok'):
|
||||||
|
Event.objects.create(dt=dt)
|
||||||
|
|
||||||
event = Event.objects.get()
|
event = Event.objects.get()
|
||||||
fake_dt = datetime.datetime(2011, 9, 1, 17, 20, 30, tzinfo=UTC)
|
fake_dt = datetime.datetime(2011, 9, 1, 17, 20, 30, tzinfo=UTC)
|
||||||
|
|
Loading…
Reference in New Issue