"""Test delete_resource_to_profile endpoint.""" import json from unittest.mock import patch import pytest from owsresponse import response from permissions import handlers # noqa (handlers are imported for test client) from permissions.constants import constants @pytest.mark.parametrize( ( 'profile_type', 'profile_id', 'resource_type', 'resource_id', 'status_code', 'expected', 'expected_args', ), [ # all valid values ( 'ArtistProfile', '2582459', 'ArtistInfo', '29245', 200, {'foo': 'bar'}, { 'profile_id': 2582459, 'profile_type': 'ArtistProfile', 'resource_id': 29245, 'resource_type': 'ArtistInfo', }, ), ( 'InsightsProfile', '1234', 'Vendor', '*', 200, {'foo': 'bar'}, { 'profile_id': 1234, 'profile_type': 'InsightsProfile', 'resource_id': '*', 'resource_type': 'Vendor', }, ), # invalid profile or resource types. ( 'artistprofile', '2582459', 'ArtistInfo', '29245', 400, { 'code': 'validation_error', 'message': { 'profile_type': [f'Must be one of: {", ".join(constants.PROFILE_TYPES)}.'] }, # noqa }, None, ), ( 'dummyprofile', '2582459', 'ArtistInfo', '29245', 400, { 'code': 'validation_error', 'message': { 'profile_type': [f'Must be one of: {", ".join(constants.PROFILE_TYPES)}.'] }, # noqa }, None, ), ( 'ArtistProfile', '2582459', 'dummy', '29245', 400, { 'code': 'validation_error', 'message': { 'resource_type': [ 'Must be one of: ArtistInfo, Vendor, Subaccount, Label, SubAccount, LabelParticipant, Collaborator.' ] }, # noqa }, None, ), ( 'newProfile', '2582459', 'newResource', '29245', 400, { 'code': 'validation_error', 'message': { 'profile_type': [f'Must be one of: {", ".join(constants.PROFILE_TYPES)}.'], # noqa 'resource_type': [ 'Must be one of: ArtistInfo, Vendor, Subaccount, Label, SubAccount, LabelParticipant, Collaborator.' ], # noqa }, }, None, ), # invalid profile or resource id values will be blocked by flask. ('ArtistProfile', 'foo', 'ArtistInfo', '', 404, None, None), ], ) @patch( 'permissions.handlers.handlers.resource.delete_resource_to_profile', return_value=response.Response({'foo': 'bar'}), ) def test_add_resource_to_profile_validations( mock_logic, fixture_client, profile_type, profile_id, resource_type, resource_id, status_code, expected, expected_args, ): """Test add_resource_to_profile validations.""" url = f'/ows/profile/{profile_type}/{profile_id}/has-access-to/resource/{resource_type}/{resource_id}' # noqa result = fixture_client.delete(url, json={}, headers={'Content-Type': 'application/json'}) assert result.status_code == status_code if status_code != 404: json_result = json.loads(result.data.decode('utf-8')) assert json_result == expected if status_code == 200: mock_logic.assert_called_once_with(expected_args) else: mock_logic.assert_not_called()