"""Tests for artist search logic.""" from unittest.mock import MagicMock from unittest.mock import patch from oto import status import pytest from social_analytics.logic import artist_search @pytest.fixture def params(): """Fixture for artist search params.""" return { 'context': 'test', 'token': 'test', 'term': 'test', 'label_id': 123 } @pytest.fixture def headers(): """Fixture for artist search headers.""" return { 'Grass-Account-Type': 'vendor', 'Grass-Account-Id': 1 } @pytest.fixture def search_artist_response(): """Fixture for ows-search artist response.""" return { 'isError': False, 'results': { 'artist_824587': { 'artist_name': 'Test artist 1', 'artist_id': '1', 'highlight_fields': { 'artist_name': 'A Test' } }, 'artist_663409': { 'artist_name': 'Test artist 2', 'artist_id': '2', 'highlight_fields': { 'artist_name': 'Another test' } } } } @pytest.fixture def search_artist_error_response(): """Fixture for ows-search artist error response.""" return { 'searchTerm': 'a', 'results': [], 'isError': True } @pytest.fixture def search_artist_not_found_response(): """Fixture for ows-search artist not found.""" return { 'searchTerm': 'aadfasdfasdf', 'results': [], 'isError': False } @patch('social_analytics.logic.artist_search.requests') def test_search_artist_no_results(search_request_mock, params, headers): """Test search artist no results.""" expected_result = {'isError': False, 'results': []} get_mock = MagicMock() get_mock.json.return_value = expected_result search_request_mock.get.return_value = get_mock # tested function call result = artist_search.search_artist(params, headers) # checks assert not result assert result.status == status.NOT_FOUND @patch('social_analytics.logic.artist_search.requests') def test_search_artist( search_request_mock, params, headers, search_artist_response): """Test search artist no results.""" get_mock = MagicMock() get_mock.json.return_value = search_artist_response search_request_mock.get.return_value = get_mock # tested function call result = artist_search.search_artist(params, headers) # checks assert result required_fields = ['artist_name', 'artist_id', 'highlight_fields'] for item in result.message['items']: assert all(key in item for key in required_fields) @patch('social_analytics.logic.artist_search.requests') def test_search_artist_error( search_request_mock, params, headers, search_artist_error_response): """Test for search artist error.""" get_mock = MagicMock() get_mock.json.return_value = search_artist_error_response search_request_mock.get.return_value = get_mock # tested function call result = artist_search.search_artist(params, headers) # checks assert not result assert result.status == status.INTERNAL_ERROR @patch('social_analytics.logic.artist_search.requests') def test_search_artist_not_found( search_request_mock, params, headers, search_artist_not_found_response): """Test for search artist error.""" get_mock = MagicMock() get_mock.json.return_value = search_artist_not_found_response search_request_mock.get.return_value = get_mock # tested function call result = artist_search.search_artist(params, headers) # checks assert not result assert result.status == status.NOT_FOUND