"""Tests for the S3 connector.""" from unittest.mock import MagicMock from botocore.exceptions import ClientError from flexmock import flexmock from deliveryhistory.connectors import s3 def _client_error(): return ClientError( {'Error': {'Code': 'NoSuchKey', 'Message': 'Not Found'}}, 'GetObject') def test_get_object_body_returns_content(): """Verify get_object_body returns the S3 object body on success.""" mock_client = MagicMock() mock_client.get_object.return_value = { 'Body': MagicMock(read=MagicMock(return_value=b'xml content')) } flexmock(s3).should_receive('get_s3_client').and_return(mock_client) result = s3.get_object_body('my-bucket', 'my-key') assert result == b'xml content' mock_client.get_object.assert_called_once_with( Bucket='my-bucket', Key='my-key') def test_get_object_body_returns_none_on_missing_file(): """Verify get_object_body returns None when the S3 object does not exist.""" mock_client = MagicMock() mock_client.get_object.side_effect = _client_error() flexmock(s3).should_receive('get_s3_client').and_return(mock_client) result = s3.get_object_body('my-bucket', 'missing-key') assert result is None