test_getting_dynamic_setting_value.py 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. from unittest.mock import patch
  2. from django.test import TestCase
  3. from misago.conf import CACHE_NAME
  4. from misago.conf.dynamicsettings import DynamicSettings
  5. from misago.conf.models import Setting, SettingsGroup
  6. from . import override_dynamic_settings
  7. cache_versions = {CACHE_NAME: "abcdefgh"}
  8. class GettingSettingValueTests(TestCase):
  9. @patch('django.core.cache.cache.set')
  10. @patch('django.core.cache.cache.get', return_value=None)
  11. def test_dynamic_settings_are_loaded_from_database_if_cache_is_not_available(self, cache_get, _):
  12. with self.assertNumQueries(1):
  13. DynamicSettings(cache_versions)
  14. @patch('django.core.cache.cache.set')
  15. @patch('django.core.cache.cache.get', return_value={})
  16. def test_dynamic_settings_are_loaded_from_cache_if_it_is_not_none(self, cache_get, _):
  17. with self.assertNumQueries(0):
  18. DynamicSettings(cache_versions)
  19. cache_get.assert_called_once()
  20. @patch('django.core.cache.cache.set')
  21. @patch('django.core.cache.cache.get', return_value=None)
  22. def test_dynamic_settings_cache_is_set_if_none_exists(self, _, cache_set):
  23. DynamicSettings(cache_versions)
  24. cache_set.assert_called_once()
  25. @patch('django.core.cache.cache.set')
  26. @patch('django.core.cache.cache.get', return_value={})
  27. def test_dynamic_settings_cache_is_not_set_if_it_already_exists(self, _, cache_set):
  28. with self.assertNumQueries(0):
  29. DynamicSettings(cache_versions)
  30. cache_set.assert_not_called()
  31. def test_accessing_attr_returns_setting_value(self):
  32. settings = DynamicSettings(cache_versions)
  33. assert settings.forum_name == "Misago"
  34. def test_accessing_attr_for_undefined_setting_raises_error(self):
  35. settings = DynamicSettings(cache_versions)
  36. with self.assertRaises(KeyError):
  37. settings.not_existing
  38. def test_accessing_attr_for_lazy_setting_without_value_returns_none(self):
  39. settings_group = SettingsGroup.objects.create(key="test", name="Test")
  40. setting = Setting.objects.create(
  41. group=settings_group,
  42. setting="lazy_setting",
  43. name="Lazy setting",
  44. is_lazy=True,
  45. field_extra={},
  46. )
  47. settings = DynamicSettings(cache_versions)
  48. assert settings.lazy_setting is None
  49. def test_accessing_attr_for_lazy_setting_with_value_returns_true(self):
  50. settings_group = SettingsGroup.objects.create(key="test", name="Test")
  51. setting = Setting.objects.create(
  52. group=settings_group,
  53. setting="lazy_setting",
  54. name="Lazy setting",
  55. dry_value="Hello",
  56. is_lazy=True,
  57. field_extra={},
  58. )
  59. settings = DynamicSettings(cache_versions)
  60. assert settings.lazy_setting is True
  61. def test_lazy_setting_getter_for_lazy_setting_with_value_returns_real_value(self):
  62. settings_group = SettingsGroup.objects.create(key="test", name="Test")
  63. setting = Setting.objects.create(
  64. group=settings_group,
  65. setting="lazy_setting",
  66. name="Lazy setting",
  67. dry_value="Hello",
  68. is_lazy=True,
  69. field_extra={},
  70. )
  71. settings = DynamicSettings(cache_versions)
  72. assert settings.get_lazy_setting_value("lazy_setting") == "Hello"
  73. def test_lazy_setting_getter_for_lazy_setting_makes_db_query(self):
  74. settings_group = SettingsGroup.objects.create(key="test", name="Test")
  75. setting = Setting.objects.create(
  76. group=settings_group,
  77. setting="lazy_setting",
  78. name="Lazy setting",
  79. dry_value="Hello",
  80. is_lazy=True,
  81. field_extra={},
  82. )
  83. settings = DynamicSettings(cache_versions)
  84. with self.assertNumQueries(1):
  85. settings.get_lazy_setting_value("lazy_setting")
  86. def test_lazy_setting_getter_for_lazy_setting_is_reusing_query_result(self):
  87. settings_group = SettingsGroup.objects.create(key="test", name="Test")
  88. setting = Setting.objects.create(
  89. group=settings_group,
  90. setting="lazy_setting",
  91. name="Lazy setting",
  92. dry_value="Hello",
  93. is_lazy=True,
  94. field_extra={},
  95. )
  96. settings = DynamicSettings(cache_versions)
  97. settings.get_lazy_setting_value("lazy_setting")
  98. with self.assertNumQueries(0):
  99. settings.get_lazy_setting_value("lazy_setting")
  100. def test_lazy_setting_getter_for_undefined_setting_raises_attribute_error(self):
  101. settings = DynamicSettings(cache_versions)
  102. with self.assertRaises(AttributeError):
  103. settings.get_lazy_setting_value("undefined")
  104. def test_lazy_setting_getter_for_not_lazy_setting_raises_value_error(self):
  105. settings = DynamicSettings(cache_versions)
  106. with self.assertRaises(ValueError):
  107. settings.get_lazy_setting_value("forum_name")