"""Test s3 file upload.""" import boto3 import io from flexmock import flexmock from moto import mock_aws from masters_registry import config from masters_registry.connectors import s3 from masters_registry.connectors import sentry from masters_registry.constant import error from masters_registry.connectors.s3 import client as outside_s3_client s3_resource = boto3.resource("s3") @mock_aws def test_get_file_url_no_file_in_bucket(): """Test get url of file that doesn't exist.""" from moto.core import patch_client, patch_resource patch_client(outside_s3_client) patch_resource(s3_resource) outside_s3_client.create_bucket(Bucket=config.REPORTS_BUCKET_NAME) sentry.sentry_client = flexmock() sentry.sentry_client.should_receive('captureException').once() test_file_key = 'dir/file.csv' expected_error = error.S3_FILE_NOT_FOUND.format( key=test_file_key, bucket=config.REPORTS_BUCKET_NAME) result = s3.get_file_url(test_file_key) assert result.status == 404 assert result.errors['message'] == expected_error assert result.errors['code'] == error.ERROR_CODE_NOT_FOUND @mock_aws def test_get_file_url_success(): """Test get url of valid file.""" from moto.core import patch_client, patch_resource patch_client(outside_s3_client) patch_resource(s3_resource) outside_s3_client.create_bucket(Bucket=config.REPORTS_BUCKET_NAME) test_file_key = 'dir/file.csv' outside_s3_client.upload_fileobj( io.BytesIO(b'test'), config.REPORTS_BUCKET_NAME, test_file_key) result = s3.get_file_url(test_file_key) assert result.status @mock_aws def test_upload_file_object(): """Test upload file object""" from moto.core import patch_client, patch_resource patch_client(outside_s3_client) patch_resource(s3_resource) outside_s3_client.create_bucket(Bucket=config.REPORTS_BUCKET_NAME) filename = 'file.csv' test_file_key = '{prefix}/{filename}'.format( filename=filename, prefix=config.REPORTS_FILE_KEY_PREFIX) file_data = io.BytesIO(b'foo bar') s3.upload_file_object(test_file_key, file_data) assert s3.check_if_file_exists(test_file_key) @mock_aws def test_check_if_file_exists_file_does_not_exists(): """Test for a case when file doesn't exist """ from moto.core import patch_client, patch_resource patch_client(outside_s3_client) patch_resource(s3_resource) outside_s3_client.create_bucket(Bucket=config.REPORTS_BUCKET_NAME) assert not s3.check_if_file_exists('file.csv') @mock_aws def test_check_if_file_exists_file_exists(): """Test for a case when file exists""" from moto.core import patch_client, patch_resource patch_client(outside_s3_client) patch_resource(s3_resource) outside_s3_client.create_bucket(Bucket=config.REPORTS_BUCKET_NAME) test_file_key = 'file.csv' outside_s3_client.upload_fileobj( io.BytesIO(b'test'), config.REPORTS_BUCKET_NAME, test_file_key) assert s3.check_if_file_exists(test_file_key)