"""Test invoke_lambda_av_scan task.""" import json from unittest.mock import patch import pytest from tasks.payments_upload_approval.invoke_lambda_av_scan import\ invoke_lambda_av_scan_task @patch('tasks.payments_upload_approval.invoke_lambda_av_scan.OrchLambdaHook') @patch('tasks.payments_upload_approval.invoke_lambda_av_scan.aws') @patch('tasks.payments_upload_approval.invoke_lambda_av_scan.ows') @patch('tasks.payments_upload_approval.invoke_lambda_av_scan.helpers') def test_invoke_lambda_av_scan_task( mock_helpers, mock_ows, mock_aws, mock_lambda_hook, mock_report_payment_group_payment, mock_payments_upload_approval_dag_run, ): """Test invoking lambda av scan task.""" payment_group_payment_id = 22 mock_response = mock_report_payment_group_payment mock_ows.get_payment_group_payment_reports.return_value = mock_response mock_aws.split_path.return_value.bucket = 'qa-abacus-payments' mock_aws.split_path.return_value.key = '1-making-bank/approval/oked.pdf' mock_helpers.get_event_from_params.return_value.target_id = payment_group_payment_id mock_lambda_hook.return_value.invoke_lambda.return_value.\ function_response.succeeded = True mock_lambda_hook.return_value.invoke_lambda.return_value.\ function_response.payload = {'has_virus': False} invoke_lambda_av_scan_task(mock_payments_upload_approval_dag_run) mock_ows.get_payment_group_payment_reports.assert_called_once_with( payment_group_payment_id) mock_aws.split_path.assert_called_once_with( 's3://qa-abacus-payments/22-make-it-rain/approval/approve.pdf') mock_lambda_hook.return_value.invoke_lambda.assert_called_once_with( json.dumps({ 'detail': { 'requestParameters': { 'bucketName': 'qa-abacus-payments', 'key': '1-making-bank/approval/oked.pdf' }, }, 'delete': True }) ) @patch('tasks.payments_upload_approval.invoke_lambda_av_scan.OrchLambdaHook') @patch('tasks.payments_upload_approval.invoke_lambda_av_scan.aws') @patch('tasks.payments_upload_approval.invoke_lambda_av_scan.ows') @patch('tasks.payments_upload_approval.invoke_lambda_av_scan.helpers') def test_invoke_lambda_av_scan_task_without_upload_approval_report( mock_helpers, mock_ows, mock_aws, mock_lambda_hook, mock_payments_upload_approval_dag_run, ): """Test invoking lambda av scan task errors when no upload approval is present.""" payment_group_payment_id = 22 mock_response = [] mock_ows.get_payment_group_payment_reports.return_value = mock_response mock_helpers.get_event_from_params.return_value.target_id = payment_group_payment_id with pytest.raises(AssertionError) as missing_upload_error: invoke_lambda_av_scan_task(mock_payments_upload_approval_dag_run) assert 'Missing upload file' == str(missing_upload_error.value) mock_ows.get_payment_group_payment_reports.assert_called_once_with( payment_group_payment_id) assert not mock_aws.split_path.called assert not mock_lambda_hook.return_value.invoke_lambda.called @patch('tasks.payments_upload_approval.invoke_lambda_av_scan.OrchLambdaHook') @patch('tasks.payments_upload_approval.invoke_lambda_av_scan.aws') @patch('tasks.payments_upload_approval.invoke_lambda_av_scan.ows') @patch('tasks.payments_upload_approval.invoke_lambda_av_scan.helpers') def test_invoke_lambda_av_scan_task_lambda_fails( mock_helpers, mock_ows, mock_aws, mock_lambda_hook, mock_report_payment_group_payment, mock_payments_upload_approval_dag_run, ): """Test invoking lambda av scan task raises exception when lambda fails.""" payment_group_payment_id = 22 mock_response = mock_report_payment_group_payment mock_ows.get_payment_group_payment_reports.return_value = mock_response mock_aws.split_path.return_value.bucket = 'qa-abacus-payments' mock_aws.split_path.return_value.key = '1-making-bank/approval/oked.pdf' mock_helpers.get_event_from_params.return_value.target_id = payment_group_payment_id mock_lambda_hook.return_value.invoke_lambda.return_value.\ function_response.succeeded = False with pytest.raises(Exception): invoke_lambda_av_scan_task(mock_payments_upload_approval_dag_run) mock_ows.get_payment_group_payment_reports.assert_called_once_with( payment_group_payment_id) mock_aws.split_path.assert_called_once_with( 's3://qa-abacus-payments/22-make-it-rain/approval/approve.pdf') mock_lambda_hook.return_value.invoke_lambda.assert_called_once_with( json.dumps({ 'detail': { 'requestParameters': { 'bucketName': 'qa-abacus-payments', 'key': '1-making-bank/approval/oked.pdf' }, }, 'delete': True }) ) @patch('tasks.payments_upload_approval.invoke_lambda_av_scan.OrchLambdaHook') @patch('tasks.payments_upload_approval.invoke_lambda_av_scan.aws') @patch('tasks.payments_upload_approval.invoke_lambda_av_scan.ows') @patch('tasks.payments_upload_approval.invoke_lambda_av_scan.helpers') def test_invoke_lambda_av_scan_task_on_a_virus( mock_helpers, mock_ows, mock_aws, mock_lambda_hook, mock_report_payment_group_payment, mock_payments_upload_approval_dag_run, ): """Test invoking lambda av scan task raises exception when a virus is detected.""" payment_group_payment_id = 22 mock_response = mock_report_payment_group_payment mock_ows.get_payment_group_payment_reports.return_value = mock_response mock_aws.split_path.return_value.bucket = 'qa-abacus-payments' mock_aws.split_path.return_value.key = '1-making-bank/approval/oked.pdf' mock_helpers.get_event_from_params.return_value.target_id = payment_group_payment_id mock_lambda_hook.return_value.invoke_lambda.return_value.\ function_response.succeeded = True mock_lambda_hook.return_value.invoke_lambda.return_value.\ function_response.payload = {'has_virus': True} with pytest.raises(Exception) as virus_detected_exception: invoke_lambda_av_scan_task(mock_payments_upload_approval_dag_run) assert 'Virus detected' == str(virus_detected_exception.value) mock_ows.get_payment_group_payment_reports.assert_called_once_with( payment_group_payment_id) mock_aws.split_path.assert_called_once_with( 's3://qa-abacus-payments/22-make-it-rain/approval/approve.pdf') mock_lambda_hook.return_value.invoke_lambda.assert_called_once_with( json.dumps({ 'detail': { 'requestParameters': { 'bucketName': 'qa-abacus-payments', 'key': '1-making-bank/approval/oked.pdf' }, }, 'delete': True }) )