# pylint: disable=unused-argument, protected-access, line-too-long import os import pytest from slz_ddex_downloader.entities import S3Path from .utils import create_release, upload_local_releases @pytest.mark.integration def test_copy(s3_service, config_test, release_service): upload_local_releases(s3_service, config_test.feed_bucket) expected = [ 'ddex/release_message/v1/report_date=2021-04-27/report_licensor=sme/valid_release/A10301A0001357189C.xml', 'ddex/release_message/v1/report_date=2021-04-27/report_licensor=sme/valid_release/resources/A10301A0001357189C_T-102043747899_Image.jpg' ] release_title = 'valid_release' dest_bucket = config_test.decompressed_quarantine_bucket release = create_release(release_service, release_title) for source_path in release.files: destination_path = S3Path( bucket=dest_bucket, path=f'{release.upload_prefix}/{source_path.path}', name=source_path.name, ) s3_service.copy(source_path, destination_path) keys = s3_service.get_keys_by_folder(dest_bucket, f'{release.upload_prefix}/{release_title}') assert keys == expected def test_move(s3_service, config_test, payload_test): source_bucket = config_test.decompressed_quarantine_bucket destination_bucket = config_test.corrupted_bucket path = 'A10301A0000935334X_20201116181657943' name = 'A10301A0000935334X.xml' key = os.path.join(path, name) content = 'xml_content' s3_service._s3_client.put_object(Bucket=source_bucket, Key=key, Body=content) source = S3Path( bucket=source_bucket, path=path, name=name, ) destination = S3Path( bucket=destination_bucket, path=path, name=name, ) s3_service.move(source, destination) keys = s3_service.get_keys_by_folder(destination_bucket, path) assert keys == [key] moved_keys = s3_service.get_keys_by_folder(source_bucket, path) assert not moved_keys def test_download_s3_folder(s3_service, config_test, payload_test): release_title = 'valid_release' expected = [ '/tmp/valid_release/files/A10301A0001357189C.xml', '/tmp/valid_release/files/resources/A10301A0001357189C_T-102043747899_Image.jpg' ] upload_local_releases(s3_service, config_test.feed_bucket) s3_service.download_s3_folder(config_test.feed_bucket, release_title) release_dir = os.path.join('/tmp', release_title) for root, _, files in os.walk(release_dir): for file_name in files: assert os.path.join(root, file_name) in expected s3_service.clean_tmp(release_dir) assert not list(os.walk(release_dir)) def test_upload_content_to_s3(s3_service, config_test, payload_test, acknowledgement_test) -> None: upload_path = f'acknowledgements/{acknowledgement_test.file_name}' s3_service.upload_content_to_s3( config_test.feed_bucket, upload_path, acknowledgement_test.content ) keys = s3_service.get_keys_by_folder(config_test.feed_bucket, upload_path) assert keys == [upload_path]