diff --git a/app/celery/broadcast_message_tasks.py b/app/celery/broadcast_message_tasks.py index ce80ea54f..e27edbe08 100644 --- a/app/celery/broadcast_message_tasks.py +++ b/app/celery/broadcast_message_tasks.py @@ -6,7 +6,7 @@ from sqlalchemy.schema import Sequence from app import cbc_proxy_client, db, notify_celery from app.config import QueueNames -from app.models import BroadcastEventMessageType, BroadcastProvider +from app.models import BroadcastEventMessageType, BroadcastProvider, BroadcastProviderMessageType from app.dao.broadcast_message_dao import dao_get_broadcast_event_by_id, create_broadcast_provider_message from app.utils import format_sequential_number @@ -34,8 +34,10 @@ def send_broadcast_provider_message(broadcast_event_id, provider): broadcast_provider_message, message_number = create_broadcast_provider_message(broadcast_event, provider) formatted_message_number = None + message_format = BroadcastProviderMessageType.CBC if provider == BroadcastProvider.VODAFONE: formatted_message_number = format_sequential_number(message_number.broadcast_provider_message_number) + message_format = BroadcastProviderMessageType.IBAG current_app.logger.info( f'invoking cbc proxy to send ' @@ -54,6 +56,7 @@ def send_broadcast_provider_message(broadcast_event_id, provider): cbc_proxy_provider_client.create_and_send_broadcast( identifier=str(broadcast_provider_message.id), message_number=formatted_message_number, + message_format=message_format, headline="GOV.UK Notify Broadcast", description=broadcast_event.transmitted_content['body'], areas=areas, @@ -64,6 +67,7 @@ def send_broadcast_provider_message(broadcast_event_id, provider): cbc_proxy_provider_client.update_and_send_broadcast( identifier=str(broadcast_provider_message.id), message_number=formatted_message_number, + message_format=message_format, headline="GOV.UK Notify Broadcast", description=broadcast_event.transmitted_content['body'], areas=areas, @@ -75,6 +79,7 @@ def send_broadcast_provider_message(broadcast_event_id, provider): cbc_proxy_provider_client.cancel_broadcast( identifier=str(broadcast_provider_message.id), message_number=formatted_message_number, + message_format=message_format, headline="GOV.UK Notify Broadcast", description=broadcast_event.transmitted_content['body'], areas=areas, diff --git a/app/clients/cbc_proxy.py b/app/clients/cbc_proxy.py index 2b95d2763..9cf9fb2bc 100644 --- a/app/clients/cbc_proxy.py +++ b/app/clients/cbc_proxy.py @@ -62,23 +62,30 @@ class CBCProxyClientBase: def send_link_test( self, identifier, - sequential_number + sequential_number, + message_format ): """ link test - open up a connection to a specific provider, and send them an xml payload with a of test. """ - payload = {'message_type': 'test', 'identifier': identifier, 'message_number': sequential_number} + payload = { + 'message_type': 'test', + 'identifier': identifier, + 'message_number': sequential_number, + 'message_format': message_format + } self._invoke_lambda(payload=payload) def create_and_send_broadcast( - self, identifier, message_number, headline, description, areas, sent, expires, + self, identifier, message_number, message_format, headline, description, areas, sent, expires, ): payload = { 'message_type': 'alert', 'identifier': identifier, 'message_number': message_number, + 'message_format': message_format, 'headline': headline, 'description': description, 'areas': areas, @@ -91,7 +98,7 @@ class CBCProxyClientBase: def update_and_send_broadcast( self, identifier, previous_provider_messages, headline, description, areas, - sent, expires, + sent, expires, message_number, message_format ): pass @@ -99,7 +106,7 @@ class CBCProxyClientBase: def cancel_broadcast( self, identifier, previous_provider_messages, headline, description, areas, - sent, expires, + sent, expires, message_number, message_format ): pass diff --git a/app/models.py b/app/models.py index 494842b6b..e88308f99 100644 --- a/app/models.py +++ b/app/models.py @@ -2453,6 +2453,11 @@ class BroadcastProvider: PROVIDERS = [EE, VODAFONE, THREE, O2] +class BroadcastProviderMessageType: + CBC = 'cbc' + IBAG = 'ibag' + + class BroadcastProviderMessageStatus: TECHNICAL_FAILURE = 'technical-failure' # Couldn’t send (cbc proxy 5xx/4xx) SENDING = 'sending' # Sent to cbc, awaiting response diff --git a/tests/app/celery/test_broadcast_message_tasks.py b/tests/app/celery/test_broadcast_message_tasks.py index e49db47e7..547c95c84 100644 --- a/tests/app/celery/test_broadcast_message_tasks.py +++ b/tests/app/celery/test_broadcast_message_tasks.py @@ -105,7 +105,13 @@ def test_send_broadcast_event_does_nothing_if_cbc_proxy_disabled(mocker, notify_ @freeze_time('2020-08-01 12:00') -def test_send_broadcast_provider_message_sends_data_correctly(mocker, sample_service): +@pytest.mark.parametrize('provider,provider_capitalised,message_format', [ + ['ee', 'EE', 'cbc'], + ['vodafone', 'Vodafone', 'ibag'], +]) +def test_send_broadcast_provider_message_sends_data_correctly( + mocker, sample_service, provider, provider_capitalised, message_format +): template = create_template(sample_service, BROADCAST_TYPE) broadcast_message = create_broadcast_message( template, @@ -121,19 +127,20 @@ def test_send_broadcast_provider_message_sends_data_correctly(mocker, sample_ser event = create_broadcast_event(broadcast_message) mock_create_broadcast = mocker.patch( - 'app.clients.cbc_proxy.CBCProxyEE.create_and_send_broadcast', + f'app.clients.cbc_proxy.CBCProxy{provider_capitalised}.create_and_send_broadcast', ) - assert event.get_provider_message('ee') is None + assert event.get_provider_message(provider) is None - send_broadcast_provider_message(provider='ee', broadcast_event_id=str(event.id)) + send_broadcast_provider_message(provider=provider, broadcast_event_id=str(event.id)) - broadcast_provider_message = event.get_provider_message('ee') + broadcast_provider_message = event.get_provider_message(provider) assert broadcast_provider_message.status == BroadcastProviderMessageStatus.SENDING mock_create_broadcast.assert_called_once_with( identifier=str(broadcast_provider_message.id), message_number=mocker.ANY, + message_format=message_format, headline='GOV.UK Notify Broadcast', description='this is an emergency broadcast message', areas=[{ @@ -150,7 +157,13 @@ def test_send_broadcast_provider_message_sends_data_correctly(mocker, sample_ser ) -def test_send_broadcast_provider_message_sends_update_with_references(mocker, sample_service): +@pytest.mark.parametrize('provider,provider_capitalised,message_format', [ + ['ee', 'EE', 'cbc'], + ['vodafone', 'Vodafone', 'ibag'], +]) +def test_send_broadcast_provider_message_sends_update_with_references( + mocker, sample_service, provider, provider_capitalised, message_format +): template = create_template(sample_service, BROADCAST_TYPE, content='content') broadcast_message = create_broadcast_message( @@ -165,35 +178,42 @@ def test_send_broadcast_provider_message_sends_update_with_references(mocker, sa ) alert_event = create_broadcast_event(broadcast_message, message_type=BroadcastEventMessageType.ALERT) - create_broadcast_provider_message(alert_event, 'ee') + create_broadcast_provider_message(alert_event, provider) update_event = create_broadcast_event(broadcast_message, message_type=BroadcastEventMessageType.UPDATE) mock_update_broadcast = mocker.patch( - 'app.clients.cbc_proxy.CBCProxyEE.update_and_send_broadcast', + f'app.clients.cbc_proxy.CBCProxy{provider_capitalised}.update_and_send_broadcast', ) - send_broadcast_provider_message(provider='ee', broadcast_event_id=str(update_event.id)) + send_broadcast_provider_message(provider=provider, broadcast_event_id=str(update_event.id)) - broadcast_provider_message = update_event.get_provider_message('ee') + broadcast_provider_message = update_event.get_provider_message(provider) assert broadcast_provider_message.status == BroadcastProviderMessageStatus.SENDING mock_update_broadcast.assert_called_once_with( identifier=str(broadcast_provider_message.id), message_number=mocker.ANY, + message_format=message_format, headline="GOV.UK Notify Broadcast", description='this is an emergency broadcast message', areas=[{ "polygon": [[50.12, 1.2], [50.13, 1.2], [50.14, 1.21]], }], previous_provider_messages=[ - alert_event.get_provider_message('ee') + alert_event.get_provider_message(provider) ], sent=update_event.sent_at_as_cap_datetime_string, expires=update_event.transmitted_finishes_at_as_cap_datetime_string, ) -def test_send_broadcast_provider_message_sends_cancel_with_references(mocker, sample_service): +@pytest.mark.parametrize('provider,provider_capitalised,message_format', [ + ['ee', 'EE', 'cbc'], + ['vodafone', 'Vodafone', 'ibag'], +]) +def test_send_broadcast_provider_message_sends_cancel_with_references( + mocker, sample_service, provider, provider_capitalised, message_format +): template = create_template(sample_service, BROADCAST_TYPE, content='content') broadcast_message = create_broadcast_message( @@ -211,29 +231,30 @@ def test_send_broadcast_provider_message_sends_cancel_with_references(mocker, sa update_event = create_broadcast_event(broadcast_message, message_type=BroadcastEventMessageType.UPDATE) cancel_event = create_broadcast_event(broadcast_message, message_type=BroadcastEventMessageType.CANCEL) - create_broadcast_provider_message(alert_event, 'ee') - create_broadcast_provider_message(update_event, 'ee') + create_broadcast_provider_message(alert_event, provider) + create_broadcast_provider_message(update_event, provider) mock_cancel_broadcast = mocker.patch( - 'app.clients.cbc_proxy.CBCProxyEE.cancel_broadcast', + f'app.clients.cbc_proxy.CBCProxy{provider_capitalised}.cancel_broadcast', ) - send_broadcast_provider_message(provider='ee', broadcast_event_id=str(cancel_event.id)) + send_broadcast_provider_message(provider=provider, broadcast_event_id=str(cancel_event.id)) - broadcast_provider_message = cancel_event.get_provider_message('ee') + broadcast_provider_message = cancel_event.get_provider_message(provider) assert broadcast_provider_message.status == BroadcastProviderMessageStatus.SENDING mock_cancel_broadcast.assert_called_once_with( identifier=str(broadcast_provider_message.id), message_number=mocker.ANY, + message_format=message_format, headline="GOV.UK Notify Broadcast", description='this is an emergency broadcast message', areas=[{ "polygon": [[50.12, 1.2], [50.13, 1.2], [50.14, 1.21]], }], previous_provider_messages=[ - alert_event.get_provider_message('ee'), - update_event.get_provider_message('ee') + alert_event.get_provider_message(provider), + update_event.get_provider_message(provider) ], sent=cancel_event.sent_at_as_cap_datetime_string, expires=cancel_event.transmitted_finishes_at_as_cap_datetime_string, @@ -269,6 +290,7 @@ def test_send_broadcast_provider_message_errors(mocker, sample_service): mock_create_broadcast.assert_called_once_with( identifier=ANY, message_number=mocker.ANY, + message_format='cbc', headline="GOV.UK Notify Broadcast", description='this is an emergency broadcast message', areas=[{ diff --git a/tests/app/clients/test_cbc_proxy.py b/tests/app/clients/test_cbc_proxy.py index 31398f391..eeb242727 100644 --- a/tests/app/clients/test_cbc_proxy.py +++ b/tests/app/clients/test_cbc_proxy.py @@ -84,6 +84,7 @@ def test_cbc_proxy_create_and_send_invokes_function(mocker, cbc_proxy_ee): cbc_proxy_ee.create_and_send_broadcast( identifier=identifier, message_number='0000007b', + message_format='cbc', headline=headline, description=description, areas=areas, @@ -102,6 +103,7 @@ def test_cbc_proxy_create_and_send_invokes_function(mocker, cbc_proxy_ee): assert payload['identifier'] == identifier assert payload['message_number'] == '0000007b' + assert payload['message_format'] == 'cbc' assert payload['message_type'] == 'alert' assert payload['headline'] == headline assert payload['description'] == description @@ -144,6 +146,7 @@ def test_cbc_proxy_create_and_send_handles_invoke_error(mocker, cbc_proxy_ee): cbc_proxy_ee.create_and_send_broadcast( identifier=identifier, message_number='0000007b', + message_format='cbc', headline=headline, description=description, areas=areas, @@ -194,6 +197,7 @@ def test_cbc_proxy_create_and_send_handles_function_error(mocker, cbc_proxy_ee): cbc_proxy_ee.create_and_send_broadcast( identifier=identifier, message_number='0000007b', + message_format='cbc', headline=headline, description=description, areas=areas, @@ -256,7 +260,8 @@ def test_cbc_proxy_send_link_test_invokes_function(mocker, cbc_proxy_ee): cbc_proxy_ee.send_link_test( identifier=identifier, - sequential_number='0000007b' + sequential_number='0000007b', + message_format='cbc' ) ld_client_mock.invoke.assert_called_once_with( @@ -272,3 +277,4 @@ def test_cbc_proxy_send_link_test_invokes_function(mocker, cbc_proxy_ee): assert payload['identifier'] == identifier assert payload['message_type'] == 'test' assert payload['message_number'] == '0000007b' + assert payload['message_format'] == 'cbc'