mirror of
https://github.com/GSA/notifications-api.git
synced 2025-12-21 07:51:13 -05:00
re-use existing provider message if task retries
previously it would crash with a unique constraint error. now, grab the previous message.
This commit is contained in:
@@ -70,7 +70,11 @@ def send_broadcast_event(broadcast_event_id):
|
||||
def send_broadcast_provider_message(self, broadcast_event_id, provider):
|
||||
broadcast_event = dao_get_broadcast_event_by_id(broadcast_event_id)
|
||||
|
||||
# the broadcast_provider_message will already exist if we retried previously
|
||||
broadcast_provider_message = broadcast_event.get_provider_message(provider)
|
||||
if broadcast_provider_message is None:
|
||||
broadcast_provider_message = create_broadcast_provider_message(broadcast_event, provider)
|
||||
|
||||
formatted_message_number = None
|
||||
if provider == BroadcastProvider.VODAFONE:
|
||||
formatted_message_number = format_sequential_number(broadcast_provider_message.message_number)
|
||||
|
||||
@@ -254,6 +254,48 @@ def test_send_broadcast_provider_message_defaults_to_test_channel_if_no_service_
|
||||
)
|
||||
|
||||
|
||||
def test_send_broadcast_provider_message_works_if_we_retried_previously(mocker, sample_service):
|
||||
template = create_template(sample_service, BROADCAST_TYPE)
|
||||
broadcast_message = create_broadcast_message(
|
||||
template,
|
||||
areas={'areas': [], 'simple_polygons': [],},
|
||||
status=BroadcastStatusType.BROADCASTING
|
||||
)
|
||||
event = create_broadcast_event(broadcast_message)
|
||||
|
||||
# an existing provider message already exists, and previously failed
|
||||
existing_provider_message = create_broadcast_provider_message(
|
||||
broadcast_event=event,
|
||||
provider='ee',
|
||||
status=BroadcastProviderMessageStatus.TECHNICAL_FAILURE
|
||||
)
|
||||
|
||||
mock_create_broadcast = mocker.patch(
|
||||
f'app.clients.cbc_proxy.CBCProxyEE.create_and_send_broadcast',
|
||||
)
|
||||
|
||||
send_broadcast_provider_message(provider='ee', broadcast_event_id=str(event.id))
|
||||
|
||||
# make sure we haven't completed a duplicate event - we shouldn't record the failure
|
||||
assert len(event.provider_messages) == 1
|
||||
|
||||
broadcast_provider_message = event.get_provider_message('ee')
|
||||
# TODO: Should be ACK, and should have an updated_at
|
||||
assert broadcast_provider_message.status == BroadcastProviderMessageStatus.TECHNICAL_FAILURE
|
||||
assert broadcast_provider_message.updated_at is None
|
||||
|
||||
mock_create_broadcast.assert_called_once_with(
|
||||
identifier=str(broadcast_provider_message.id),
|
||||
message_number=mocker.ANY,
|
||||
headline='GOV.UK Notify Broadcast',
|
||||
description='this is an emergency broadcast message',
|
||||
areas=[],
|
||||
sent=event.sent_at_as_cap_datetime_string,
|
||||
expires=event.transmitted_finishes_at_as_cap_datetime_string,
|
||||
channel='test',
|
||||
)
|
||||
|
||||
|
||||
@freeze_time('2020-08-01 12:00')
|
||||
@pytest.mark.parametrize('provider,provider_capitalised', [
|
||||
['ee', 'EE'],
|
||||
|
||||
Reference in New Issue
Block a user