"""Lambda test module.""" import importlib from unittest import mock import pytest from src import app @mock.patch('src.connectors.ows_sound_recordings.post_sound_recording') def test_handler_input_track_ids(mock_ows): """Test track ids direct input.""" test_event = { 'track_ids': ['123'] } context = {} mock_ows.return_value = 'e8a4cb88-8303-486c-8caf-e04670e4e49b' result = app.handler(test_event, context) mock_ows.assert_called_once_with(123) assert result == { 'sound_recording_ids': ['e8a4cb88-8303-486c-8caf-e04670e4e49b'] } @mock.patch('src.connectors.ows_sound_recordings.post_sound_recording') def test_handler_input_empty_track_ids(mock_ows): """Test empty track id list.""" test_event = { 'track_ids': [] } context = {} app.handler(test_event, context) assert not mock_ows.called @mock.patch('src.connectors.ows_sound_recordings.post_sound_recording') def test_handler_input_track(mock_ows): """Test track event.""" test_event = { 'label': 'Track', 'id': 123 } mock_ows.return_value = 'e8a4cb88-8303-486c-8caf-e04670e4e49b' result = app.handler(test_event, {}) mock_ows.assert_called_once_with(123) assert result == { 'sound_recording_ids': [ 'e8a4cb88-8303-486c-8caf-e04670e4e49b' ] } @mock.patch('src.app.logger') @mock.patch('sentry_sdk.init') @mock.patch('src.connectors.ows_sound_recordings.post_sound_recording') def test_handler_input_track_not_ready(mock_ows, mock_sentry, mock_logger): """Test track event.""" test_event = { 'label': 'Track', 'id': 123 } mock_ows.return_value = None assert not mock_sentry.called app.handler(test_event, {}) assert not mock_logger.exception.called @mock.patch('src.app.logger') def test_handler_bad_input(mock_logger): """Test other event.""" test_event = { 'label': 'Vendor', 'id': 123 } with pytest.raises(Exception) as exc: app.handler(test_event, {}) assert str(exc.value) == 'Unrecognized event' assert mock_logger.exception.called @mock.patch('sentry_sdk.integrations.aws_lambda.AwsLambdaIntegration') @mock.patch('config.secrets_manager_client') @mock.patch('sentry_sdk.init') def test_handler_init(mock_sentry, mock_secrets, mock_aws_integration): """Test expected init.""" mock_secret_values = { 'SENTRY_DSN': 'fake-dsn' } mock_secrets.get_cred.side_effect = lambda x: mock_secret_values[x] assert not mock_sentry.called importlib.reload(app) mock_sentry.assert_called_once_with('fake-dsn', integrations=[mock_aws_integration.return_value]) # noqa:E501 mock_secrets.get_cred.assert_called_once_with('SENTRY_DSN') @mock.patch('config.secrets_manager_client') @mock.patch('sentry_sdk.init') def test_handler_init_empty_sentry(mock_sentry, mock_secrets): """Test sentry init with empty dsn.""" mock_secret_values = { 'SENTRY_DSN': '' } mock_secrets.get_cred.side_effect = lambda x: mock_secret_values[x] assert not mock_sentry.called importlib.reload(app) assert not mock_sentry.called @mock.patch('config.secrets_manager_client') @mock.patch('sentry_sdk.init') def test_handler_init_none_sentry(mock_sentry, mock_secrets): """Test sentry init with dsn.""" mock_secret_values = { 'SENTRY_DSN': None } mock_secrets.get_cred.side_effect = lambda x: mock_secret_values[x] assert not mock_sentry.called importlib.reload(app) assert not mock_sentry.called