test_patching_user_acl.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. from django.contrib.auth import get_user_model
  2. from django.test import TestCase
  3. from misago.acl import useracl
  4. from misago.acl.test import patch_user_acl
  5. User = get_user_model()
  6. cache_versions = {"acl": "abcdefgh"}
  7. def callable_acl_patch(user, user_acl):
  8. user_acl["patched_for_user_id"] = user.id
  9. class PatchingUserACLTests(TestCase):
  10. @patch_user_acl({"is_patched": True})
  11. def test_decorator_patches_all_users_acls_in_test(self):
  12. user = User.objects.create_user("User", "user@example.com")
  13. user_acl = useracl.get_user_acl(user, cache_versions)
  14. assert user_acl["is_patched"]
  15. def test_decorator_removes_patches_after_test(self):
  16. user = User.objects.create_user("User", "user@example.com")
  17. @patch_user_acl({"is_patched": True})
  18. def test_function(patch_user_acl):
  19. user_acl = useracl.get_user_acl(user, cache_versions)
  20. assert user_acl["is_patched"]
  21. user_acl = useracl.get_user_acl(user, cache_versions)
  22. assert "is_patched" not in user_acl
  23. def test_context_manager_patches_all_users_acls_in_test(self):
  24. user = User.objects.create_user("User", "user@example.com")
  25. with patch_user_acl({"can_rename_users": "patched"}):
  26. user_acl = useracl.get_user_acl(user, cache_versions)
  27. assert user_acl["can_rename_users"] == "patched"
  28. def test_context_manager_removes_patches_after_exit(self):
  29. user = User.objects.create_user("User", "user@example.com")
  30. with patch_user_acl({"is_patched": True}):
  31. user_acl = useracl.get_user_acl(user, cache_versions)
  32. assert user_acl["is_patched"]
  33. user_acl = useracl.get_user_acl(user, cache_versions)
  34. assert "is_patched" not in user_acl
  35. @patch_user_acl(callable_acl_patch)
  36. def test_callable_patch_is_called_with_user_and_acl_by_decorator(self):
  37. user = User.objects.create_user("User", "user@example.com")
  38. user_acl = useracl.get_user_acl(user, cache_versions)
  39. assert user_acl["patched_for_user_id"] == user.id
  40. def test_callable_patch_is_called_with_user_and_acl_by_context_manager(self):
  41. user = User.objects.create_user("User", "user@example.com")
  42. with patch_user_acl(callable_acl_patch):
  43. user_acl = useracl.get_user_acl(user, cache_versions)
  44. assert user_acl["patched_for_user_id"] == user.id
  45. @patch_user_acl({"acl_patch": 1})
  46. @patch_user_acl({"acl_patch": 2})
  47. def test_multiple_acl_patches_applied_by_decorator_stack(self):
  48. user = User.objects.create_user("User", "user@example.com")
  49. user_acl = useracl.get_user_acl(user, cache_versions)
  50. assert user_acl["acl_patch"] == 2
  51. def test_multiple_acl_patches_applied_by_context_manager_stack(self):
  52. user = User.objects.create_user("User", "user@example.com")
  53. with patch_user_acl({"acl_patch": 1}):
  54. with patch_user_acl({"acl_patch": 2}):
  55. user_acl = useracl.get_user_acl(user, cache_versions)
  56. assert user_acl["acl_patch"] == 2
  57. user_acl = useracl.get_user_acl(user, cache_versions)
  58. assert user_acl["acl_patch"] == 1
  59. user_acl = useracl.get_user_acl(user, cache_versions)
  60. assert "acl_patch" not in user_acl