Use sample_broadcast_service fixture

Now that every service has a row in the service_broadcast_settings
table, we want all our tests to use the `sample_broadcast_service`
fixture as this ensures it has a row in that table and is correctly
representitive of what a real broadcast service looks like.
This commit is contained in:
David McDonald
2021-02-19 11:33:05 +00:00
parent ce2f550387
commit 9b21e6b04f
3 changed files with 45 additions and 60 deletions

View File

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

View File

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

View File

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