def test_permission_dependency_factory_wraps_callable_resource(mocker): mocker.patch("fastapi_permissions.Depends") from fastapi_permissions import Depends, permission_dependency_factory permission_dependency_factory( "view", dummy_resource_callable, "active_principals_func", "permisssion_exception", ) assert Depends.call_count == 2 assert Depends.call_args_list[0] == mocker.call(dummy_resource_callable)
def test_permission_dependency_raises_exception(mocker): """ If a user dosen't have a permission, a exception should be raised """ mocker.patch("fastapi_permissions.has_permission", return_value=False) mocker.patch("fastapi_permissions.Depends") from fastapi import HTTPException from fastapi_permissions import ( Depends, permission_exception, permission_dependency_factory, ) # since the resulting permission function is wrapped in Depends() # we need to extract it from the mock permission_func = permission_dependency_factory( "view", dummy_resource_callable, "active_principals_func", permission_exception, ) assert Depends.call_count == 2 args, kwargs = Depends.call_args_list[1] permission_func = args[0] with pytest.raises(HTTPException): permission_func()
def test_permission_dependency_returns_requested_resource(mocker): """ If a user has a permission, the resource should be returned """ mocker.patch("fastapi_permissions.has_permission", return_value=True) mocker.patch("fastapi_permissions.Depends") from fastapi_permissions import Depends, permission_dependency_factory # since the resulting permission function is wrapped in Depends() # we need to extract it from the mock permission_dependency_factory( "view", dummy_resource_callable, "active_principals_func", "permisssion_exception", ) assert Depends.call_count == 2 args, kwargs = Depends.call_args_list[1] permission_func = args[0] result = permission_func() assert result == Depends(dummy_resource_callable)
def test_permission_dependency_factory_returns_correct_signature(mocker): mocker.patch("fastapi_permissions.Depends") from fastapi_permissions import Depends, permission_dependency_factory permission_func = permission_dependency_factory( "view", dummy_resource_callable, "active_principals_func", "permisssion_exception", ) assert Depends.call_count == 2 args, kwargs = Depends.call_args_list[1] permission_func = args[0] assert callable(permission_func) parameters = inspect.signature(permission_func).parameters print(parameters) assert len(parameters) == 2 assert parameters["resource"].default == Depends(dummy_resource_callable) assert parameters["principals"].default == "active_principals_func"