diff --git a/app/models.py b/app/models.py index 226715fb4..b2f55eec3 100644 --- a/app/models.py +++ b/app/models.py @@ -2533,16 +2533,7 @@ class BroadcastProviderMessageNumber(db.Model): class ServiceBroadcastSettings(db.Model): """ - For the moment, broadcasts services CAN have a row in this table which will configure which broadcast - channel they will send to. If they don't then we will assume they should send to the test channel. - - There should only be one row per service in this table, and this is enforced by - the service_id being a primary key. - - TODO: We should enforce that every broadcast service will have a row in this table. We will need to do - this when the admin turns a service into a broadcast service, it inserts a row into this table and adds - the service permission for broadcasts for the service. Once that is up and running, we then should write - a DB migration to create rows for all broadcast services that do not have one yet in this table. + Every broadcast service should have one and only one row in this table. """ __tablename__ = "service_broadcast_settings" diff --git a/tests/app/celery/test_broadcast_message_tasks.py b/tests/app/celery/test_broadcast_message_tasks.py index 8b859c10c..5d7cf0f39 100644 --- a/tests/app/celery/test_broadcast_message_tasks.py +++ b/tests/app/celery/test_broadcast_message_tasks.py @@ -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', @@ -249,8 +244,8 @@ 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) +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 +282,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 +294,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 +327,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 +338,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 +379,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 +390,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 +438,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 +480,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 +498,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 +531,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, diff --git a/tests/app/service/test_rest.py b/tests/app/service/test_rest.py index 66712b2c6..f64dd4613 100644 --- a/tests/app/service/test_rest.py +++ b/tests/app/service/test_rest.py @@ -282,23 +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' + assert json_resp['data']['allowed_broadcast_provider'] == allowed_broadcast_provider + assert json_resp['data']['broadcast_channel'] == broadcast_channel def test_get_service_by_id_for_service_with_broadcast_permission_sets_channel_as_test_if_no_service_broadcast_settings(