funkwhale/api/tests/users/test_permissions.py

93 wiersze
2.8 KiB
Python
Czysty Zwykły widok Historia

import pytest
from rest_framework.views import APIView
from funkwhale_api.users import permissions
def test_has_user_permission_no_user(api_request):
view = APIView.as_view()
permission = permissions.HasUserPermission()
2018-06-09 13:36:16 +00:00
request = api_request.get("/")
assert permission.has_permission(request, view) is False
def test_has_user_permission_anonymous(anonymous_user, api_request):
view = APIView.as_view()
permission = permissions.HasUserPermission()
2018-06-09 13:36:16 +00:00
request = api_request.get("/")
setattr(request, "user", anonymous_user)
assert permission.has_permission(request, view) is False
2018-06-09 13:36:16 +00:00
@pytest.mark.parametrize("value", [True, False])
def test_has_user_permission_logged_in_single(value, factories, api_request):
2018-06-09 13:36:16 +00:00
user = factories["users.User"](permission_federation=value)
class View(APIView):
2018-06-09 13:36:16 +00:00
required_permissions = ["federation"]
view = View()
permission = permissions.HasUserPermission()
2018-06-09 13:36:16 +00:00
request = api_request.get("/")
setattr(request, "user", user)
result = permission.has_permission(request, view)
2018-06-09 13:36:16 +00:00
assert result == user.has_permissions("federation") == value
2018-06-09 13:36:16 +00:00
@pytest.mark.parametrize(
"federation,library,expected",
[
(True, False, False),
(False, True, False),
(False, False, False),
(True, True, True),
],
)
def test_has_user_permission_logged_in_multiple_and(
2018-06-09 13:36:16 +00:00
federation, library, expected, factories, api_request
):
user = factories["users.User"](
permission_federation=federation, permission_library=library
)
class View(APIView):
2018-06-09 13:36:16 +00:00
required_permissions = ["federation", "library"]
permission_operator = "and"
view = View()
permission = permissions.HasUserPermission()
2018-06-09 13:36:16 +00:00
request = api_request.get("/")
setattr(request, "user", user)
result = permission.has_permission(request, view)
2018-06-09 13:36:16 +00:00
assert result == user.has_permissions("federation", "library") == expected
2018-06-09 13:36:16 +00:00
@pytest.mark.parametrize(
"federation,library,expected",
[
(True, False, True),
(False, True, True),
(False, False, False),
(True, True, True),
],
)
def test_has_user_permission_logged_in_multiple_or(
2018-06-09 13:36:16 +00:00
federation, library, expected, factories, api_request
):
user = factories["users.User"](
permission_federation=federation, permission_library=library
)
class View(APIView):
2018-06-09 13:36:16 +00:00
required_permissions = ["federation", "library"]
permission_operator = "or"
view = View()
permission = permissions.HasUserPermission()
2018-06-09 13:36:16 +00:00
request = api_request.get("/")
setattr(request, "user", user)
result = permission.has_permission(request, view)
has_permission_result = user.has_permissions("federation", "library", operator="or")
assert result == has_permission_result == expected