From 0507e8d9ada84f146dfd6840fbe6d7add0e0e6c1 Mon Sep 17 00:00:00 2001 From: Ben Thorner Date: Mon, 19 Apr 2021 16:54:25 +0100 Subject: [PATCH] Raise 403 when broadcasting on a suspended service This mirrors the approach we take for jobs [1]. [1]: https://github.com/alphagov/notifications-api/blob/3d71815956eb930a1683d47e60d8c4a53974fd32/app/job/rest.py#L146 --- app/broadcast_message/rest.py | 3 +++ tests/app/broadcast_message/test_rest.py | 16 ++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/app/broadcast_message/rest.py b/app/broadcast_message/rest.py index 975959154..37f0385aa 100644 --- a/app/broadcast_message/rest.py +++ b/app/broadcast_message/rest.py @@ -176,6 +176,9 @@ def update_broadcast_message_status(service_id, broadcast_message_id): validate(data, update_broadcast_message_status_schema) broadcast_message = dao_get_broadcast_message_by_id_and_service_id(broadcast_message_id, service_id) + if not broadcast_message.service.active: + raise InvalidRequest("Updating broadcast message is not allowed: service is inactive ", 403) + new_status = data['status'] updating_user = get_user_by_id(data['created_by']) diff --git a/tests/app/broadcast_message/test_rest.py b/tests/app/broadcast_message/test_rest.py index 92abfde4f..494c2aa5d 100644 --- a/tests/app/broadcast_message/test_rest.py +++ b/tests/app/broadcast_message/test_rest.py @@ -604,6 +604,22 @@ def test_update_broadcast_message_status_updates_details_but_does_not_queue_task assert len(mock_task.mock_calls) == 0 +def test_update_broadcast_message_status_aborts_if_service_is_suspended( + admin_request, + sample_broadcast_service, +): + bm = create_broadcast_message(service=sample_broadcast_service, content='test') + sample_broadcast_service.active = False + + admin_request.post( + 'broadcast_message.update_broadcast_message_status', + _data={'status': BroadcastStatusType.BROADCASTING, 'created_by': str(uuid.uuid4())}, + service_id=sample_broadcast_service.id, + broadcast_message_id=bm.id, + _expected_status=403 + ) + + def test_update_broadcast_message_status_creates_event_with_correct_content_if_broadcast_has_no_template( admin_request, sample_broadcast_service,