test_getting_dynamic_settings_values.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. import pytest
  2. from .. import SETTINGS_CACHE
  3. from ..dynamicsettings import DynamicSettings
  4. def test_settings_are_loaded_from_database_if_cache_is_not_available(
  5. db, mocker, cache_versions, django_assert_num_queries
  6. ):
  7. mocker.patch("django.core.cache.cache.set")
  8. mocker.patch("django.core.cache.cache.get", return_value=None)
  9. with django_assert_num_queries(1):
  10. DynamicSettings(cache_versions)
  11. def test_settings_are_loaded_from_cache_if_it_is_not_none(
  12. db, mocker, cache_versions, django_assert_num_queries
  13. ):
  14. mocker.patch("django.core.cache.cache.set")
  15. cache_get = mocker.patch("django.core.cache.cache.get", return_value={})
  16. with django_assert_num_queries(0):
  17. DynamicSettings(cache_versions)
  18. cache_get.assert_called_once()
  19. def test_settings_cache_is_set_if_none_exists(db, mocker, cache_versions):
  20. cache_set = mocker.patch("django.core.cache.cache.set")
  21. mocker.patch("django.core.cache.cache.get", return_value=None)
  22. DynamicSettings(cache_versions)
  23. cache_set.assert_called_once()
  24. def test_settings_cache_is_not_set_if_it_already_exists(
  25. db, mocker, cache_versions, django_assert_num_queries
  26. ):
  27. cache_set = mocker.patch("django.core.cache.cache.set")
  28. mocker.patch("django.core.cache.cache.get", return_value={})
  29. with django_assert_num_queries(0):
  30. DynamicSettings(cache_versions)
  31. cache_set.assert_not_called()
  32. def test_settings_cache_key_includes_cache_name_and_version(db, mocker, cache_versions):
  33. cache_set = mocker.patch("django.core.cache.cache.set")
  34. mocker.patch("django.core.cache.cache.get", return_value=None)
  35. DynamicSettings(cache_versions)
  36. cache_key = cache_set.call_args[0][0]
  37. assert SETTINGS_CACHE in cache_key
  38. assert cache_versions[SETTINGS_CACHE] in cache_key
  39. def test_accessing_attr_returns_setting_value(db, cache_versions):
  40. settings = DynamicSettings(cache_versions)
  41. assert settings.forum_name == "Misago"
  42. def test_accessing_attr_for_undefined_setting_raises_attribute_error(
  43. db, cache_versions
  44. ):
  45. settings = DynamicSettings(cache_versions)
  46. with pytest.raises(AttributeError):
  47. settings.not_existing # pylint: disable=pointless-statement
  48. def test_accessing_attr_for_lazy_setting_with_value_returns_true(
  49. cache_versions, lazy_setting
  50. ):
  51. settings = DynamicSettings(cache_versions)
  52. assert settings.lazy_setting is True
  53. def test_lazy_setting_getter_for_lazy_setting_with_value_returns_real_value(
  54. cache_versions, lazy_setting
  55. ):
  56. settings = DynamicSettings(cache_versions)
  57. assert settings.get_lazy_setting_value("lazy_setting") == lazy_setting.value
  58. def test_lazy_setting_getter_for_lazy_setting_makes_db_query(
  59. cache_versions, lazy_setting, django_assert_num_queries
  60. ):
  61. settings = DynamicSettings(cache_versions)
  62. with django_assert_num_queries(1):
  63. settings.get_lazy_setting_value("lazy_setting")
  64. def test_accessing_attr_for_lazy_setting_without_value_returns_none(
  65. cache_versions, lazy_setting_without_value
  66. ):
  67. settings = DynamicSettings(cache_versions)
  68. assert settings.lazy_setting is None
  69. def test_lazy_setting_getter_for_lazy_setting_is_reusing_query_result(
  70. cache_versions, lazy_setting, django_assert_num_queries
  71. ):
  72. settings = DynamicSettings(cache_versions)
  73. settings.get_lazy_setting_value("lazy_setting")
  74. with django_assert_num_queries(0):
  75. settings.get_lazy_setting_value("lazy_setting")
  76. def test_lazy_setting_getter_for_undefined_setting_raises_attribute_error(
  77. db, cache_versions
  78. ):
  79. settings = DynamicSettings(cache_versions)
  80. with pytest.raises(AttributeError):
  81. settings.get_lazy_setting_value("undefined")
  82. def test_lazy_setting_getter_for_not_lazy_setting_raises_value_error(
  83. db, cache_versions
  84. ):
  85. settings = DynamicSettings(cache_versions)
  86. with pytest.raises(ValueError):
  87. settings.get_lazy_setting_value("forum_name")
  88. def test_public_settings_getter_returns_dict_with_public_settings(
  89. cache_versions, public_setting
  90. ):
  91. settings = DynamicSettings(cache_versions)
  92. public_settings = settings.get_public_settings()
  93. assert public_settings["public_setting"] == "Hello"
  94. def test_public_settings_getter_excludes_private_settings_from_dict(
  95. cache_versions, private_setting
  96. ):
  97. settings = DynamicSettings(cache_versions)
  98. public_settings = settings.get_public_settings()
  99. assert "private_setting" not in public_settings