"""Test handler.""" from unittest.mock import MagicMock from unittest.mock import patch import pytest from src import index @patch('src.index.log_catalog_session') @patch('src.index.uuid.uuid4') @patch('src.index.boto3.client') @patch('src.index.config.get_current_logger') def test_handler(mock_logger, mock_boto3_client, mock_uuid, mock_catalog_save, test_fileobj): """Test the main handler.""" mock_event = { 'bucket': 'bucket-name', 'key': 'prefix/bulk_asset_data.json', } mock_uuid.return_value = 'test1234' mock_s3_client = MagicMock(name='get_object') mock_fileobject = MagicMock(name='read') mock_fileobject.read.return_value = test_fileobj mock_s3_client.get_object.return_value = { 'Body': mock_fileobject } mock_boto3_client.return_value = mock_s3_client response = index.handler(mock_event, None) mock_s3_client.get_object.assert_called_with( Bucket=mock_event.get('bucket'), Key=mock_event.get('key') ) assert response == { 'key': 'prefix/bulk_asset_data.json', 'bucket': 'bucket-name', 'items': [0, 1], 'execution_name': None, 'state_machine_name': None, 'correlation_id': 'test1234' } mock_catalog_save.assert_called_once() @patch('src.index.log_catalog_session') @patch('src.index.uuid.uuid4') @patch('src.index.boto3.client') @patch('src.index.config.get_current_logger') def test_handler_with_exception(mock_logger, mock_boto3_client, mock_uuid, mock_catalog_session, test_fileobj): """Test the main handler.""" mock_event = { 'bucket': 'bucket-name', 'key': 'prefix/bulk_asset_data.json', } mock_uuid.return_value = 'test1234' mock_s3_client = MagicMock(name='get_object') mock_s3_client.get_object.side_effect = Exception('mocked error') mock_boto3_client.return_value = mock_s3_client mock_log_error = MagicMock(name='error') mock_logger.return_value = mock_log_error with pytest.raises(Exception): index.handler(mock_event, None) mock_log_error.error.assert_called_once() mock_catalog_session.assert_called_once()