mirror of
https://github.com/GSA/notifications-api.git
synced 2025-12-21 16:01:15 -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):
|
def send_broadcast_provider_message(self, broadcast_event_id, provider):
|
||||||
broadcast_event = dao_get_broadcast_event_by_id(broadcast_event_id)
|
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)
|
broadcast_provider_message = create_broadcast_provider_message(broadcast_event, provider)
|
||||||
|
|
||||||
formatted_message_number = None
|
formatted_message_number = None
|
||||||
if provider == BroadcastProvider.VODAFONE:
|
if provider == BroadcastProvider.VODAFONE:
|
||||||
formatted_message_number = format_sequential_number(broadcast_provider_message.message_number)
|
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')
|
@freeze_time('2020-08-01 12:00')
|
||||||
@pytest.mark.parametrize('provider,provider_capitalised', [
|
@pytest.mark.parametrize('provider,provider_capitalised', [
|
||||||
['ee', 'EE'],
|
['ee', 'EE'],
|
||||||
|
|||||||
Reference in New Issue
Block a user