Browse Source

Add tests for getting/overriding dynamic setting value

rafalp 6 years ago
parent
commit
e853de85ef

+ 1 - 2
devproject/test_settings.py

@@ -17,8 +17,7 @@ DATABASES = {
 # Use in-memory cache
 # Use in-memory cache
 CACHES = {
 CACHES = {
     'default': {
     'default': {
-        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
-        'LOCATION': 'uniqu3-sn0wf14k3'
+        'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
     }
     }
 }
 }
 
 

+ 102 - 0
misago/conf/tests/test_getting_dynamic_setting_value.py

@@ -0,0 +1,102 @@
+from django.test import TestCase
+
+from misago.conf import CACHE_NAME
+from misago.conf.dynamicsettings import DynamicSettings
+from misago.conf.models import Setting, SettingsGroup
+
+from . import override_dynamic_settings
+
+cache_versions = {CACHE_NAME: "abcdefgh"}
+
+
+class GettingSettingValueTests(TestCase):
+    def test_accessing_attr_returns_setting_value(self):
+        settings = DynamicSettings(cache_versions)
+        assert settings.forum_name == "Misago"
+
+    def test_accessing_attr_for_undefined_setting_raises_error(self):
+        settings = DynamicSettings(cache_versions)
+        with self.assertRaises(KeyError):
+            settings.not_existing
+
+    def test_accessing_attr_for_lazy_setting_without_value_returns_none(self):
+        settings_group = SettingsGroup.objects.create(key="test", name="Test")
+        setting = Setting.objects.create(
+            group=settings_group,
+            setting="lazy_setting",
+            name="Lazy setting",
+            is_lazy=True,
+            field_extra={},
+        )
+
+        settings = DynamicSettings(cache_versions)
+        assert settings.lazy_setting is None
+
+    def test_accessing_attr_for_lazy_setting_with_value_returns_true(self):
+        settings_group = SettingsGroup.objects.create(key="test", name="Test")
+        setting = Setting.objects.create(
+            group=settings_group,
+            setting="lazy_setting",
+            name="Lazy setting",
+            dry_value="Hello",
+            is_lazy=True,
+            field_extra={},
+        )
+
+        settings = DynamicSettings(cache_versions)
+        assert settings.lazy_setting is True
+
+    def test_lazy_setting_getter_for_lazy_setting_with_value_returns_real_value(self):
+        settings_group = SettingsGroup.objects.create(key="test", name="Test")
+        setting = Setting.objects.create(
+            group=settings_group,
+            setting="lazy_setting",
+            name="Lazy setting",
+            dry_value="Hello",
+            is_lazy=True,
+            field_extra={},
+        )
+
+        settings = DynamicSettings(cache_versions)
+        assert settings.get_lazy_setting_value("lazy_setting") == "Hello"
+
+    def test_lazy_setting_getter_for_lazy_setting_makes_db_query(self):
+        settings_group = SettingsGroup.objects.create(key="test", name="Test")
+        setting = Setting.objects.create(
+            group=settings_group,
+            setting="lazy_setting",
+            name="Lazy setting",
+            dry_value="Hello",
+            is_lazy=True,
+            field_extra={},
+        )
+
+        settings = DynamicSettings(cache_versions)
+        with self.assertNumQueries(1):
+            settings.get_lazy_setting_value("lazy_setting")
+
+    def test_lazy_setting_getter_for_lazy_setting_is_reusing_query_result(self):
+        settings_group = SettingsGroup.objects.create(key="test", name="Test")
+        setting = Setting.objects.create(
+            group=settings_group,
+            setting="lazy_setting",
+            name="Lazy setting",
+            dry_value="Hello",
+            is_lazy=True,
+            field_extra={},
+        )
+
+        settings = DynamicSettings(cache_versions)
+        settings.get_lazy_setting_value("lazy_setting")
+        with self.assertNumQueries(0):
+            settings.get_lazy_setting_value("lazy_setting")
+
+    def test_lazy_setting_getter_for_undefined_setting_raises_attribute_error(self):
+        settings = DynamicSettings(cache_versions)
+        with self.assertRaises(AttributeError):
+            settings.get_lazy_setting_value("undefined")
+
+    def test_lazy_setting_getter_for_not_lazy_setting_raises_value_error(self):
+        settings = DynamicSettings(cache_versions)
+        with self.assertRaises(ValueError):
+            settings.get_lazy_setting_value("forum_name")

+ 0 - 5
misago/conf/tests/test_getting_setting_value.py

@@ -1,5 +0,0 @@
-from django.test import TestCase
-
-
-class GettingSettingValueTests(TestCase):
-    pass

+ 42 - 3
misago/conf/tests/test_overridding_dynamic_settings.py

@@ -1,14 +1,16 @@
 from django.test import TestCase
 from django.test import TestCase
 
 
 from misago.conf import CACHE_NAME
 from misago.conf import CACHE_NAME
-from misago.conf.tests import override_dynamic_settings
 from misago.conf.dynamicsettings import DynamicSettings
 from misago.conf.dynamicsettings import DynamicSettings
+from misago.conf.models import Setting, SettingsGroup
+
+from . import override_dynamic_settings
 
 
 cache_versions = {CACHE_NAME: "abcdefgh"}
 cache_versions = {CACHE_NAME: "abcdefgh"}
 
 
 
 
 class OverrideDynamicSettingsTests(TestCase):
 class OverrideDynamicSettingsTests(TestCase):
-    def test_setting_can_be_overridden_using_context_manager(self):
+    def test_dynamic_setting_can_be_overridden_using_context_manager(self):
         settings = DynamicSettings(cache_versions)
         settings = DynamicSettings(cache_versions)
         assert settings.forum_name == "Misago"
         assert settings.forum_name == "Misago"
 
 
@@ -17,7 +19,7 @@ class OverrideDynamicSettingsTests(TestCase):
 
 
         assert settings.forum_name == "Misago"
         assert settings.forum_name == "Misago"
 
 
-    def test_setting_can_be_overridden_using_decorator(self):
+    def test_dynamic_setting_can_be_overridden_using_decorator(self):
         @override_dynamic_settings(forum_name="Overrided")
         @override_dynamic_settings(forum_name="Overrided")
         def decorated_function(settings):
         def decorated_function(settings):
             return settings.forum_name
             return settings.forum_name
@@ -26,3 +28,40 @@ class OverrideDynamicSettingsTests(TestCase):
         assert settings.forum_name == "Misago"
         assert settings.forum_name == "Misago"
         assert decorated_function(settings) == "Overrided"
         assert decorated_function(settings) == "Overrided"
         assert settings.forum_name == "Misago"
         assert settings.forum_name == "Misago"
+
+    def test_lazy_dynamic_setting_can_be_overridden_using_context_manager(self):
+        settings_group = SettingsGroup.objects.create(key="test", name="Test")
+        setting = Setting.objects.create(
+            group=settings_group,
+            setting="lazy_setting",
+            name="Lazy setting",
+            dry_value="Hello",
+            is_lazy=True,
+            field_extra={},
+        )
+
+        settings = DynamicSettings(cache_versions)
+        assert settings.get_lazy_setting_value("lazy_setting") == "Hello"
+        with override_dynamic_settings(lazy_setting="Overrided"):
+            assert settings.get_lazy_setting_value("lazy_setting") == "Overrided"
+        assert settings.get_lazy_setting_value("lazy_setting") == "Hello"
+
+    def test_lazy_dynamic_setting_can_be_overridden_using_decorator(self):
+        @override_dynamic_settings(lazy_setting="Overrided")
+        def decorated_function(settings):
+            return settings.get_lazy_setting_value("lazy_setting")
+
+        settings_group = SettingsGroup.objects.create(key="test", name="Test")
+        setting = Setting.objects.create(
+            group=settings_group,
+            setting="lazy_setting",
+            name="Lazy setting",
+            dry_value="Hello",
+            is_lazy=True,
+            field_extra={},
+        )
+        
+        settings = DynamicSettings(cache_versions)
+        assert settings.get_lazy_setting_value("lazy_setting") == "Hello"
+        assert decorated_function(settings) == "Overrided"
+        assert settings.get_lazy_setting_value("lazy_setting") == "Hello"