test_auth.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. from time import time
  2. from unittest.mock import Mock
  3. import pytest
  4. from django.contrib.messages import get_messages
  5. from django.test import override_settings
  6. from ..auth import (
  7. TOKEN_KEY,
  8. UPDATED_KEY,
  9. authorize_admin,
  10. is_admin_authorized,
  11. remove_admin_authorization,
  12. update_admin_authorization,
  13. )
  14. @pytest.fixture
  15. def admin_request(superuser):
  16. request = Mock(session={}, user=superuser)
  17. authorize_admin(request)
  18. return request
  19. def test_authorizing_admin_updates_request_session(user):
  20. request = Mock(session={}, user=user)
  21. authorize_admin(request)
  22. assert request.session
  23. def test_staff_user_can_be_authorized(staffuser):
  24. request = Mock(session={}, user=staffuser)
  25. authorize_admin(request)
  26. assert is_admin_authorized(request)
  27. def test_non_staff_user_admin_authorization_is_never_valid(user):
  28. request = Mock(session={}, user=user)
  29. authorize_admin(request)
  30. assert not is_admin_authorized(request)
  31. def test_anonymous_user_admin_authorization_is_never_valid(user, anonymous_user):
  32. request = Mock(session={}, user=user)
  33. authorize_admin(request)
  34. request.user = anonymous_user
  35. assert not is_admin_authorized(request)
  36. def test_superuser_without_staff_flag_admin_authorization_is_never_valid(
  37. staffuser
  38. ):
  39. request = Mock(session={}, user=staffuser)
  40. authorize_admin(request)
  41. request.user.is_staff = False
  42. assert not is_admin_authorized(request)
  43. def test_admin_authorization_is_invalidated_by_user_pk_change(
  44. admin_request, superuser
  45. ):
  46. admin_request.user.pk = superuser.pk + 1
  47. assert not is_admin_authorized(admin_request)
  48. def test_admin_authorization_is_invalidated_by_user_email_change(admin_request):
  49. admin_request.user.email = "changed@example.com"
  50. assert not is_admin_authorized(admin_request)
  51. def test_admin_authorization_is_invalidated_by_user_password_change(admin_request):
  52. admin_request.user.set_password("changed-password")
  53. assert not is_admin_authorized(admin_request)
  54. def test_admin_authorization_is_invalidated_by_secret_key_change(admin_request):
  55. with override_settings(SECRET_KEY="changed-secret-key"):
  56. assert not is_admin_authorized(admin_request)
  57. def test_admin_authorization_is_invalidated_by_token_change(admin_request):
  58. admin_request.session[TOKEN_KEY] = "authorization-token-changed"
  59. assert not is_admin_authorized(admin_request)
  60. @override_settings(MISAGO_ADMIN_SESSION_EXPIRATION=5)
  61. def test_admin_authorization_is_invalidated_by_token_expiration(admin_request):
  62. admin_request.session[UPDATED_KEY] = time() - 5 * 60 - 1
  63. assert not is_admin_authorized(admin_request)
  64. def test_updating_authorization_extends_authorization_expiration_time(admin_request):
  65. admin_request.session[UPDATED_KEY] = 0
  66. update_admin_authorization(admin_request)
  67. assert admin_request.session[UPDATED_KEY]
  68. def test_updating_authorization_validates_authorization(admin_request):
  69. admin_request.session[UPDATED_KEY] = 0
  70. update_admin_authorization(admin_request)
  71. assert is_admin_authorized(admin_request)
  72. def test_removing_authorization_removes_autorization_from_request_session(
  73. admin_request
  74. ):
  75. admin_request.session[UPDATED_KEY] = 0
  76. remove_admin_authorization(admin_request)
  77. assert not admin_request.session
  78. def test_removing_authorization_invalidates_autorization(admin_request):
  79. admin_request.session[UPDATED_KEY] = 0
  80. remove_admin_authorization(admin_request)
  81. assert not is_admin_authorized(admin_request)