"""Lambda test module.""" import pytest from unittest.mock import MagicMock from unittest.mock import patch from lambdacommon.graphql.graphql import GraphQLError from constants import queries from src import app as index from src.spotify_parser import ParsingError @patch('config.app_logger') @patch('config.graphql_gateway.set_headers') @patch('config.graphql_gateway.execute') @patch('src.app.spotify_parser.get_artist_name') def test_handler( mock_get_artist_name, mock_graphql_execute, mock_graphql_set_headers, mock_current_logger ): """Test handler function.""" mock_logger = MagicMock(name='info') mock_current_logger.return_value = mock_logger test_artist_name = 'Test Artist' mock_event = { 'vendor_id': 123, 'vendor_name': 'TestVendor', 'spotify_url': 'url' } mutation_result = { 'data': { 'createLabelParticipant': { 'name': test_artist_name, 'uuid': '12345abcde' } } } mock_get_artist_name.return_value = test_artist_name mock_graphql_execute.return_value = mutation_result result = index.handler(mock_event, None) assert result == mutation_result['data']['createLabelParticipant'] assert mock_graphql_set_headers.called mock_graphql_execute.assert_called_with( queries.create_label_participant, {'labelParticipant': {'name': test_artist_name}, 'vendorId': 123}) @patch('config.app_logger') @patch('config.graphql_gateway.execute') @patch('src.app.spotify_parser.get_artist_name') def test_handler_with_empty_spotify_url( mock_get_artist_name, mock_graphql_execute, mock_current_logger ): """Test handler function with spotify_url.""" mock_logger = MagicMock(name='info') mock_current_logger.return_value = mock_logger mock_event = { 'vendor_id': 123, 'vendor_name': 'TestVendor', } result = index.handler(mock_event, None) assert result == {} mock_get_artist_name.assert_not_called() mock_graphql_execute.assert_not_called() def test_handler_failure__get_artist_name_error(): """Test handler failure [get_artist_name error].""" mock_event = { 'vendor_id': 123, 'vendor_name': 'TestVendor', 'spotify_url': 'url' } error = ParsingError() expected_error = ParsingError() spotify_url = 'url' with patch('src.app.spotify_parser') as spotify_mock: spotify_mock.get_artist_name.side_effect = error with pytest.raises(type(expected_error)): index.handler(mock_event, {'spotify_url': spotify_url}) @patch('src.app.spotify_parser.get_artist_name') def test_handler_failure__create_label_participant_error(mock_get_artist_name): """Test handler failure [create_label_participant error].""" mock_event = { 'vendor_id': 123, 'vendor_name': 'TestVendor', 'spotify_url': 'url' } error = GraphQLError([{'message': 'Test GraphQL Error'}]) expected_error = GraphQLError([{'message': 'Test GraphQL Error'}]) spotify_url = 'url' mock_get_artist_name.return_value = 'test_name' with patch('config.graphql_gateway.execute') as graphql_gateway_mock: graphql_gateway_mock.side_effect = error with pytest.raises(type(expected_error)): index.handler(mock_event, {'spotify_url': spotify_url})