test_getting_enabled_providers.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. from unittest.mock import Mock
  2. import pytest
  3. from .. import SOCIALAUTH_CACHE
  4. from ..enabledproviders import get_enabled_providers, get_provider_settings
  5. from ..models import SocialAuthProvider
  6. @pytest.fixture
  7. def provider(db):
  8. return SocialAuthProvider.objects.create(
  9. provider="facebook", is_active=True, order=0
  10. )
  11. def test_enabled_providers_are_read_from_db_if_cache_is_not_available(
  12. db, mocker, cache_versions, django_assert_num_queries
  13. ):
  14. mocker.patch("django.core.cache.cache.get", return_value=None)
  15. with django_assert_num_queries(1):
  16. get_enabled_providers(cache_versions)
  17. def test_enabled_providers_are_loaded_from_cache_if_it_is_set(
  18. db, mocker, cache_versions, django_assert_num_queries
  19. ):
  20. cache_get = mocker.patch("django.core.cache.cache.get", return_value={})
  21. with django_assert_num_queries(0):
  22. get_enabled_providers(cache_versions)
  23. cache_get.assert_called_once()
  24. def test_enabled_providers_cache_is_set_if_none_exists(db, mocker, cache_versions):
  25. cache_set = mocker.patch("django.core.cache.cache.set")
  26. mocker.patch("django.core.cache.cache.get", return_value=None)
  27. get_enabled_providers(cache_versions)
  28. cache_set.assert_called_once()
  29. def test_enabled_providers_cache_is_not_set_if_it_already_exists(
  30. db, mocker, cache_versions, django_assert_num_queries
  31. ):
  32. cache_set = mocker.patch("django.core.cache.cache.set")
  33. mocker.patch("django.core.cache.cache.get", return_value={})
  34. with django_assert_num_queries(0):
  35. get_enabled_providers(cache_versions)
  36. cache_set.assert_not_called()
  37. def test_enabled_providers_cache_key_includes_cache_name_and_version(
  38. db, mocker, cache_versions
  39. ):
  40. cache_set = mocker.patch("django.core.cache.cache.set")
  41. mocker.patch("django.core.cache.cache.get", return_value=None)
  42. get_enabled_providers(cache_versions)
  43. cache_key = cache_set.call_args[0][0]
  44. assert SOCIALAUTH_CACHE in cache_key
  45. assert cache_versions[SOCIALAUTH_CACHE] in cache_key
  46. def test_enabled_providers_are_returned_as_dict(provider, mocker, cache_versions):
  47. mocker.patch("django.core.cache.cache.set")
  48. mocker.patch("django.core.cache.cache.get", return_value=None)
  49. providers = get_enabled_providers(cache_versions)
  50. assert provider.pk in providers
  51. def test_enabled_providers_dict_includes_settings(provider, mocker, cache_versions):
  52. mocker.patch("django.core.cache.cache.set")
  53. mocker.patch("django.core.cache.cache.get", return_value=None)
  54. providers = get_enabled_providers(cache_versions)
  55. assert providers[provider.pk]["settings"]
  56. def test_enabled_providers_dict_includes_auth_backend(provider, mocker, cache_versions):
  57. mocker.patch("django.core.cache.cache.set")
  58. mocker.patch("django.core.cache.cache.get", return_value=None)
  59. providers = get_enabled_providers(cache_versions)
  60. assert providers[provider.pk]["auth_backend"]
  61. def test_provider_settings_keys_are_capitalized():
  62. provider = Mock(pk="google-oauth2", settings={"key": "text-key"})
  63. settings = get_provider_settings(provider)
  64. assert settings == {"KEY": "text-key"}
  65. def test_provider_settings_are_merged_from_model_and_defaults():
  66. provider = Mock(pk="facebook", settings={"key": "text-key"})
  67. settings = get_provider_settings(provider)
  68. assert settings == {"SCOPE": ["email"], "KEY": "text-key"}