"""Test Utility Functions for Resource Type Actions.""" from typing import Any, Dict import pytest from pdp.constants.constants import AuthEffect from pdp.fastapi.schemas import check_resource_type_actions, identity from pdp.utils.resource_type_actions import ( _build_resource_type_action_results_list, ) @pytest.mark.parametrize( "description, result_dict, check_resource_response, expected_result", [ ( "One CheckResourceActionResult with effect allow returns one allow", { ("test_type", "view"): AuthEffect.AUTH_EFFECT_DENY, }, identity.CheckResourcesResponse( request_id="123", resources=[ identity.CheckResourceActionResult( resource=identity.Resource( resource_id="0", resource_type="test_type", attributes={}, ), action="view", effect=AuthEffect.AUTH_EFFECT_ALLOW, errors={}, ) ], ), [ check_resource_type_actions.CheckResourceTypeActionResult( resource_type="test_type", action="view", effect=AuthEffect.AUTH_EFFECT_ALLOW, ) ], ), ( "Two CheckResourceActionResults with effect allow and deny returns one allow and one deny", # noqa: E501 { ("test_type", "view"): AuthEffect.AUTH_EFFECT_DENY, ("test_type_2", "edit"): AuthEffect.AUTH_EFFECT_DENY, }, identity.CheckResourcesResponse( request_id="123", resources=[ identity.CheckResourceActionResult( resource=identity.Resource( resource_id="0", resource_type="test_type", attributes={}, ), action="view", effect=AuthEffect.AUTH_EFFECT_ALLOW, errors={}, ), identity.CheckResourceActionResult( resource=identity.Resource( resource_id="0", resource_type="test_type_2", attributes={}, ), action="edit", effect=AuthEffect.AUTH_EFFECT_DENY, errors={}, ), ], ), [ check_resource_type_actions.CheckResourceTypeActionResult( resource_type="test_type", action="view", effect=AuthEffect.AUTH_EFFECT_ALLOW, ), check_resource_type_actions.CheckResourceTypeActionResult( resource_type="test_type_2", action="edit", effect=AuthEffect.AUTH_EFFECT_DENY, ), ], ), ( "CheckResourceActionResult that does now match any resource_type_actions should not give any allows", # noqa: E501 { ("test_type", "view"): AuthEffect.AUTH_EFFECT_DENY, }, identity.CheckResourcesResponse( request_id="123", resources=[ identity.CheckResourceActionResult( resource=identity.Resource( resource_id="0", resource_type="test_type", attributes={}, ), action="not-the-same-action", effect=AuthEffect.AUTH_EFFECT_ALLOW, errors={}, ), ], ), [ check_resource_type_actions.CheckResourceTypeActionResult( resource_type="test_type", action="view", effect=AuthEffect.AUTH_EFFECT_DENY, ) ], ), ], ) def test_build_resource_type_action_results_list( description: str, result_dict: Dict[Any, Any], check_resource_response: identity.CheckResourcesResponse, expected_result: list[check_resource_type_actions.CheckResourceTypeActionResult], ) -> None: """Test _build_resource_type_action_results_list.""" result = _build_resource_type_action_results_list( result_dict, check_resource_response ) assert result == expected_result, description