"""Test asset helpers.""" import json from unittest.mock import MagicMock, patch from ddex_ingester_common.release_correction.release_correction_diffs import ( ReleaseCorrectionDiffs) from ddex_ingester_common.release_correction.release_corrections_s3 import ( create_blank_rc_json, delete_all_rc_json_files, delete_objects, load_lambda_rc_json_files, load_rc_json, write_rc_json) @patch('ddex_ingester_common.release_correction.release_corrections_s3.json.loads') # noqa @patch('ddex_ingester_common.release_correction.release_corrections_s3.boto3.client') # noqa def test_load_rc_json(mock_boto3_client, mock_json_loads): """Test load_rc_json handles function inputs correctly.""" bucket = 's3bucket' key = 's3key/jsonpath/' json_path = f'{key}release_corrections.json' mock_event = { 'bucket': bucket, 'key': key } mock_boto3_client_return = MagicMock() mock_boto3_client.return_value = mock_boto3_client_return mock_boto3_client_get_object = MagicMock() mock_boto3_client_return.get_object = mock_boto3_client_get_object load_rc_json(mock_event) mock_boto3_client_get_object.assert_called_once_with( Bucket=bucket, Key=json_path ) @patch( 'ddex_ingester_common.release_correction.release_corrections_s3.json.dumps') # noqa @patch('ddex_ingester_common.release_correction.release_corrections_s3.boto3.client') # noqa def test_write_rc_json(mock_boto3_client, mock_json_dumps): """Test write_rc_json handles function inputs correctly.""" bucket = 's3bucket' key = 's3key/jsonpath/' json_path = f'{key}release_corrections.json' mock_event = { 'bucket': bucket, 'key': key } mock_boto3_client_return = MagicMock() mock_boto3_client.return_value = mock_boto3_client_return mock_boto3_client_put_object = MagicMock() mock_boto3_client_return.put_object = mock_boto3_client_put_object mock_data = {'test': True} put_data = json.dumps(mock_data).encode(encoding='UTF-8') write_rc_json(mock_event, mock_data) mock_boto3_client_put_object.assert_called_once_with( Body=put_data, Bucket=bucket, Key=json_path ) @patch('ddex_ingester_common.release_correction.release_corrections_s3.json.dumps') # noqa @patch('ddex_ingester_common.release_correction.release_corrections_s3.boto3.client') # noqa def test_create_blank_rc_json(mock_boto3_client, mock_json_dumps): """Test create_blank_rc_json handles function inputs correctly.""" bucket = 's3bucket' key = 's3key/jsonpath/' json_path = f'{key}release_corrections.json' mock_event = { 'bucket': bucket, 'key': key } mock_boto3_client_return = MagicMock() mock_boto3_client.return_value = mock_boto3_client_return mock_boto3_client_put_object = MagicMock() mock_boto3_client_return.put_object = mock_boto3_client_put_object mock_data = ReleaseCorrectionDiffs() put_data = json.dumps(mock_data).encode(encoding='UTF-8') create_blank_rc_json(mock_event) mock_boto3_client_put_object.assert_called_once_with( Body=put_data, Bucket=bucket, Key=json_path ) @patch('ddex_ingester_common.release_correction.release_corrections_s3.json.dumps') # noqa @patch('ddex_ingester_common.release_correction.release_corrections_s3.boto3.client') # noqa def test_create_blank_rc_json_with_filename( mock_boto3_client, mock_json_dumps): """Test create_blank_rc_json handles function inputs correctly.""" bucket = 's3bucket' key = 's3key/jsonpath/' json_path = f'{key}test.json' mock_event = { 'bucket': bucket, 'key': key } mock_boto3_client_return = MagicMock() mock_boto3_client.return_value = mock_boto3_client_return mock_boto3_client_put_object = MagicMock() mock_boto3_client_return.put_object = mock_boto3_client_put_object mock_data = ReleaseCorrectionDiffs() put_data = json.dumps(mock_data).encode(encoding='UTF-8') create_blank_rc_json(mock_event, 'test.json') mock_boto3_client_put_object.assert_called_once_with( Body=put_data, Bucket=bucket, Key=json_path ) @patch('ddex_ingester_common.release_correction.release_corrections_s3.boto3') # noqa def test_delete_all_rc_json_files(mock_boto3): """Test delete_all_rc_json_files.""" bucket = 'qa-ddex-ingester' key = 'sme_ddex/DB_Test/' mock_event = { 'bucket': bucket, 'key': key } mock_boto3_return = MagicMock() mock_boto3.return_value = mock_boto3_return mock_boto3_client_objects = MagicMock() mock_boto3_return.objects.filter = mock_boto3_client_objects delete_all_rc_json_files(mock_event) mock_boto3.resource.assert_called_once_with('s3', 'us-east-1') @patch('ddex_ingester_common.release_correction.release_corrections_s3.boto3.client') # noqa def test_delete_objects(mock_boto3_client): """Test delete_objects.""" bucket = 'TestBucket' keys = ['123'] mock_boto3_client_return = MagicMock() mock_boto3_client.return_value = mock_boto3_client_return mock_boto3_client_delete_objects = MagicMock() mock_boto3_client_return.delete_objects = mock_boto3_client_delete_objects delete_objects(bucket, keys) mock_boto3_client.assert_called_once_with('s3') mock_boto3_client_delete_objects.assert_called_once() @patch('ddex_ingester_common.release_correction.release_corrections_s3.boto3.client') # noqa @patch('ddex_ingester_common.release_correction.release_corrections_s3.json.dumps') # noqa @patch('ddex_ingester_common.release_correction.release_corrections_s3.boto3') # noqa def test_load_lambda_rc_json_files( mock_boto3, mock_json_dumps, mock_boto3_client): """Test load_lambda_rc_json_files handles function inputs correctly.""" bucket = 's3bucket' key = 's3key/jsonpath/' mock_event = { 'bucket': bucket, 'key': key } mock_boto3_return = MagicMock() mock_boto3.return_value = mock_boto3_return mock_boto3_client_objects = MagicMock() mock_boto3_return.objects.filter = mock_boto3_client_objects mock_boto3_client_return = MagicMock() mock_boto3_client.return_value = mock_boto3_client_return mock_boto3_client_get_object = MagicMock() mock_boto3_client_return.get_object = mock_boto3_client_get_object load_lambda_rc_json_files(mock_event) mock_boto3.resource.assert_called_once_with('s3', 'us-east-1')