mirror of
https://github.com/GSA/notifications-api.git
synced 2026-08-18 21:48:49 -04:00
Merge pull request #3155 from alphagov/migrate-broadcast-settings
Backfill services_broadcast_settings table
This commit is contained in:
@@ -10,8 +10,7 @@ from app.models import (
|
||||
BROADCAST_TYPE,
|
||||
BroadcastStatusType,
|
||||
BroadcastEventMessageType,
|
||||
BroadcastProviderMessageStatus,
|
||||
ServiceBroadcastSettings,
|
||||
BroadcastProviderMessageStatus
|
||||
)
|
||||
from app.clients.cbc_proxy import CBCProxyRetryableException, CBCProxyFatalException
|
||||
from app.celery.broadcast_message_tasks import (
|
||||
@@ -31,8 +30,8 @@ from tests.app.db import (
|
||||
from tests.conftest import set_config
|
||||
|
||||
|
||||
def test_send_broadcast_event_queues_up_for_active_providers(mocker, notify_api, sample_service):
|
||||
template = create_template(sample_service, BROADCAST_TYPE)
|
||||
def test_send_broadcast_event_queues_up_for_active_providers(mocker, notify_api, sample_broadcast_service):
|
||||
template = create_template(sample_broadcast_service, BROADCAST_TYPE)
|
||||
broadcast_message = create_broadcast_message(template, status=BroadcastStatusType.BROADCASTING)
|
||||
event = create_broadcast_event(broadcast_message)
|
||||
|
||||
@@ -53,12 +52,10 @@ def test_send_broadcast_event_only_sends_to_one_provider_if_set_on_service(
|
||||
mocker,
|
||||
notify_db,
|
||||
notify_api,
|
||||
sample_service
|
||||
sample_broadcast_service
|
||||
):
|
||||
settings = ServiceBroadcastSettings(service=sample_service, channel="test", provider="vodafone")
|
||||
notify_db.session.add(settings)
|
||||
|
||||
template = create_template(sample_service, BROADCAST_TYPE)
|
||||
sample_broadcast_service.allowed_broadcast_provider = "vodafone"
|
||||
template = create_template(sample_broadcast_service, BROADCAST_TYPE)
|
||||
broadcast_message = create_broadcast_message(template, status=BroadcastStatusType.BROADCASTING)
|
||||
event = create_broadcast_event(broadcast_message)
|
||||
|
||||
@@ -78,12 +75,10 @@ def test_send_broadcast_event_does_nothing_if_provider_set_on_service_isnt_enabl
|
||||
mocker,
|
||||
notify_db,
|
||||
notify_api,
|
||||
sample_service
|
||||
sample_broadcast_service
|
||||
):
|
||||
settings = ServiceBroadcastSettings(service=sample_service, channel="test", provider="three")
|
||||
notify_db.session.add(settings)
|
||||
|
||||
template = create_template(sample_service, BROADCAST_TYPE)
|
||||
sample_broadcast_service.allowed_broadcast_provider = "three"
|
||||
template = create_template(sample_broadcast_service, BROADCAST_TYPE)
|
||||
broadcast_message = create_broadcast_message(template, status=BroadcastStatusType.BROADCASTING)
|
||||
event = create_broadcast_event(broadcast_message)
|
||||
|
||||
@@ -117,9 +112,9 @@ def test_send_broadcast_event_does_nothing_if_cbc_proxy_disabled(mocker, notify_
|
||||
['vodafone', 'Vodafone'],
|
||||
])
|
||||
def test_send_broadcast_provider_message_sends_data_correctly(
|
||||
mocker, sample_service, provider, provider_capitalised
|
||||
mocker, sample_broadcast_service, provider, provider_capitalised
|
||||
):
|
||||
template = create_template(sample_service, BROADCAST_TYPE)
|
||||
template = create_template(sample_broadcast_service, BROADCAST_TYPE)
|
||||
broadcast_message = create_broadcast_message(
|
||||
template,
|
||||
areas={
|
||||
@@ -160,7 +155,7 @@ def test_send_broadcast_provider_message_sends_data_correctly(
|
||||
}],
|
||||
sent=event.sent_at_as_cap_datetime_string,
|
||||
expires=event.transmitted_finishes_at_as_cap_datetime_string,
|
||||
channel="test",
|
||||
channel="severe",
|
||||
)
|
||||
|
||||
|
||||
@@ -173,9 +168,10 @@ def test_send_broadcast_provider_message_sends_data_correctly(
|
||||
])
|
||||
@pytest.mark.parametrize('channel', ['test', 'severe'])
|
||||
def test_send_broadcast_provider_message_uses_channel_set_on_broadcast_service(
|
||||
notify_db, mocker, sample_service, provider, provider_capitalised, channel
|
||||
notify_db, mocker, sample_broadcast_service, provider, provider_capitalised, channel
|
||||
):
|
||||
template = create_template(sample_service, BROADCAST_TYPE)
|
||||
sample_broadcast_service.broadcast_channel = channel
|
||||
template = create_template(sample_broadcast_service, BROADCAST_TYPE)
|
||||
broadcast_message = create_broadcast_message(
|
||||
template,
|
||||
areas={
|
||||
@@ -188,7 +184,6 @@ def test_send_broadcast_provider_message_uses_channel_set_on_broadcast_service(
|
||||
status=BroadcastStatusType.BROADCASTING
|
||||
)
|
||||
event = create_broadcast_event(broadcast_message)
|
||||
notify_db.session.add(ServiceBroadcastSettings(service=sample_service, channel=channel))
|
||||
|
||||
mock_create_broadcast = mocker.patch(
|
||||
f'app.clients.cbc_proxy.CBCProxy{provider_capitalised}.create_and_send_broadcast',
|
||||
@@ -208,49 +203,8 @@ def test_send_broadcast_provider_message_uses_channel_set_on_broadcast_service(
|
||||
)
|
||||
|
||||
|
||||
@freeze_time('2020-08-01 12:00')
|
||||
@pytest.mark.parametrize('provider,provider_capitalised', [
|
||||
['ee', 'EE'],
|
||||
['three', 'Three'],
|
||||
['o2', 'O2'],
|
||||
['vodafone', 'Vodafone'],
|
||||
])
|
||||
def test_send_broadcast_provider_message_defaults_to_test_channel_if_no_service_broadcast_settings(
|
||||
notify_db, mocker, sample_service, provider, provider_capitalised
|
||||
):
|
||||
template = create_template(sample_service, BROADCAST_TYPE)
|
||||
broadcast_message = create_broadcast_message(
|
||||
template,
|
||||
areas={
|
||||
'areas': ['london', 'glasgow'],
|
||||
'simple_polygons': [
|
||||
[[50.12, 1.2], [50.13, 1.2], [50.14, 1.21]],
|
||||
[[-4.53, 55.72], [-3.88, 55.72], [-3.88, 55.96], [-4.53, 55.96]],
|
||||
],
|
||||
},
|
||||
status=BroadcastStatusType.BROADCASTING
|
||||
)
|
||||
event = create_broadcast_event(broadcast_message)
|
||||
mock_create_broadcast = mocker.patch(
|
||||
f'app.clients.cbc_proxy.CBCProxy{provider_capitalised}.create_and_send_broadcast',
|
||||
)
|
||||
|
||||
send_broadcast_provider_message(provider=provider, broadcast_event_id=str(event.id))
|
||||
|
||||
mock_create_broadcast.assert_called_once_with(
|
||||
identifier=mocker.ANY,
|
||||
message_number=mocker.ANY,
|
||||
headline='GOV.UK Notify Broadcast',
|
||||
description='this is an emergency broadcast message',
|
||||
areas=mocker.ANY,
|
||||
sent=mocker.ANY,
|
||||
expires=mocker.ANY,
|
||||
channel="test",
|
||||
)
|
||||
|
||||
|
||||
def test_send_broadcast_provider_message_works_if_we_retried_previously(mocker, sample_service):
|
||||
template = create_template(sample_service, BROADCAST_TYPE)
|
||||
def test_send_broadcast_provider_message_works_if_we_retried_previously(mocker, sample_broadcast_service):
|
||||
template = create_template(sample_broadcast_service, BROADCAST_TYPE)
|
||||
broadcast_message = create_broadcast_message(
|
||||
template,
|
||||
areas={'areas': [], 'simple_polygons': [], },
|
||||
@@ -287,7 +241,7 @@ def test_send_broadcast_provider_message_works_if_we_retried_previously(mocker,
|
||||
areas=[],
|
||||
sent=event.sent_at_as_cap_datetime_string,
|
||||
expires=event.transmitted_finishes_at_as_cap_datetime_string,
|
||||
channel='test',
|
||||
channel='severe',
|
||||
)
|
||||
|
||||
|
||||
@@ -299,10 +253,10 @@ def test_send_broadcast_provider_message_works_if_we_retried_previously(mocker,
|
||||
['vodafone', 'Vodafone'],
|
||||
])
|
||||
def test_send_broadcast_provider_message_sends_data_correctly_when_broadcast_message_has_no_template(
|
||||
mocker, sample_service, provider, provider_capitalised
|
||||
mocker, sample_broadcast_service, provider, provider_capitalised
|
||||
):
|
||||
broadcast_message = create_broadcast_message(
|
||||
service=sample_service,
|
||||
service=sample_broadcast_service,
|
||||
template=None,
|
||||
content='this is an emergency broadcast message',
|
||||
areas={
|
||||
@@ -332,7 +286,7 @@ def test_send_broadcast_provider_message_sends_data_correctly_when_broadcast_mes
|
||||
areas=mocker.ANY,
|
||||
sent=mocker.ANY,
|
||||
expires=mocker.ANY,
|
||||
channel="test"
|
||||
channel="severe"
|
||||
)
|
||||
|
||||
|
||||
@@ -343,9 +297,9 @@ def test_send_broadcast_provider_message_sends_data_correctly_when_broadcast_mes
|
||||
['vodafone', 'Vodafone'],
|
||||
])
|
||||
def test_send_broadcast_provider_message_sends_update_with_references(
|
||||
mocker, sample_service, provider, provider_capitalised
|
||||
mocker, sample_broadcast_service, provider, provider_capitalised
|
||||
):
|
||||
template = create_template(sample_service, BROADCAST_TYPE, content='content')
|
||||
template = create_template(sample_broadcast_service, BROADCAST_TYPE, content='content')
|
||||
|
||||
broadcast_message = create_broadcast_message(
|
||||
template,
|
||||
@@ -384,7 +338,7 @@ def test_send_broadcast_provider_message_sends_update_with_references(
|
||||
],
|
||||
sent=update_event.sent_at_as_cap_datetime_string,
|
||||
expires=update_event.transmitted_finishes_at_as_cap_datetime_string,
|
||||
channel="test"
|
||||
channel="severe"
|
||||
)
|
||||
|
||||
|
||||
@@ -395,9 +349,9 @@ def test_send_broadcast_provider_message_sends_update_with_references(
|
||||
['vodafone', 'Vodafone'],
|
||||
])
|
||||
def test_send_broadcast_provider_message_sends_cancel_with_references(
|
||||
mocker, sample_service, provider, provider_capitalised
|
||||
mocker, sample_broadcast_service, provider, provider_capitalised
|
||||
):
|
||||
template = create_template(sample_service, BROADCAST_TYPE, content='content')
|
||||
template = create_template(sample_broadcast_service, BROADCAST_TYPE, content='content')
|
||||
|
||||
broadcast_message = create_broadcast_message(
|
||||
template,
|
||||
@@ -443,8 +397,8 @@ def test_send_broadcast_provider_message_sends_cancel_with_references(
|
||||
['o2', 'O2'],
|
||||
['vodafone', 'Vodafone'],
|
||||
])
|
||||
def test_send_broadcast_provider_message_errors(mocker, sample_service, provider, provider_capitalised):
|
||||
template = create_template(sample_service, BROADCAST_TYPE)
|
||||
def test_send_broadcast_provider_message_errors(mocker, sample_broadcast_service, provider, provider_capitalised):
|
||||
template = create_template(sample_broadcast_service, BROADCAST_TYPE)
|
||||
|
||||
broadcast_message = create_broadcast_message(
|
||||
template,
|
||||
@@ -485,7 +439,7 @@ def test_send_broadcast_provider_message_errors(mocker, sample_service, provider
|
||||
}],
|
||||
sent=event.sent_at_as_cap_datetime_string,
|
||||
expires=event.transmitted_finishes_at_as_cap_datetime_string,
|
||||
channel="test"
|
||||
channel="severe"
|
||||
)
|
||||
mock_retry.assert_called_once_with(
|
||||
countdown=1,
|
||||
@@ -503,11 +457,11 @@ def test_send_broadcast_provider_message_errors(mocker, sample_service, provider
|
||||
])
|
||||
def test_send_broadcast_provider_message_delays_retry_exponentially(
|
||||
mocker,
|
||||
sample_service,
|
||||
sample_broadcast_service,
|
||||
num_retries,
|
||||
expected_countdown
|
||||
):
|
||||
template = create_template(sample_service, BROADCAST_TYPE)
|
||||
template = create_template(sample_broadcast_service, BROADCAST_TYPE)
|
||||
|
||||
broadcast_message = create_broadcast_message(template, status=BroadcastStatusType.BROADCASTING)
|
||||
event = create_broadcast_event(broadcast_message)
|
||||
@@ -536,7 +490,7 @@ def test_send_broadcast_provider_message_delays_retry_exponentially(
|
||||
areas=[],
|
||||
sent=event.sent_at_as_cap_datetime_string,
|
||||
expires=event.transmitted_finishes_at_as_cap_datetime_string,
|
||||
channel='test',
|
||||
channel='severe',
|
||||
)
|
||||
mock_retry.assert_called_once_with(
|
||||
countdown=expected_countdown,
|
||||
|
||||
@@ -282,45 +282,22 @@ def test_get_service_by_id(admin_request, sample_service):
|
||||
}
|
||||
|
||||
|
||||
def test_get_service_by_id_returns_allowed_broadcast_provider(notify_db, admin_request, sample_service):
|
||||
settings = ServiceBroadcastSettings(service=sample_service, channel="severe", provider="ee")
|
||||
notify_db.session.add(settings)
|
||||
|
||||
json_resp = admin_request.get('service.get_service_by_id', service_id=sample_service.id)
|
||||
assert json_resp['data']['id'] == str(sample_service.id)
|
||||
assert json_resp['data']['allowed_broadcast_provider'] == 'ee'
|
||||
|
||||
|
||||
def test_get_service_by_id_for_broadcast_service_takes_channel_from_service_broadcast_settings(
|
||||
admin_request, sample_broadcast_service
|
||||
@pytest.mark.parametrize('broadcast_channel,allowed_broadcast_provider', (
|
||||
('test', None),
|
||||
('severe', None),
|
||||
('test', 'ee'),
|
||||
('severe', 'three'),
|
||||
))
|
||||
def test_get_service_by_id_for_broadcast_service_returns_broadcast_keys(
|
||||
notify_db, admin_request, sample_broadcast_service, broadcast_channel, allowed_broadcast_provider
|
||||
):
|
||||
assert sample_broadcast_service.broadcast_channel == 'severe'
|
||||
sample_broadcast_service.broadcast_channel = broadcast_channel
|
||||
sample_broadcast_service.allowed_broadcast_provider = allowed_broadcast_provider
|
||||
|
||||
json_resp = admin_request.get('service.get_service_by_id', service_id=sample_broadcast_service.id)
|
||||
assert json_resp['data']['id'] == str(sample_broadcast_service.id)
|
||||
assert json_resp['data']['broadcast_channel'] == 'severe'
|
||||
|
||||
|
||||
def test_get_service_by_id_for_service_with_broadcast_permission_sets_channel_as_test_if_no_service_broadcast_settings(
|
||||
admin_request, notify_db_session
|
||||
):
|
||||
service = create_service(service_permissions=[BROADCAST_TYPE])
|
||||
assert BROADCAST_TYPE in [p.permission for p in service.permissions]
|
||||
assert service.broadcast_channel is None
|
||||
|
||||
json_resp = admin_request.get('service.get_service_by_id', service_id=service.id)
|
||||
assert json_resp['data']['id'] == str(service.id)
|
||||
assert json_resp['data']['broadcast_channel'] == 'test'
|
||||
|
||||
|
||||
def test_get_service_by_id_for_non_broadcast_service_sets_channel_as_none(
|
||||
admin_request, sample_service
|
||||
):
|
||||
assert BROADCAST_TYPE not in [p.permission for p in sample_service.permissions]
|
||||
|
||||
json_resp = admin_request.get('service.get_service_by_id', service_id=sample_service.id)
|
||||
assert json_resp['data']['id'] == str(sample_service.id)
|
||||
assert json_resp['data']['broadcast_channel'] is None
|
||||
assert json_resp['data']['allowed_broadcast_provider'] == allowed_broadcast_provider
|
||||
assert json_resp['data']['broadcast_channel'] == broadcast_channel
|
||||
|
||||
|
||||
@pytest.mark.parametrize('detailed', [True, False])
|
||||
|
||||
Reference in New Issue
Block a user