"""Lambda test module.""" import importlib from unittest.mock import patch from unittest import mock import pytest from src import app as index from src.constants import delivery_event kafka_message_keys = [ 'event_type', 'execution_type', 'message', 'service', 'sound_recording_id', 'sound_recording_version', 'step_function_execution_id', 'timestamp'] def test_format_kafka_message_start( mock_delivery_event, ): """Test _format_kafka_message function.""" result = index._format_kafka_message(mock_delivery_event) result_list = list(result) result_list.sort() assert result_list == kafka_message_keys assert result['service'] == delivery_event.SERVICE_TIKTOK assert result['message'] == {'details': None, 'status': 'ok'} assert result['event_type'] == 'start' def test_format_kafka_message_success_details( mock_delivery_event, ): """Test _format_kafka_message function.""" mock_delivery_event['event_type'] = 'success' mock_delivery_event['details'] = {'batch_id': 'batch-123'} result = index._format_kafka_message(mock_delivery_event) result_list = list(result) result_list.sort() assert result_list == kafka_message_keys assert result['service'] == delivery_event.SERVICE_TIKTOK assert result['message'] == { 'details': { 'batch_id': 'batch-123' }, 'status': 'ok' } assert result['event_type'] == 'success' def test_format_kafka_message_success_no_details( mock_delivery_event, ): """Test _format_kafka_message function.""" mock_delivery_event['event_type'] = 'success' result = index._format_kafka_message(mock_delivery_event) result_list = list(result) result_list.sort() assert result_list == kafka_message_keys assert result['service'] == delivery_event.SERVICE_TIKTOK assert result['message'] == {'details': None, 'status': 'ok'} assert result['event_type'] == 'success' def test_format_kafka_message_failure( mock_delivery_event, ): """Test _format_kafka_message function.""" mock_delivery_event['event_type'] = 'failure' mock_delivery_event['error'] = { 'Error': 'Lambda.AWSLambdaException', 'Cause': 'something bad'} result = index._format_kafka_message(mock_delivery_event) result_list = list(result) result_list.sort() assert result_list == kafka_message_keys assert result['service'] == delivery_event.SERVICE_TIKTOK assert result['message'] == { 'status': 'error', 'details': { 'Error': 'Lambda.AWSLambdaException', 'Cause': 'something bad' } } assert result['event_type'] == 'failure' @patch('src.common.connectors.kafka_producer.produce_message') def test_handler( mock_kafka_producer, mock_delivery_event ): """Test handler function.""" result = index.handler(mock_delivery_event, None) mock_kafka_producer.assert_called() assert result == mock_delivery_event @patch('config.secrets_manager_client') @patch('sentry_sdk.init') def test_handler_init_empty_sentry(mock_sentry, mock_secrets): """Test sentry init with 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(index) assert not mock_sentry.called def test_handler_exception(mock_delivery_event): """Test handler function exception.""" del mock_delivery_event['sound_recording'] with pytest.raises(KeyError): index.handler(mock_delivery_event, None) @patch('config.secrets_manager_client') @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(index) assert not mock_sentry.called @patch('config.secrets_manager_client') @patch('sentry_sdk.init') def test_handler_init_sentry(mock_sentry, mock_secrets): """Test sentry init with dsn.""" 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(index) assert mock_sentry.called assert mock_secrets.get_cred.call_args_list == [mock.call('SENTRY_DSN')] def test_use_supplied_delivery_type( mock_delivery_event_with_type): """Test _format_kafka_message function.""" result = index._determine_execution_type(mock_delivery_event_with_type) assert result == 'FULL_DELIVERY'