"""Tests for ows-permissions service.""" from unittest.mock import MagicMock import pytest from flexmock import flexmock from analytics.constants import service as service_constants from analytics.services import ows_permissions, request class TestOWSPermissionsGetArtistInfoResourcesResponse: """Test call to ows-permissions for artist info resources.""" profile_id = "1346777" profile_type = "ArtistProfile" response = { "items": [ { "type": ows_permissions.ARTIST_INFO_RESOURCE_TYPE, "name": "BTS in Bighit Entertainment", "id": 917636, "roles": ["analytics"], }, { "type": ows_permissions.ARTIST_INFO_RESOURCE_TYPE, "name": "BTS in Bighit Soundtrack", "id": 1552280, "roles": ["analytics"], }, ] } @pytest.fixture def mock_response(self): """Return mock response of ows-permissions.""" mock_response = MagicMock(status_code=200) mock_response.json = MagicMock(return_value=self.response) return mock_response @pytest.fixture def mock_request(self, mock_response): """Mock GET request.""" flexmock(request).should_receive("get").with_args( service_constants.OWS_PERMISSIONS, service_constants.OWS_PERMISSIONS_PROFILE_RESOURCE.format( profile_id=self.profile_id, profile_type=self.profile_type, resource=ows_permissions.ARTIST_INFO_RESOURCE_TYPE, ), ).and_return(mock_response) @pytest.fixture def mock_failure_response(self): """Return mock failure response of ows-permissions.""" mock_response = MagicMock(status_code=500) return mock_response @pytest.fixture def mock_failure_request(self, mock_failure_response): """Mock failure GET request.""" flexmock(request).should_receive("get").with_args( service_constants.OWS_PERMISSIONS, service_constants.OWS_PERMISSIONS_PROFILE_RESOURCE.format( profile_id=self.profile_id, profile_type=self.profile_type, resource=ows_permissions.ARTIST_INFO_RESOURCE_TYPE, ), ).and_return(mock_failure_response) def test_success(self, mock_request): """Test 200 response is returned.""" result = ows_permissions.get_artist_info_resources( self.profile_type, self.profile_id ) assert result.message == self.response def test_failure(self, mock_failure_request): """Test 500 response is returned.""" result = ows_permissions.get_artist_info_resources( self.profile_type, self.profile_id ) assert result.status == 500 class TestOWSPermissionsGetLabelResourcesResponse: """Test call to ows-permissions for label resources.""" profile_id = "1346777" profile_type = "LabelProfile" vendor_response = { "items": [{"type": ows_permissions.VENDOR_RESOURCE_TYPE, "id": 123}] } subaccount_response = { "items": [ { "type": ows_permissions.SUBACCOUNT_RESOURCE_TYPE, "id": 456, "vendor_id": 123, } ] } @pytest.fixture def mock_vendor_response(self): """Return mock response of ows-permissions.""" mock_response = MagicMock(status_code=200) mock_response.json = MagicMock(return_value=self.vendor_response) return mock_response @pytest.fixture def mock_subaccount_response(self): """Return mock response of ows-permissions.""" mock_response = MagicMock(status_code=200) mock_response.json = MagicMock(return_value=self.subaccount_response) return mock_response @pytest.fixture def mock_vendor_request(self, mock_vendor_response): """Mock GET request.""" flexmock(request).should_receive("get").with_args( service_constants.OWS_PERMISSIONS, service_constants.OWS_PERMISSIONS_PROFILE_RESOURCE.format( profile_id=self.profile_id, profile_type=self.profile_type, resource=ows_permissions.LABEL_RESOURCE, ), ).and_return(mock_vendor_response) @pytest.fixture def mock_subaccount_request(self, mock_subaccount_response): """Mock GET request.""" flexmock(request).should_receive("get").with_args( service_constants.OWS_PERMISSIONS, service_constants.OWS_PERMISSIONS_PROFILE_RESOURCE.format( profile_id=self.profile_id, profile_type=self.profile_type, resource=ows_permissions.LABEL_RESOURCE, ), ).and_return(mock_subaccount_response) @pytest.fixture def mock_failure_response(self): """Return mock failure response of ows-permissions.""" mock_response = MagicMock(status_code=500) return mock_response @pytest.fixture def mock_failure_request(self, mock_failure_response): """Mock failure GET request.""" flexmock(request).should_receive("get").with_args( service_constants.OWS_PERMISSIONS, service_constants.OWS_PERMISSIONS_PROFILE_RESOURCE.format( profile_id=self.profile_id, profile_type=self.profile_type, resource=ows_permissions.LABEL_RESOURCE, ), ).and_return(mock_failure_response) def test_vendor_success(self, mock_vendor_request): """Test 200 response is returned.""" result = ows_permissions.get_label_resources(self.profile_type, self.profile_id) assert result.message == self.vendor_response def test_subaccount_success(self, mock_subaccount_request): """Test 200 response is returned.""" result = ows_permissions.get_label_resources(self.profile_type, self.profile_id) assert result.message == self.subaccount_response def test_failure(self, mock_failure_request): """Test 500 response is returned.""" result = ows_permissions.get_label_resources(self.profile_type, self.profile_id) assert result.status == 500