Send message format to CBC

Either cap or ibag
This commit is contained in:
Pea Tyczynska
2020-12-08 11:12:48 +00:00
parent 9e4176ac50
commit 553565bc91
5 changed files with 71 additions and 26 deletions

View File

@@ -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,

View File

@@ -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 <msgType> 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

View File

@@ -2453,6 +2453,11 @@ class BroadcastProvider:
PROVIDERS = [EE, VODAFONE, THREE, O2]
class BroadcastProviderMessageType:
CBC = 'cbc'
IBAG = 'ibag'
class BroadcastProviderMessageStatus:
TECHNICAL_FAILURE = 'technical-failure' # Couldnt send (cbc proxy 5xx/4xx)
SENDING = 'sending' # Sent to cbc, awaiting response

View File

@@ -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=[{

View File

@@ -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'