diff options
| author | Oliver Beattie <oliver@obeattie.com> | 2013-04-19 10:44:47 +0100 |
|---|---|---|
| committer | Claude Paroz <claude@2xlibre.net> | 2013-06-21 16:57:47 +0200 |
| commit | 552a90b44456f24de228a6c7cd916c040787cf22 (patch) | |
| tree | bba505c4ed2e8cb37966d79d4b014bd3893e8ca4 /tests/settings_tests | |
| parent | 7314007c5bf57b9184c0bd6a8246582dd2cb8179 (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.py | 27 |
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 |
