test.py 978 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. from functools import wraps
  2. from unittest.mock import patch
  3. from .useracl import get_user_acl
  4. __all__ = ["patch_user_acl"]
  5. class PatchUserACL:
  6. def patch_user_acl(self, user, patch):
  7. self.patches[user.id] = patch
  8. def patched_get_user_acl(self, user, cache_versions):
  9. user_acl = get_user_acl(user, cache_versions)
  10. user_acl.update(self.patches.get(user.id, {}))
  11. return user_acl
  12. def __enter__(self):
  13. self.patches = {}
  14. def __exit__(self, *_):
  15. self.patches = {}
  16. def __call__(self, f):
  17. @wraps(f)
  18. def inner(*args, **kwargs):
  19. with self as context:
  20. with patch(
  21. "misago.acl.useracl.get_user_acl",
  22. side_effect=self.patched_get_user_acl,
  23. ):
  24. new_args = args + (self.patch_user_acl,)
  25. return f(*new_args, **kwargs)
  26. return inner
  27. patch_user_acl = PatchUserACL()