mirror of
https://github.com/GSA/notifications-api.git
synced 2026-06-20 21:20:31 -04:00
Merge pull request #3040 from alphagov/ses-bounce-reason
Add notification ID to SES bounce reason
This commit is contained in:
@@ -26,9 +26,10 @@ def process_ses_results(self, response):
|
||||
try:
|
||||
ses_message = json.loads(response['Message'])
|
||||
notification_type = ses_message['notificationType']
|
||||
bounce_message = None
|
||||
|
||||
if notification_type == 'Bounce':
|
||||
notification_type = determine_notification_bounce_type(notification_type, ses_message)
|
||||
notification_type, bounce_message = determine_notification_bounce_type(notification_type, ses_message)
|
||||
elif notification_type == 'Complaint':
|
||||
_check_and_queue_complaint_callback_task(*handle_complaint(ses_message))
|
||||
return True
|
||||
@@ -54,6 +55,9 @@ def process_ses_results(self, response):
|
||||
)
|
||||
return
|
||||
|
||||
if bounce_message:
|
||||
current_app.logger.info(f"SES bounce for notification ID {notification.id}: {bounce_message}")
|
||||
|
||||
if notification.status not in [NOTIFICATION_SENDING, NOTIFICATION_PENDING]:
|
||||
notifications_dao._duplicate_update_warning(
|
||||
notification=notification,
|
||||
|
||||
@@ -17,12 +17,11 @@ from app.config import QueueNames
|
||||
|
||||
def determine_notification_bounce_type(notification_type, ses_message):
|
||||
remove_emails_from_bounce(ses_message)
|
||||
current_app.logger.info('SES bounce dict: {}'.format(ses_message))
|
||||
if ses_message['bounce']['bounceType'] == 'Permanent':
|
||||
notification_type = ses_message['bounce']['bounceType'] # permanent or not
|
||||
else:
|
||||
notification_type = 'Temporary'
|
||||
return notification_type
|
||||
return notification_type, ses_message
|
||||
|
||||
|
||||
def handle_complaint(ses_message):
|
||||
|
||||
@@ -200,6 +200,7 @@ def test_ses_callback_should_set_status_to_temporary_failure(client,
|
||||
send_mock = mocker.patch(
|
||||
'app.celery.service_callback_tasks.send_delivery_status_to_service.apply_async'
|
||||
)
|
||||
mock_logger = mocker.patch('app.celery.process_ses_receipts_tasks.current_app.logger.info')
|
||||
notification = create_notification(
|
||||
template=sample_email_template,
|
||||
status='sending',
|
||||
@@ -210,6 +211,7 @@ def test_ses_callback_should_set_status_to_temporary_failure(client,
|
||||
assert process_ses_results(ses_soft_bounce_callback(reference='ref'))
|
||||
assert get_notification_by_id(notification.id).status == 'temporary-failure'
|
||||
assert send_mock.called
|
||||
assert f'SES bounce for notification ID {notification.id}: ' in mock_logger.call_args[0][0]
|
||||
|
||||
|
||||
def test_ses_callback_should_set_status_to_permanent_failure(client,
|
||||
@@ -219,6 +221,7 @@ def test_ses_callback_should_set_status_to_permanent_failure(client,
|
||||
send_mock = mocker.patch(
|
||||
'app.celery.service_callback_tasks.send_delivery_status_to_service.apply_async'
|
||||
)
|
||||
mock_logger = mocker.patch('app.celery.process_ses_receipts_tasks.current_app.logger.info')
|
||||
notification = create_notification(
|
||||
template=sample_email_template,
|
||||
status='sending',
|
||||
@@ -230,6 +233,7 @@ def test_ses_callback_should_set_status_to_permanent_failure(client,
|
||||
assert process_ses_results(ses_hard_bounce_callback(reference='ref'))
|
||||
assert get_notification_by_id(notification.id).status == 'permanent-failure'
|
||||
assert send_mock.called
|
||||
assert f'SES bounce for notification ID {notification.id}: ' in mock_logger.call_args[0][0]
|
||||
|
||||
|
||||
def test_ses_callback_should_send_on_complaint_to_user_callback_api(sample_email_template, mocker):
|
||||
|
||||
Reference in New Issue
Block a user