summaryrefslogtreecommitdiff
path: root/tests/settings_tests
diff options
context:
space:
mode:
authorOliver Beattie <oliver@obeattie.com>2013-04-19 10:44:47 +0100
committerClaude Paroz <claude@2xlibre.net>2013-06-21 16:57:47 +0200
commit552a90b44456f24de228a6c7cd916c040787cf22 (patch)
treebba505c4ed2e8cb37966d79d4b014bd3893e8ca4 /tests/settings_tests
parent7314007c5bf57b9184c0bd6a8246582dd2cb8179 (diff)
Fixed #20290 -- Allow override_settings to be nested
Refactored override_settings to store the underlying settings._wrapped value seen at runtime, not instantiation time.
Diffstat (limited to 'tests/settings_tests')
-rw-r--r--tests/settings_tests/tests.py27
1 files changed, 26 insertions, 1 deletions
diff --git a/tests/settings_tests/tests.py b/tests/settings_tests/tests.py
index f8d66bb2b7..625c4f31df 100644
--- a/tests/settings_tests/tests.py
+++ b/tests/settings_tests/tests.py
@@ -9,17 +9,19 @@ from django.test.utils import override_settings
from django.utils import unittest, six
-@override_settings(TEST='override')
+@override_settings(TEST='override', TEST_OUTER='outer')
class FullyDecoratedTranTestCase(TransactionTestCase):
available_apps = []
def test_override(self):
self.assertEqual(settings.TEST, 'override')
+ self.assertEqual(settings.TEST_OUTER, 'outer')
@override_settings(TEST='override2')
def test_method_override(self):
self.assertEqual(settings.TEST, 'override2')
+ self.assertEqual(settings.TEST_OUTER, 'outer')
def test_decorated_testcase_name(self):
self.assertEqual(FullyDecoratedTranTestCase.__name__, 'FullyDecoratedTranTestCase')
@@ -168,6 +170,29 @@ class SettingsTests(TestCase):
self.assertRaises(AttributeError, getattr, settings, 'USE_I18N')
self.assertEqual(settings.USE_I18N, previous_i18n)
+ def test_override_settings_nested(self):
+ """
+ Test that override_settings uses the actual _wrapped attribute at
+ runtime, not when it was instantiated.
+ """
+
+ self.assertRaises(AttributeError, getattr, settings, 'TEST')
+ self.assertRaises(AttributeError, getattr, settings, 'TEST2')
+
+ inner = override_settings(TEST2='override')
+ with override_settings(TEST='override'):
+ self.assertEqual('override', settings.TEST)
+ with inner:
+ self.assertEqual('override', settings.TEST)
+ self.assertEqual('override', settings.TEST2)
+ # inner's __exit__ should have restored the settings of the outer
+ # context manager, not those when the class was instantiated
+ self.assertEqual('override', settings.TEST)
+ self.assertRaises(AttributeError, getattr, settings, 'TEST2')
+
+ self.assertRaises(AttributeError, getattr, settings, 'TEST')
+ self.assertRaises(AttributeError, getattr, settings, 'TEST2')
+
def test_allowed_include_roots_string(self):
"""
ALLOWED_INCLUDE_ROOTS is not allowed to be incorrectly set to a string