"""S3 module unit tests.""" from unittest.mock import patch import botocore import pytest from lambdacommon.aws import s3 @patch('lambdacommon.aws.s3.client') def test_put_object(boto3_client_mock): """Test put_object function.""" test_bucket = 'bucket' test_key = 'key' test_data = 'data' # test function call s3.put_object(test_bucket, test_key, test_data) # checking boto3_client_mock.put_object.assert_called_once_with( Bucket=test_bucket, Key=test_key, Body=test_data) @patch('lambdacommon.aws.s3.client') def test_get_object(boto3_client_mock): """Test get_object function.""" test_bucket = 'bucket' test_key = 'key' # test function call s3.get_object(test_bucket, test_key) # checking boto3_client_mock.get_object.assert_called_once_with( Bucket=test_bucket, Key=test_key) @patch('lambdacommon.aws.s3.client') def test_head_object(boto3_client_mock): """Test head_object function.""" test_bucket = 'bucket' test_key = 'key' # test function call s3.head_object(test_bucket, test_key) # checking boto3_client_mock.head_object.assert_called_once_with( Bucket=test_bucket, Key=test_key) @patch('lambdacommon.aws.s3.client') def test_key_exists_positive(boto3_client_mock): """Test key_exists function.""" # mocking test_bucket = 'bucket' test_key = 'key' # test function call result = s3.object_exists(test_bucket, test_key) # checking boto3_client_mock.head_object.assert_called_once_with( Bucket=test_bucket, Key=test_key) assert result @patch('lambdacommon.aws.s3.client') def test_key_exists_not_exist(boto3_client_mock): """Test key_exists function.""" # mocking test_bucket = 'bucket' test_key = 'key' error = {'Error': {'Code': '404'}} boto3_client_mock.head_object.side_effect = ( botocore.exceptions.ClientError(error, 'foo')) # test function call result = s3.object_exists(test_bucket, test_key) # checking boto3_client_mock.head_object.assert_called_once_with( Bucket=test_bucket, Key=test_key) assert not result @patch('lambdacommon.aws.s3.client') def test_key_exists_internal_error(boto3_client_mock): """Test key_exists function.""" # mocking test_bucket = 'bucket' test_key = 'key' error = {'Error': {'Code': '500'}} boto3_client_mock.head_object.side_effect = ( botocore.exceptions.ClientError(error, 'foo')) # test function call with pytest.raises(botocore.exceptions.ClientError): s3.object_exists(test_bucket, test_key) boto3_client_mock.head_object.assert_called_once_with( Bucket=test_bucket, Key=test_key) @patch('lambdacommon.aws.s3.client') def test_upload_file_to_s3(boto3_client_mock): """Test upload_file_to_s3 function.""" test_bucket = 'bucket' test_key = 'key' test_filename = 'test_file' s3.upload_file_to_s3( bucket=test_bucket, filename=test_filename, key=test_key )