Merge pull request #3854 from alphagov/admin-cancel-broadcast

Allow platform admins to cancel broadcasts.
This commit is contained in:
Pea Tyczynska
2021-04-21 12:52:14 +01:00
committed by GitHub
7 changed files with 159 additions and 60 deletions

View File

@@ -94,6 +94,7 @@ def test_broadcast_pages_403_without_permission(
)
@pytest.mark.parametrize('user_is_platform_admin', [True, False])
@pytest.mark.parametrize('endpoint, extra_args, expected_get_status, expected_post_status', (
(
'.new_broadcast', {},
@@ -128,23 +129,27 @@ def test_broadcast_pages_403_without_permission(
'.preview_broadcast_message', {'broadcast_message_id': sample_uuid},
403, 403,
),
(
'.cancel_broadcast_message', {'broadcast_message_id': sample_uuid},
403, 403,
),
))
def test_broadcast_pages_403_for_user_without_permission(
mocker,
client_request,
service_one,
active_user_view_permissions,
platform_admin_user_no_service_permissions,
endpoint,
extra_args,
expected_get_status,
expected_post_status,
user_is_platform_admin
):
"""
Checks that users without permissions, including admin users, cannot create or edit broadcasts.
"""
service_one['permissions'] += ['broadcast']
mocker.patch('app.user_api_client.get_user', return_value=active_user_view_permissions)
if user_is_platform_admin:
client_request.login(platform_admin_user_no_service_permissions)
else:
client_request.login(active_user_view_permissions)
client_request.get(
endpoint,
service_id=SERVICE_ONE_ID,
@@ -159,6 +164,78 @@ def test_broadcast_pages_403_for_user_without_permission(
)
@pytest.mark.parametrize('user_is_platform_admin', [True, False])
def test_user_cannot_accept_broadcast_without_permission(
mocker,
client_request,
service_one,
active_user_view_permissions,
platform_admin_user_no_service_permissions,
user_is_platform_admin
):
service_one['permissions'] += ['broadcast']
if user_is_platform_admin:
client_request.login(platform_admin_user_no_service_permissions)
else:
client_request.login(active_user_view_permissions)
client_request.post(
'.approve_broadcast_message',
service_id=SERVICE_ONE_ID,
broadcast_message_id=sample_uuid,
_expected_status=403,
)
@pytest.mark.parametrize('user_is_platform_admin', [True, False])
def test_user_cannot_reject_broadcast_without_permission(
mocker,
client_request,
service_one,
active_user_view_permissions,
platform_admin_user_no_service_permissions,
user_is_platform_admin
):
service_one['permissions'] += ['broadcast']
if user_is_platform_admin:
client_request.login(platform_admin_user_no_service_permissions)
else:
client_request.login(active_user_view_permissions)
client_request.get(
'.reject_broadcast_message',
service_id=SERVICE_ONE_ID,
broadcast_message_id=sample_uuid,
_expected_status=403,
)
def test_cancel_broadcast_page_403_for_user_without_permission(
mocker,
client_request,
service_one,
active_user_view_permissions,
):
"""
separate test for cancel_broadcast endpoint, because admin users are allowed to cancel broadcasts
"""
service_one['permissions'] += ['broadcast']
mocker.patch('app.user_api_client.get_user', return_value=active_user_view_permissions)
client_request.get(
'.cancel_broadcast_message',
service_id=SERVICE_ONE_ID,
_expected_status=403,
**{'broadcast_message_id': sample_uuid}
)
client_request.post(
'.cancel_broadcast_message',
service_id=SERVICE_ONE_ID,
_expected_status=403,
**{'broadcast_message_id': sample_uuid}
)
@pytest.mark.parametrize('step_index, expected_link_text, expected_link_href', (
(1, 'Continue', partial(url_for, '.broadcast_tour', step_index=2)),
(2, 'Continue', partial(url_for, '.broadcast_tour', step_index=3)),
@@ -358,6 +435,7 @@ def test_broadcast_dashboard(
)
@pytest.mark.parametrize("user_is_platform_admin", [True, False])
@pytest.mark.parametrize('endpoint', (
'.broadcast_dashboard', '.broadcast_dashboard_previous', '.broadcast_dashboard_rejected',
))
@@ -365,11 +443,17 @@ def test_broadcast_dashboard_does_not_have_button_for_view_only_user(
client_request,
service_one,
active_user_view_permissions,
platform_admin_user_no_service_permissions,
mock_get_broadcast_messages,
endpoint,
user_is_platform_admin
):
if user_is_platform_admin:
client_request.login(platform_admin_user_no_service_permissions)
else:
client_request.login(active_user_view_permissions)
service_one['permissions'] += ['broadcast']
client_request.login(active_user_view_permissions)
page = client_request.get(
endpoint,
service_id=SERVICE_ONE_ID,
@@ -1835,14 +1919,17 @@ def test_can_approve_own_broadcast_in_trial_mode(
@freeze_time('2020-02-22T22:22:22.000000')
@pytest.mark.parametrize("user_is_platform_admin", [True, False])
def test_view_only_user_cant_approve_broadcast(
mocker,
client_request,
service_one,
active_user_with_permissions,
active_user_view_permissions,
platform_admin_user_no_service_permissions,
mock_get_broadcast_template,
fake_uuid,
user_is_platform_admin
):
mocker.patch(
'app.broadcast_message_api_client.get_broadcast_message',
@@ -1855,8 +1942,12 @@ def test_view_only_user_cant_approve_broadcast(
status='pending-approval',
),
)
if user_is_platform_admin:
current_user = platform_admin_user_no_service_permissions
else:
current_user = active_user_view_permissions
mocker.patch('app.user_api_client.get_user', side_effect=[
active_user_view_permissions, # Current user
current_user, # Current user
active_user_with_permissions, # User who created broadcast
])
service_one['permissions'] += ['broadcast']
@@ -2076,15 +2167,25 @@ def test_no_view_page_for_draft(
)
@pytest.mark.parametrize("user_is_platform_admin", [True, False])
def test_cancel_broadcast(
client_request,
service_one,
mock_get_live_broadcast_message,
mock_get_broadcast_template,
mock_update_broadcast_message_status,
platform_admin_user_no_service_permissions,
fake_uuid,
user_is_platform_admin
):
"""
users with 'send_messages' permissions and platform admins should be able to cancel broadcasts.
"""
service_one['permissions'] += ['broadcast']
if user_is_platform_admin:
client_request.login(platform_admin_user_no_service_permissions)
page = client_request.get(
'.cancel_broadcast_message',
service_id=SERVICE_ONE_ID,
@@ -2108,15 +2209,25 @@ def test_cancel_broadcast(
) not in page
@pytest.mark.parametrize("user_is_platform_admin", [True, False])
def test_confirm_cancel_broadcast(
client_request,
service_one,
mock_get_live_broadcast_message,
mock_get_broadcast_template,
mock_update_broadcast_message_status,
platform_admin_user_no_service_permissions,
fake_uuid,
user_is_platform_admin
):
"""
users with 'send_messages' permissions and platform admins should be able to cancel broadcasts.
"""
service_one['permissions'] += ['broadcast']
if user_is_platform_admin:
client_request.login(platform_admin_user_no_service_permissions)
client_request.post(
'.cancel_broadcast_message',
service_id=SERVICE_ONE_ID,

View File

@@ -39,7 +39,6 @@ from tests.conftest import (
create_active_user_with_permissions,
create_multiple_email_reply_to_addresses,
create_multiple_sms_senders,
create_platform_admin_user,
create_template,
mock_get_service_email_template,
mock_get_service_letter_template,
@@ -1614,13 +1613,14 @@ def test_no_link_to_use_existing_list_for_service_without_lists(
client_request,
mock_get_service_template,
mock_has_jobs,
platform_admin_user,
fake_uuid,
):
mocker.patch(
'app.models.contact_list.ContactLists.client_method',
return_value=[],
)
client_request.login(create_platform_admin_user())
client_request.login(platform_admin_user)
page = client_request.get(
'main.send_one_off',
service_id=SERVICE_ONE_ID,