diff --git a/app/schemas.py b/app/schemas.py index 41d487608..f8b510f7b 100644 --- a/app/schemas.py +++ b/app/schemas.py @@ -25,7 +25,7 @@ from notifications_utils.recipients import ( from app import ma from app import models -from app.models import ServicePermission +from app.models import ServicePermission, BROADCAST_TYPE from app.dao.permissions_dao import permission_dao from app.utils import DATETIME_FORMAT_NO_TIMEZONE, get_template_instance @@ -242,7 +242,14 @@ class ServiceSchema(BaseSchema, UUIDsAsStringsMixin): return service.allowed_broadcast_provider def _get_broadcast_channel(self, service): - return service.broadcast_channel + # TODO: Once we've migrated data so that all broadcast services have `service.broadcast_channel` + # set then we can remove this logic and related tests and instead just return + # `service.broadcast_channel`. For the moment though, as we have some services with the broadcast + # permission that do not have a row in the service_broadcast_settings table, we need to hardcode + # this in here to give them a default that the admin app can use + if BROADCAST_TYPE in self.service_permissions(service): + return service.broadcast_channel if service.broadcast_channel else "test" + return None def get_letter_logo_filename(self, service): return service.letter_branding and service.letter_branding.filename diff --git a/tests/app/service/test_rest.py b/tests/app/service/test_rest.py index 128afb392..88a714349 100644 --- a/tests/app/service/test_rest.py +++ b/tests/app/service/test_rest.py @@ -292,6 +292,38 @@ def test_get_service_by_id_returns_allowed_broadcast_provider(notify_db, admin_r 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 +): + assert sample_broadcast_service.broadcast_channel == 'severe' + + 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 == 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'] == None + + @pytest.mark.parametrize('detailed', [True, False]) def test_get_service_by_id_returns_organisation_type(admin_request, sample_service, detailed): json_resp = admin_request.get('service.get_service_by_id', service_id=sample_service.id, detailed=detailed)