"""Test S3 connector.""" from unittest.mock import patch from moto import mock_aws from payment.config import Config from payment.connectors.s3 import ( create_presigned_url, get_object_metadata_by_s3_url, get_s3_client, ) @mock_aws def test_get_s3_client(): """Test getting an S3 client.""" client = get_s3_client() assert client @patch('payment.connectors.s3.get_s3_client') def test_create_presigned_url(mock_client): """Test retrieving a presigned url for the given bucket/key.""" bucket = 'charlie' key = 'golden_ticket' mock_client.generate_presigned_url.return_value = ( 'https://wonka.s3.amazonaws.com/presigned_key' ) res = create_presigned_url(bucket, mock_client, key) assert res == 'https://wonka.s3.amazonaws.com/presigned_key' mock_client.generate_presigned_url.assert_called_once_with( ClientMethod='get_object', ExpiresIn=30, Params={'Bucket': bucket, 'Key': key} ) @patch('payment.connectors.s3.get_s3_client') def test_get_object_metadata_by_s3_url(mock_client): """Test retrieving a object's metadata for the given bucket/key.""" expected_output = {'Metadata': {'original_filename': 'filename.pdf'}} mock_client.return_value.head_object.return_value = expected_output res = get_object_metadata_by_s3_url('s3://some_path/some_file.no_extension') assert res == expected_output mock_client.return_value.head_object.assert_called_once_with( Bucket=Config.S3_PAYMENTS_BUCKET_NAME, Key='some_file.no_extension' )