mirror of
https://github.com/GSA/notifications-api.git
synced 2026-07-31 19:58:46 -04:00
Merge pull request #3184 from alphagov/callback-template-data
Send template id and version with delivery status callback
This commit is contained in:
@@ -26,6 +26,12 @@ def send_delivery_status_to_service(
|
|||||||
"sent_at": status_update['notification_sent_at'],
|
"sent_at": status_update['notification_sent_at'],
|
||||||
"notification_type": status_update['notification_type']
|
"notification_type": status_update['notification_type']
|
||||||
}
|
}
|
||||||
|
# TODO: set the template_id and template_version keys when data dict is created once this change has
|
||||||
|
# been deployed long enough for all tasks to have those keys in status_update
|
||||||
|
if status_update.get("template_id"):
|
||||||
|
data["template_id"] = status_update['template_id']
|
||||||
|
data["template_version"] = status_update['template_version']
|
||||||
|
|
||||||
_send_data_to_service_callback_api(
|
_send_data_to_service_callback_api(
|
||||||
self,
|
self,
|
||||||
data,
|
data,
|
||||||
@@ -121,6 +127,8 @@ def create_delivery_status_callback_data(notification, service_callback_api):
|
|||||||
"notification_type": notification.notification_type,
|
"notification_type": notification.notification_type,
|
||||||
"service_callback_api_url": service_callback_api.url,
|
"service_callback_api_url": service_callback_api.url,
|
||||||
"service_callback_api_bearer_token": service_callback_api.bearer_token,
|
"service_callback_api_bearer_token": service_callback_api.bearer_token,
|
||||||
|
"template_id": str(notification.template_id),
|
||||||
|
"template_version": notification.template_version,
|
||||||
}
|
}
|
||||||
return encryption.encrypt(data)
|
return encryption.encrypt(data)
|
||||||
|
|
||||||
|
|||||||
@@ -15,13 +15,16 @@ from notifications_utils.template import SMSMessageTemplate
|
|||||||
from sqlalchemy.exc import IntegrityError
|
from sqlalchemy.exc import IntegrityError
|
||||||
from sqlalchemy.orm.exc import NoResultFound
|
from sqlalchemy.orm.exc import NoResultFound
|
||||||
|
|
||||||
from app import db, encryption
|
from app import db
|
||||||
from app.aws import s3
|
from app.aws import s3
|
||||||
from app.celery.letters_pdf_tasks import get_pdf_for_templated_letter
|
from app.celery.letters_pdf_tasks import get_pdf_for_templated_letter
|
||||||
from app.celery.reporting_tasks import (
|
from app.celery.reporting_tasks import (
|
||||||
create_nightly_notification_status_for_day,
|
create_nightly_notification_status_for_day,
|
||||||
)
|
)
|
||||||
from app.celery.service_callback_tasks import send_delivery_status_to_service
|
from app.celery.service_callback_tasks import (
|
||||||
|
create_delivery_status_callback_data,
|
||||||
|
send_delivery_status_to_service,
|
||||||
|
)
|
||||||
from app.celery.tasks import process_row, record_daily_sorted_counts
|
from app.celery.tasks import process_row, record_daily_sorted_counts
|
||||||
from app.config import QueueNames
|
from app.config import QueueNames
|
||||||
from app.dao.annual_billing_dao import (
|
from app.dao.annual_billing_dao import (
|
||||||
@@ -72,7 +75,7 @@ from app.models import (
|
|||||||
Service,
|
Service,
|
||||||
User,
|
User,
|
||||||
)
|
)
|
||||||
from app.utils import DATETIME_FORMAT, get_london_midnight_in_utc
|
from app.utils import get_london_midnight_in_utc
|
||||||
|
|
||||||
|
|
||||||
@click.group(name='command', help='Additional commands')
|
@click.group(name='command', help='Additional commands')
|
||||||
@@ -322,19 +325,7 @@ def replay_service_callbacks(file_name, service_id):
|
|||||||
raise Exception("Some notifications for the given references were not found")
|
raise Exception("Some notifications for the given references were not found")
|
||||||
|
|
||||||
for n in notifications:
|
for n in notifications:
|
||||||
data = {
|
encrypted_status_update = create_delivery_status_callback_data(n, callback_api)
|
||||||
"notification_id": str(n.id),
|
|
||||||
"notification_client_reference": n.client_reference,
|
|
||||||
"notification_to": n.to,
|
|
||||||
"notification_status": n.status,
|
|
||||||
"notification_created_at": n.created_at.strftime(DATETIME_FORMAT),
|
|
||||||
"notification_updated_at": n.updated_at.strftime(DATETIME_FORMAT),
|
|
||||||
"notification_sent_at": n.sent_at.strftime(DATETIME_FORMAT),
|
|
||||||
"notification_type": n.notification_type,
|
|
||||||
"service_callback_api_url": callback_api.url,
|
|
||||||
"service_callback_api_bearer_token": callback_api.bearer_token,
|
|
||||||
}
|
|
||||||
encrypted_status_update = encryption.encrypt(data)
|
|
||||||
send_delivery_status_to_service.apply_async([str(n.id), encrypted_status_update],
|
send_delivery_status_to_service.apply_async([str(n.id), encrypted_status_update],
|
||||||
queue=QueueNames.CALLBACKS)
|
queue=QueueNames.CALLBACKS)
|
||||||
|
|
||||||
|
|||||||
@@ -20,8 +20,7 @@ from tests.app.db import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("notification_type",
|
@pytest.mark.parametrize("notification_type", ["email", "sms"])
|
||||||
["email", "letter", "sms"])
|
|
||||||
def test_send_delivery_status_to_service_post_https_request_to_service_with_encrypted_data(
|
def test_send_delivery_status_to_service_post_https_request_to_service_with_encrypted_data(
|
||||||
notify_db_session, notification_type):
|
notify_db_session, notification_type):
|
||||||
|
|
||||||
@@ -49,7 +48,9 @@ def test_send_delivery_status_to_service_post_https_request_to_service_with_encr
|
|||||||
"created_at": datestr.strftime(DATETIME_FORMAT),
|
"created_at": datestr.strftime(DATETIME_FORMAT),
|
||||||
"completed_at": datestr.strftime(DATETIME_FORMAT),
|
"completed_at": datestr.strftime(DATETIME_FORMAT),
|
||||||
"sent_at": datestr.strftime(DATETIME_FORMAT),
|
"sent_at": datestr.strftime(DATETIME_FORMAT),
|
||||||
"notification_type": notification_type
|
"notification_type": notification_type,
|
||||||
|
"template_id": str(template.id),
|
||||||
|
"template_version": 1
|
||||||
}
|
}
|
||||||
|
|
||||||
assert request_mock.call_count == 1
|
assert request_mock.call_count == 1
|
||||||
@@ -90,8 +91,7 @@ def test_send_complaint_to_service_posts_https_request_to_service_with_encrypted
|
|||||||
assert request_mock.request_history[0].headers["Authorization"] == "Bearer {}".format(callback_api.bearer_token)
|
assert request_mock.request_history[0].headers["Authorization"] == "Bearer {}".format(callback_api.bearer_token)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("notification_type",
|
@pytest.mark.parametrize("notification_type", ["email", "sms"])
|
||||||
["email", "letter", "sms"])
|
|
||||||
def test__send_data_to_service_callback_api_retries_if_request_returns_500_with_encrypted_data(
|
def test__send_data_to_service_callback_api_retries_if_request_returns_500_with_encrypted_data(
|
||||||
notify_db_session, mocker, notification_type
|
notify_db_session, mocker, notification_type
|
||||||
):
|
):
|
||||||
@@ -115,8 +115,7 @@ def test__send_data_to_service_callback_api_retries_if_request_returns_500_with_
|
|||||||
assert mocked.call_args[1]['queue'] == 'service-callbacks-retry'
|
assert mocked.call_args[1]['queue'] == 'service-callbacks-retry'
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("notification_type",
|
@pytest.mark.parametrize("notification_type", ["email", "sms"])
|
||||||
["email", "letter", "sms"])
|
|
||||||
def test__send_data_to_service_callback_api_does_not_retry_if_request_returns_404_with_encrypted_data(
|
def test__send_data_to_service_callback_api_does_not_retry_if_request_returns_404_with_encrypted_data(
|
||||||
notify_db_session,
|
notify_db_session,
|
||||||
mocker,
|
mocker,
|
||||||
@@ -185,6 +184,8 @@ def _set_up_data_for_status_update(callback_api, notification):
|
|||||||
"notification_type": notification.notification_type,
|
"notification_type": notification.notification_type,
|
||||||
"service_callback_api_url": callback_api.url,
|
"service_callback_api_url": callback_api.url,
|
||||||
"service_callback_api_bearer_token": callback_api.bearer_token,
|
"service_callback_api_bearer_token": callback_api.bearer_token,
|
||||||
|
"template_id": str(notification.template_id),
|
||||||
|
"template_version": notification.template_version,
|
||||||
}
|
}
|
||||||
encrypted_status_update = encryption.encrypt(data)
|
encrypted_status_update = encryption.encrypt(data)
|
||||||
return encrypted_status_update
|
return encrypted_status_update
|
||||||
|
|||||||
Reference in New Issue
Block a user