"""Test get_resources_for_profile endpoint.""" import json from unittest.mock import patch from owsresponse import response from pythonfeatures import pythonfeatures from permissions import handlers # noqa (handlers are imported for test client) from permissions.connectors import redis @patch( 'permissions.handlers.handlers.resource.get_resources_for_profile', return_value=response.Response({'foo': 'bar'}), ) @patch.object( pythonfeatures, 'get_single_feature_by_attributes', return_value=response.Response(message='control'), ) def test_get_resources_for_profile(mock_feature, mock_logic, fixture_client, monkeypatch): """Test get_resources_for_profile for real profile ids.""" url = '/admin/profile-type/artistprofile/profile/264739/resource/all' result = fixture_client.get(url) assert result.status_code == 200 mock_logic.assert_called_once_with('artistprofile', 264739, 'all') json_result = json.loads(result.data.decode('utf-8')) assert 'items' in json_result assert json_result['items'] == {'foo': 'bar'} @patch( 'permissions.handlers.handlers.resource.get_resources_for_profile', return_value=response.Response({'foo': 'bar'}), ) @patch.object( pythonfeatures, 'get_single_feature_by_attributes', return_value=response.Response(message='enabled'), ) def test_get_resources_for_profile_from_cache( mock_feature, mock_logic, fixture_client, monkeypatch ): """Test get_resources_for_profile with caching.""" url = '/admin/profile-type/SettingsProfile/profile/82699/resource/all' redis.delete('resources_for_SettingsProfile_82699_all') result = fixture_client.get(url) assert result.status_code == 200 mock_logic.assert_called_once() first_call_result = json.loads(result.data.decode('utf-8')) mock_logic.reset_mock() result = fixture_client.get(url) assert result.status_code == 200 assert mock_logic.call_count == 0 second_call_result = json.loads(result.data.decode('utf-8')) assert first_call_result == second_call_result @patch( 'permissions.handlers.handlers.resource.get_resources_for_profile', return_value=response.Response( message=[ { 'name': 'Daniel Marmol Martinez (DanimFlow)', 'vendorId': 32677, 'uuid': 'ec67eae4-d159-4ffb-b9ab-d2845aa9c6f8', 'type': 'Vendor', } ] ), ) def test_get_resources_for_profile_distributionprofile(mock_logic, fixture_client): """Test get_resources_for_profile for real profile ids.""" url = '/admin/profile-type/distributionprofile/profile/11001332/resource/all' result = fixture_client.get(url) assert result.status_code == 200 mock_logic.assert_called_once_with('distributionprofile', 11001332, 'all') json_result = json.loads(result.data.decode('utf-8')) assert 'items' in json_result assert json_result['items'] == [ { 'name': 'Daniel Marmol Martinez (DanimFlow)', 'vendorId': 32677, 'uuid': 'ec67eae4-d159-4ffb-b9ab-d2845aa9c6f8', 'type': 'Vendor', } ]