test_getting_dynamic_settings_values.py 4.3 KB

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