"""Lambda test module.""" from unittest.mock import call import pytest from src import app from src.constants import service def test_handler_success( mocker, request_engine, mock_event, mock_release_correction_obj ): """Test handler success.""" request_engine[service.OWS_PRODUCT_WORKFLOW].add_spec( 'GET', '/correction', status=200, response=mock_release_correction_obj ) mocker.patch('src.logic.track_role.get_multiple_tracks', return_value={'items': [ {'tuid': 1, 'artists': [{'type': 'performer', 'name': 'a'}, {'type': 'producer', 'name': 'b'}]}, {'tuid': 2, 'artists': []} ]}) mock_update_track_duration = mocker.patch('src.app.event_handling.update_track_duration') mock_update_track = mocker.patch('src.app.event_handling.update_track') expected_update_track_duration_calls = [ call('2', { 'duration_seconds': 10, 'duration_minutes': 1 }, ['2'] ) ] expected_update_track_calls = [ call('1', { 'track_name': 'abc ballad', 'p_info': 'abc', 'artists': [{'type': 'performer', 'name': 'some artist'}], 'writers': [{'type': 'writer', 'name': 'some writer'}] }, list({'1', '2'}) ), call('2', { 'artists': [{'type': 'feature_to_primary', 'name': 'some ftp'}], 'writers': [], }, ['2'] ) ] result = app.handler(mock_event, None) mock_update_track_duration.assert_has_calls(expected_update_track_duration_calls) mock_update_track.assert_has_calls(expected_update_track_calls) assert result == {'status': 'success'} @pytest.mark.parametrize( ( 'test_description', 'mock_ows_response' ), [ ('no revisions found', {'items': []}), ('no eligible track found', {'items': [ { 'table_name': 'track', 'field_name': 'previewstarttime', 'key_id': 1, 'key_value': '' } ]}) ] ) def test_handler_skip( mocker, request_engine, mock_event, test_description, mock_ows_response ): """Test handler skip.""" request_engine[service.OWS_PRODUCT_WORKFLOW].add_spec( 'GET', '/correction', status=200, response=mock_ows_response ) mocker.patch('src.logic.track_role.get_multiple_tracks', return_value={ 'items': [{'tuid': 1, 'artists': []}] }) mock_update_track = mocker.patch('src.app.event_handling.update_track') result = app.handler(mock_event, None) mock_update_track.assert_not_called assert result == {'status': 'skip'} def test_handler_error(mocker, request_engine, mock_event, mock_release_correction_obj): """Test handler error.""" request_engine[service.OWS_PRODUCT_WORKFLOW].add_spec( 'GET', '/correction', status=200, response=mock_release_correction_obj ) mocker.patch('src.logic.track_role.get_multiple_tracks', return_value={'items': [ {'tuid': 1, 'artists': []}, {'tuid': 2, 'artists': []} ]}) request_engine[service.OWS_TRACK].add_spec( 'PATCH', '/track', status=400, response='some_wrong' ) expected_error_msg = ( 'update_track failed for tuid 1\n' 'Status code: 400\n' 'Error: "some_wrong"\n' f'Failed to apply revisions to tracks with tuid {list({"1", "2"})}' ) with pytest.raises(Exception) as excinfo: app.handler(mock_event, None) assert excinfo.value.args[0] == expected_error_msg def test_handler_error_field_name( mocker, request_engine, mock_event, mock_invalid_rc_object ): """Test invalid track correction field.""" request_engine[service.OWS_PRODUCT_WORKFLOW].add_spec( 'GET', '/correction', status=200, response=mock_invalid_rc_object ) mock_update_track = mocker.patch('src.app.event_handling.update_track') expected_error_msg = 'Invalid track correction field_name(s) random123' with pytest.raises(Exception) as excinfo: app.handler(mock_event, None) assert excinfo.value.args[0] == expected_error_msg mock_update_track.assert_not_called()