"""Unit tests for archive_upload task.""" from unittest.mock import patch import pytest from lib.config import S3_PAYMENTS_BUCKET_NAME from tasks.payments_upload_approval.archive_upload \ import archive_upload_approval_file_task @patch('tasks.payments_upload_approval.archive_upload.aws') @patch('tasks.payments_upload_approval.archive_upload.ows') @patch('tasks.payments_upload_approval.archive_upload.helpers') def test_archive_upload_approval_file_needs_correct_bucket( mock_helpers, mock_ows, mock_aws, mock_payment_group_payment, mock_report_payment_group_payment, mock_payments_upload_approval_dag_run ): """Test bucket is validated.""" payment_group_payment_id = mock_payment_group_payment['payment_group_payment_id'] mock_helpers.get_event_from_params.return_value.target_id = payment_group_payment_id mock_ows.get_payment_group_payment_reports.return_value = \ mock_report_payment_group_payment mock_ows.get_payment_group_payment_details.return_value = mock_payment_group_payment mock_aws.split_path.return_value.bucket = 'Wrong-Bucket' mock_aws.split_path.return_value.key = 'keepMe.pdf' with pytest.raises(AssertionError) as bad_bucket_error: archive_upload_approval_file_task(mock_payments_upload_approval_dag_run) assert 'Bucket mismatch. Got Wrong-Bucket.' == str(bad_bucket_error.value) @patch('tasks.payments_upload_approval.archive_upload.aws') @patch('tasks.payments_upload_approval.archive_upload.ows') @patch('tasks.payments_upload_approval.archive_upload.helpers') def test_archive_upload_approval_file_needs_correct_prefix( mock_helpers, mock_ows, mock_aws, mock_payment_group_payment, mock_report_payment_group_payment, mock_payments_upload_approval_dag_run ): """Test path/prefix is validated.""" payment_group_payment_id = mock_payment_group_payment['payment_group_payment_id'] payment_group_payment_name = mock_payment_group_payment['payment_name'] mock_helpers.get_event_from_params.return_value.target_id = payment_group_payment_id mock_ows.get_payment_group_payment_reports.return_value = \ mock_report_payment_group_payment mock_ows.get_payment_group_payment_details.return_value = mock_payment_group_payment mock_aws.split_path.return_value.bucket = S3_PAYMENTS_BUCKET_NAME mock_helpers.build_upload_approval_path.return_value = '22-make-it-rain/approval' mock_aws.split_path.return_value.key = '3-wrong-dir/approval/keepMe.pdf' with pytest.raises(AssertionError) as bad_prefix_error: archive_upload_approval_file_task(mock_payments_upload_approval_dag_run) assert 'Path mismatch. Got 3-wrong-dir/approval.' == str(bad_prefix_error.value) mock_helpers.build_upload_approval_path.assert_called_once_with( payment_group_payment_id, payment_group_payment_name, ) @patch('tasks.payments_upload_approval.archive_upload.aws') @patch('tasks.payments_upload_approval.archive_upload.ows') @patch('tasks.payments_upload_approval.archive_upload.helpers') def test_archive_upload_approval_file_never_moves_desired_file( mock_helpers, mock_ows, mock_aws, mock_payment_group_payment, mock_report_payment_group_payment, mock_payments_upload_approval_dag_run ): """Test desired file is not touched.""" payment_group_payment_id = mock_payment_group_payment['payment_group_payment_id'] mock_helpers.get_event_from_params.return_value.target_id = payment_group_payment_id mock_ows.get_payment_group_payment_reports.return_value = \ mock_report_payment_group_payment mock_ows.get_payment_group_payment_details.return_value = mock_payment_group_payment mock_aws.split_path.return_value.bucket = S3_PAYMENTS_BUCKET_NAME mock_helpers.build_upload_approval_path.return_value = '22-make-it-rain/approval' mock_aws.split_path.return_value.key = '22-make-it-rain/approval/keepMe.pdf' mock_aws.list_bucket_keys.return_value = [ '22-make-it-rain/approval/keepMe.pdf', ] archive_upload_approval_file_task(mock_payments_upload_approval_dag_run) mock_aws.list_bucket_keys.assert_called_with( S3_PAYMENTS_BUCKET_NAME, '22-make-it-rain/approval', ) assert not mock_aws.copy_file.called assert not mock_aws.delete_files.called @patch('tasks.payments_upload_approval.archive_upload.aws') @patch('tasks.payments_upload_approval.archive_upload.ows') @patch('tasks.payments_upload_approval.archive_upload.helpers') def test_archive_upload_approval_file_never_moves_files_in_archive( mock_helpers, mock_ows, mock_aws, mock_payment_group_payment, mock_report_payment_group_payment, mock_payments_upload_approval_dag_run ): """Test archived files are not touched.""" payment_group_payment_id = mock_payment_group_payment['payment_group_payment_id'] payment_group_payment_name = mock_payment_group_payment['payment_name'] mock_helpers.get_event_from_params.return_value.target_id = payment_group_payment_id mock_ows.get_payment_group_payment_reports.return_value =\ mock_report_payment_group_payment mock_ows.get_payment_group_payment_details.return_value = mock_payment_group_payment mock_aws.split_path.return_value.bucket = S3_PAYMENTS_BUCKET_NAME mock_helpers.build_upload_approval_path.return_value = '22-make-it-rain/approval' mock_helpers.build_upload_approval_archive_path.return_value =\ '22-make-it-rain/approval/archive' mock_aws.split_path.return_value.key = '22-make-it-rain/approval/keepMe.pdf' mock_aws.list_bucket_keys.return_value = [ '22-make-it-rain/approval/archive/something/old.pdf', '22-make-it-rain/approval/archive/old.pdf', ] archive_upload_approval_file_task(mock_payments_upload_approval_dag_run) mock_helpers.build_upload_approval_archive_path.assert_called_with( payment_group_payment_id, payment_group_payment_name) mock_aws.list_bucket_keys.assert_called_with( S3_PAYMENTS_BUCKET_NAME, '22-make-it-rain/approval', ) assert not mock_aws.copy_file.called assert not mock_aws.delete_files.called @patch('tasks.payments_upload_approval.archive_upload.aws') @patch('tasks.payments_upload_approval.archive_upload.ows') @patch('tasks.payments_upload_approval.archive_upload.helpers') def test_archive_upload_approval_file_moves_other_files( mock_helpers, mock_ows, mock_aws, mock_payment_group_payment, mock_report_payment_group_payment, mock_payments_upload_approval_dag_run ): """Test appropriate file is moved to the archive location.""" payment_group_payment_id = mock_payment_group_payment['payment_group_payment_id'] payment_group_payment_name = mock_payment_group_payment['payment_name'] mock_helpers.get_event_from_params.return_value.target_id = payment_group_payment_id mock_ows.get_payment_group_payment_reports.return_value = \ mock_report_payment_group_payment mock_ows.get_payment_group_payment_details.return_value = mock_payment_group_payment mock_aws.split_path.return_value.bucket = S3_PAYMENTS_BUCKET_NAME mock_helpers.build_upload_approval_path.return_value = '22-make-it-rain/approval' mock_helpers.build_upload_approval_archive_path.return_value =\ '22-make-it-rain/approval/archive' mock_aws.split_path.return_value.key = '22-make-it-rain/approval/keepMe.pdf' mock_aws.list_bucket_keys.return_value = [ '22-make-it-rain/approval/moveMe.pdf', ] mock_helpers.build_upload_approval_archive_location.return_value.key =\ 'archive-destination' archive_upload_approval_file_task(mock_payments_upload_approval_dag_run) mock_helpers.build_upload_approval_archive_path.assert_called_with( payment_group_payment_id, payment_group_payment_name) mock_aws.list_bucket_keys.assert_called_with( S3_PAYMENTS_BUCKET_NAME, '22-make-it-rain/approval', ) mock_helpers.build_upload_approval_archive_location.assert_called_once_with( payment_group_payment_id, payment_group_payment_name, 'moveMe.pdf', ) mock_aws.copy_file.assert_called_once_with( source_bucket=S3_PAYMENTS_BUCKET_NAME, source_key='22-make-it-rain/approval/moveMe.pdf', dest_key='archive-destination', ) mock_aws.delete_files.called_called_once_with( bucket=S3_PAYMENTS_BUCKET_NAME, source_key='22-make-it-rain/approval/moveMe.pdf' )