Add derived/derived_dict_entry/derive_settings and tests.

- Enables a method of deriving Django settings from other Django
  settings after all other Django settings are stable.
This commit is contained in:
John Eskew
2017-10-30 14:33:25 -04:00
parent 9c85fcad78
commit 9a2e25c370
2 changed files with 113 additions and 0 deletions

View File

@@ -0,0 +1,44 @@
"""
Tests for derived.py
"""
import sys
from unittest import TestCase
from openedx.core.lib.derived import derived, derive_settings, clear_for_tests
class TestDerivedSettings(TestCase):
"""
Test settings that are derived from other settings.
"""
def setUp(self):
super(TestDerivedSettings, self).setUp()
clear_for_tests()
self.module = sys.modules[__name__]
self.module.SIMPLE_VALUE = 'paneer'
self.module.DERIVED_VALUE = lambda settings: 'mutter ' + settings.SIMPLE_VALUE
self.module.ANOTHER_DERIVED_VALUE = lambda settings: settings.DERIVED_VALUE + ' with naan'
self.module.UNREGISTERED_DERIVED_VALUE = lambda settings: settings.SIMPLE_VALUE + ' is cheese'
derived('DERIVED_VALUE', 'ANOTHER_DERIVED_VALUE')
self.module.DICT_VALUE = {}
self.module.DICT_VALUE['test_key'] = lambda settings: settings.DERIVED_VALUE * 3
derived(('DICT_VALUE', 'test_key'))
def test_derived_settings_are_derived(self):
derive_settings(__name__)
self.assertEqual(self.module.DERIVED_VALUE, 'mutter paneer')
self.assertEqual(self.module.ANOTHER_DERIVED_VALUE, 'mutter paneer with naan')
def test_unregistered_derived_settings(self):
derive_settings(__name__)
self.assertTrue(callable(self.module.UNREGISTERED_DERIVED_VALUE))
def test_derived_settings_overridden(self):
self.module.DERIVED_VALUE = 'aloo gobi'
derive_settings(__name__)
self.assertEqual(self.module.DERIVED_VALUE, 'aloo gobi')
self.assertEqual(self.module.ANOTHER_DERIVED_VALUE, 'aloo gobi with naan')
def test_derived_dict_settings(self):
derive_settings(__name__)
self.assertEqual(self.module.DICT_VALUE['test_key'], 'mutter paneermutter paneermutter paneer')