mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-23 15:57:23 -04:00
Merge pull request #3854 from alphagov/admin-cancel-broadcast
Allow platform admins to cancel broadcasts.
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user