test_getting_dynamic_setting_value.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. from django.test import TestCase
  2. from misago.conf import CACHE_NAME
  3. from misago.conf.dynamicsettings import DynamicSettings
  4. from misago.conf.models import Setting, SettingsGroup
  5. from . import override_dynamic_settings
  6. cache_versions = {CACHE_NAME: "abcdefgh"}
  7. class GettingSettingValueTests(TestCase):
  8. def test_accessing_attr_returns_setting_value(self):
  9. settings = DynamicSettings(cache_versions)
  10. assert settings.forum_name == "Misago"
  11. def test_accessing_attr_for_undefined_setting_raises_error(self):
  12. settings = DynamicSettings(cache_versions)
  13. with self.assertRaises(KeyError):
  14. settings.not_existing
  15. def test_accessing_attr_for_lazy_setting_without_value_returns_none(self):
  16. settings_group = SettingsGroup.objects.create(key="test", name="Test")
  17. setting = Setting.objects.create(
  18. group=settings_group,
  19. setting="lazy_setting",
  20. name="Lazy setting",
  21. is_lazy=True,
  22. field_extra={},
  23. )
  24. settings = DynamicSettings(cache_versions)
  25. assert settings.lazy_setting is None
  26. def test_accessing_attr_for_lazy_setting_with_value_returns_true(self):
  27. settings_group = SettingsGroup.objects.create(key="test", name="Test")
  28. setting = Setting.objects.create(
  29. group=settings_group,
  30. setting="lazy_setting",
  31. name="Lazy setting",
  32. dry_value="Hello",
  33. is_lazy=True,
  34. field_extra={},
  35. )
  36. settings = DynamicSettings(cache_versions)
  37. assert settings.lazy_setting is True
  38. def test_lazy_setting_getter_for_lazy_setting_with_value_returns_real_value(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. dry_value="Hello",
  45. is_lazy=True,
  46. field_extra={},
  47. )
  48. settings = DynamicSettings(cache_versions)
  49. assert settings.get_lazy_setting_value("lazy_setting") == "Hello"
  50. def test_lazy_setting_getter_for_lazy_setting_makes_db_query(self):
  51. settings_group = SettingsGroup.objects.create(key="test", name="Test")
  52. setting = Setting.objects.create(
  53. group=settings_group,
  54. setting="lazy_setting",
  55. name="Lazy setting",
  56. dry_value="Hello",
  57. is_lazy=True,
  58. field_extra={},
  59. )
  60. settings = DynamicSettings(cache_versions)
  61. with self.assertNumQueries(1):
  62. settings.get_lazy_setting_value("lazy_setting")
  63. def test_lazy_setting_getter_for_lazy_setting_is_reusing_query_result(self):
  64. settings_group = SettingsGroup.objects.create(key="test", name="Test")
  65. setting = Setting.objects.create(
  66. group=settings_group,
  67. setting="lazy_setting",
  68. name="Lazy setting",
  69. dry_value="Hello",
  70. is_lazy=True,
  71. field_extra={},
  72. )
  73. settings = DynamicSettings(cache_versions)
  74. settings.get_lazy_setting_value("lazy_setting")
  75. with self.assertNumQueries(0):
  76. settings.get_lazy_setting_value("lazy_setting")
  77. def test_lazy_setting_getter_for_undefined_setting_raises_attribute_error(self):
  78. settings = DynamicSettings(cache_versions)
  79. with self.assertRaises(AttributeError):
  80. settings.get_lazy_setting_value("undefined")
  81. def test_lazy_setting_getter_for_not_lazy_setting_raises_value_error(self):
  82. settings = DynamicSettings(cache_versions)
  83. with self.assertRaises(ValueError):
  84. settings.get_lazy_setting_value("forum_name")