diff --git a/constance/backends/database.py b/constance/backends/database.py index 5d4b225f..c39b7ed7 100644 --- a/constance/backends/database.py +++ b/constance/backends/database.py @@ -53,8 +53,7 @@ def autofill(self): full_cachekey = self.add_prefix(self._autofill_cachekey) if self._cache.get(full_cachekey): return - autofill_values = {} - autofill_values[full_cachekey] = 1 + autofill_values = {full_cachekey: 1} for key, value in self.mget(settings.CONFIG): autofill_values[self.add_prefix(key)] = value self._cache.set_many(autofill_values, timeout=self._autofill_timeout) diff --git a/tests/backends/test_database.py b/tests/backends/test_database.py index 0401e651..f83c21e9 100644 --- a/tests/backends/test_database.py +++ b/tests/backends/test_database.py @@ -25,3 +25,30 @@ def test_database_queries(self): def tearDown(self): settings.BACKEND = self.old_backend + + +class TestDatabaseWithCache(StorageTestsMixin, TestCase): + def setUp(self): + self.old_backend = settings.BACKEND + settings.BACKEND = "constance.backends.database.DatabaseBackend" + self.old_cache_backend = settings.DATABASE_CACHE_BACKEND + settings.DATABASE_CACHE_BACKEND = "default" + super().setUp() + self.config._backend._cache.clear() + + def test_database_queries(self): + # Read and set to default value + with self.assertNumQueries(6): + self.assertEqual(self.config.INT_VALUE, 1) + + # Read again + with self.assertNumQueries(0): + self.assertEqual(self.config.INT_VALUE, 1) + + # Set value + with self.assertNumQueries(3): + self.config.INT_VALUE = 15 + + def tearDown(self): + settings.BACKEND = self.old_backend + settings.DATABASE_CACHE_BACKEND = self.old_cache_backend diff --git a/tests/cache_mockup.py b/tests/cache_mockup.py new file mode 100644 index 00000000..6be4feaa --- /dev/null +++ b/tests/cache_mockup.py @@ -0,0 +1,12 @@ +from django.core.cache.backends.base import BaseCache +from django.core.cache.backends.locmem import LocMemCache + + +class Cache(BaseCache): + def __init__(self, name, params): + self._cache = LocMemCache(name, params) + self.add = self._cache.add + self.delete = self._cache.delete + self.set = self._cache.set + self.get = self._cache.get + self.clear = self._cache.clear diff --git a/tests/settings.py b/tests/settings.py index 61656aba..5b8a2258 100644 --- a/tests/settings.py +++ b/tests/settings.py @@ -29,6 +29,13 @@ }, } +CACHES = { + "default": { + "BACKEND": "tests.cache_mockup.Cache", + "LOCATION": "locmem", + } +} + INSTALLED_APPS = ( "django.contrib.admin", "django.contrib.staticfiles",