test_patching_user_acl.py 3.3 KB

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