"""Tests for s3.""" from unittest.mock import MagicMock import config from json_contract_file_import.connectors import s3 from json_contract_file_import.connectors.s3 import copy_key from json_contract_file_import.connectors.s3 import create_object from json_contract_file_import.connectors.s3 import delete_key from json_contract_file_import.connectors.s3 import get_object from json_contract_file_import.connectors.s3 import get_object_versions from json_contract_file_import.connectors.s3 import list_objects_metadata def test_get_object(): """Test download file.""" bucket_name = 'bucket_name' file_path = 'file_path' mock_s3_client = MagicMock() mock_object_response = MagicMock() mock_s3_client.get_object.return_value = mock_object_response s3.s3_client = mock_s3_client get_object_result = get_object(bucket_name, file_path) assert get_object_result == mock_object_response mock_s3_client.get_object.assert_called_once_with( Bucket=bucket_name, Key=file_path, ExpectedBucketOwner=config.S3_ACCOUNT_ID, ) def test_get_object_versions(): """Test get object versions.""" bucket_name = 'bucket_name' file_path = 'file_path' mock_s3_client = MagicMock() mock_object_response = MagicMock() mock_s3_client.list_object_versions.return_value = mock_object_response s3.s3_client = mock_s3_client get_object_result = get_object_versions(bucket_name, file_path) assert get_object_result == mock_object_response mock_s3_client.list_object_versions.assert_called_once_with( Bucket=bucket_name, Prefix=file_path, ExpectedBucketOwner=config.S3_ACCOUNT_ID, ) def test_list_objects_metadata(mock_s3_response): """Test list objects.""" bucket_name = 'bucket_name' prefix = '' mock_s3_client = MagicMock() s3.s3_client = mock_s3_client mock_s3_client.list_objects_v2.return_value = mock_s3_response objects_from_s3 = list_objects_metadata(bucket_name, prefix) assert mock_s3_response == objects_from_s3 mock_s3_client.list_objects_v2.assert_called_once_with( Bucket=bucket_name, Prefix=prefix, Delimiter='/', ExpectedBucketOwner=config.S3_ACCOUNT_ID, ) def test_copy_key(): """Test copy key.""" bucket_name = 'bucket_name' source_key = 'source.json' destination_key = 'destination.json' mock_s3_client = MagicMock() s3.s3_client = mock_s3_client copy_key(bucket_name, source_key, destination_key) mock_s3_client.copy_object.assert_called_once_with( Bucket=bucket_name, Key=destination_key, CopySource={ 'Bucket': bucket_name, 'Key': source_key }, ExpectedBucketOwner=config.S3_ACCOUNT_ID, ) def test_delete_key(): """Test delete key.""" bucket_name = 'bucket_name' key = 'key_to_delete.json' mock_s3_client = MagicMock() s3.s3_client = mock_s3_client delete_key(bucket_name, key) mock_s3_client.delete_object.assert_called_once_with( Bucket=bucket_name, Key=key, ExpectedBucketOwner=config.S3_ACCOUNT_ID, ) def test_create_object(): """Test create object.""" bucket_name = 'bucket_name' key = 'file_key_to_upload.json' content = 'content' mock_s3_client = MagicMock() s3.s3_client = mock_s3_client create_object(bucket_name, key, content) mock_s3_client.put_object.assert_called_once_with( Bucket=bucket_name, Body=content, Key=key, ExpectedBucketOwner=config.S3_ACCOUNT_ID, )