"""Test cases for SMES3Adapter.""" __all__ = [ 'TestSMES3Adapter', ] from unittest import TestCase from unittest.mock import MagicMock, patch from feed_ingestion.tasks.sme_s3_adapter import SMES3Adapter class TestSMES3Adapter(TestCase): """Test cases for SMES3Adapter.""" def setUp(self): """Set up tests environment.""" self.activity = MagicMock() self.archive_bucket = 'archive_bucket' self.secret_path = 'secret_path' self.source_bucket = 'archive_bucket' self.maxDiff = None @patch('boto3.client') @patch('secrets_manager.swf_ext.SWFSecretsManager') def test_copy_files( self, secrets_manager_class, boto3_client, ): """Test SMES3Adapter.copy_files.""" secrets_manager_class.get_cred.return_value = 'cred' sme_s3_adapter = SMES3Adapter(self.secret_path) s3_archive_path = 's3://s3_archive_path/some_prefix' s3_source_path = 's3://s3_source_path/some_prefix' copy_files_kwargs = { 'activity': self.activity, 's3_archive_path': s3_archive_path, 's3_download_path': s3_source_path, 'source_files_dict': { 'files': [ { 'file_name': 'file1.tsv', 'file_size': '0', }, { 'file_name': 'file2.tsv', 'file_size': '1', }, ], }, } expected_result = { 'source_files_dict': { 'files': [ { 'file_name': 'file1.tsv', 'file_size': '0', 'file_path': f'{s3_source_path}/file1.tsv', 'found': True, }, { 'file_name': 'file2.tsv', 'file_size': '1', 'file_path': f'{s3_source_path}/file2.tsv', 'found': True, }, ], }, } result = sme_s3_adapter.copy_files(**copy_files_kwargs) self.assertDictEqual(expected_result, result) @patch('boto3.client') @patch('secrets_manager.swf_ext.SWFSecretsManager') def test_copy_blob_from_sme_to_the_orchard( self, secrets_manager_class, boto3_client, ): """Test SMES3Adapter.copy_blob_from_sme_to_the_orchard.""" secrets_manager_class.get_cred.return_value = 'cred' sme_s3_adapter = SMES3Adapter(self.secret_path) copy_kwargs = { 'blob_name': 'file1.tsv', 's3_archive_path': 's3://s3_archive_path/some_prefix', 's3_source_path': 's3://s3_source_path/some_prefix', } sme_s3_adapter.copy_blob_from_sme_to_the_orchard(**copy_kwargs) @patch('botocore.paginate.Paginator') @patch('secrets_manager.swf_ext.SWFSecretsManager') @patch('boto3.client') def test_get_blobs_list_by_prefix( self, s3_client, secrets_manager_class, paginator_class, ): """Test SMES3Adapter.get_blobs_list_by_prefix.""" secrets_manager_class.get_cred.return_value = 'cred' paginator_class.paginate.return_value = [ { 'Contents': [ { 'Key': 'file1.tsv', 'Size': '0', }, { 'Key': 'file2.tsv', 'Size': '1', }, ] } ] s3_client.return_value.get_paginator.return_value = paginator_class sme_s3_adapter = SMES3Adapter(self.secret_path) get_blobs_list_by_prefix_kwargs = { 'prefix': 's3://some_bucket/some_prefix', 'wildcard': 'file.*tsv', } expected_result = [ { 'file_name': 'file1.tsv', 'file_size': '0', }, { 'file_name': 'file2.tsv', 'file_size': '1', }, ] result = sme_s3_adapter.get_blobs_list_by_prefix( **get_blobs_list_by_prefix_kwargs ) assert result == expected_result @patch('botocore.paginate.Paginator') @patch('secrets_manager.swf_ext.SWFSecretsManager') @patch('boto3.client') def test_source_files( self, s3_client, secrets_manager_class, paginator_class, ): """Test SMES3Adapter.source_files.""" secrets_manager_class.get_cred.return_value = 'cred' paginator_class.paginate.return_value = [ { 'Contents': [ { 'Key': 'file1.tsv', 'Size': '0', }, { 'Key': 'file2.tsv', 'Size': '1', }, ] } ] s3_client.return_value.get_paginator.return_value = paginator_class sme_s3_adapter = SMES3Adapter(self.secret_path) source_files_kwargs = { 'activity': self.activity, 's3_bucket': 'some_bucket', 's3_path': 'some_prefix', 'file_pattern': 'file.*tsv', } expected_result = { 'source_files_dict': { 'files': [ { 'file_name': 'file1.tsv', 'file_size': '0', }, { 'file_name': 'file2.tsv', 'file_size': '1', }, ], }, } result = sme_s3_adapter.source_files(**source_files_kwargs) self.assertDictEqual(expected_result, result)