Add a separate page for rejected alerts

We don’t want to mix these up with alerts that actually went out.
This commit is contained in:
Chris Hill-Scott
2021-04-08 13:09:29 +01:00
parent 9977028a83
commit dc4db4951a
5 changed files with 77 additions and 6 deletions

View File

@@ -51,7 +51,6 @@ def broadcast_dashboard_previous(service_id):
broadcasts=BroadcastMessages(service_id).with_status( broadcasts=BroadcastMessages(service_id).with_status(
'cancelled', 'cancelled',
'completed', 'completed',
'rejected',
), ),
page_title='Previous alerts', page_title='Previous alerts',
empty_message='You do not have any previous alerts', empty_message='You do not have any previous alerts',
@@ -59,6 +58,21 @@ def broadcast_dashboard_previous(service_id):
) )
@main.route('/services/<uuid:service_id>/rejected-alerts')
@user_has_permissions()
@service_has_permission('broadcast')
def broadcast_dashboard_rejected(service_id):
return render_template(
'views/broadcast/previous-broadcasts.html',
broadcasts=BroadcastMessages(service_id).with_status(
'rejected',
),
page_title='Rejected alerts',
empty_message='You do not have any rejected alerts',
view_broadcast_endpoint='.view_rejected_broadcast',
)
@main.route('/services/<uuid:service_id>/broadcast-dashboard.json') @main.route('/services/<uuid:service_id>/broadcast-dashboard.json')
@user_has_permissions() @user_has_permissions()
@service_has_permission('broadcast') @service_has_permission('broadcast')
@@ -345,6 +359,10 @@ def preview_broadcast_message(service_id, broadcast_message_id):
'/services/<uuid:service_id>/previous-alerts/<uuid:broadcast_message_id>', '/services/<uuid:service_id>/previous-alerts/<uuid:broadcast_message_id>',
endpoint='view_previous_broadcast', endpoint='view_previous_broadcast',
) )
@main.route(
'/services/<uuid:service_id>/rejected-alerts/<uuid:broadcast_message_id>',
endpoint='view_rejected_broadcast',
)
@user_has_permissions() @user_has_permissions()
@service_has_permission('broadcast') @service_has_permission('broadcast')
def view_broadcast(service_id, broadcast_message_id): def view_broadcast(service_id, broadcast_message_id):
@@ -356,7 +374,7 @@ def view_broadcast(service_id, broadcast_message_id):
abort(404) abort(404)
if ( if (
broadcast_message.status in {'completed', 'cancelled', 'rejected'} broadcast_message.status in {'completed', 'cancelled'}
and request.endpoint != 'main.view_previous_broadcast' and request.endpoint != 'main.view_previous_broadcast'
): ):
return redirect(url_for( return redirect(url_for(
@@ -375,9 +393,20 @@ def view_broadcast(service_id, broadcast_message_id):
broadcast_message_id=broadcast_message.id, broadcast_message_id=broadcast_message.id,
)) ))
if (
broadcast_message.status in {'rejected'}
and request.endpoint != 'main.view_rejected_broadcast'
):
return redirect(url_for(
'.view_rejected_broadcast',
service_id=current_service.id,
broadcast_message_id=broadcast_message.id,
))
back_link_endpoint = { back_link_endpoint = {
'main.view_current_broadcast': '.broadcast_dashboard', 'main.view_current_broadcast': '.broadcast_dashboard',
'main.view_previous_broadcast': '.broadcast_dashboard_previous', 'main.view_previous_broadcast': '.broadcast_dashboard_previous',
'main.view_rejected_broadcast': '.broadcast_dashboard_rejected',
}[request.endpoint] }[request.endpoint]
return render_template( return render_template(

View File

@@ -147,6 +147,10 @@ class MainNavigation(Navigation):
'broadcast_dashboard_previous', 'broadcast_dashboard_previous',
'view_previous_broadcast', 'view_previous_broadcast',
}, },
'rejected-broadcasts': {
'broadcast_dashboard_rejected',
'view_rejected_broadcast',
},
'templates': { 'templates': {
'action_blocked', 'action_blocked',
'add_service_template', 'add_service_template',

View File

@@ -7,6 +7,7 @@
{% if current_service.has_permission('broadcast') %} {% if current_service.has_permission('broadcast') %}
<li><a class="govuk-link govuk-link--no-visited-state{{ main_navigation.is_selected('current-broadcasts') }}" href="{{ url_for('.broadcast_dashboard', service_id=current_service.id) }}">Current alerts</a></li> <li><a class="govuk-link govuk-link--no-visited-state{{ main_navigation.is_selected('current-broadcasts') }}" href="{{ url_for('.broadcast_dashboard', service_id=current_service.id) }}">Current alerts</a></li>
<li><a class="govuk-link govuk-link--no-visited-state{{ main_navigation.is_selected('previous-broadcasts') }}" href="{{ url_for('.broadcast_dashboard_previous', service_id=current_service.id) }}">Previous alerts</a></li> <li><a class="govuk-link govuk-link--no-visited-state{{ main_navigation.is_selected('previous-broadcasts') }}" href="{{ url_for('.broadcast_dashboard_previous', service_id=current_service.id) }}">Previous alerts</a></li>
<li><a class="govuk-link govuk-link--no-visited-state{{ main_navigation.is_selected('rejected-broadcasts') }}" href="{{ url_for('.broadcast_dashboard_rejected', service_id=current_service.id) }}">Rejected alerts</a></li>
{% elif current_user.has_permissions('view_activity') %} {% elif current_user.has_permissions('view_activity') %}
<li><a class="govuk-link govuk-link--no-visited-state{{ main_navigation.is_selected('dashboard') }}" href="{{ url_for('.service_dashboard', service_id=current_service.id) }}">Dashboard</a></li> <li><a class="govuk-link govuk-link--no-visited-state{{ main_navigation.is_selected('dashboard') }}" href="{{ url_for('.service_dashboard', service_id=current_service.id) }}">Dashboard</a></li>
{% endif %} {% endif %}

View File

@@ -358,7 +358,7 @@ def test_broadcast_dashboard(
@pytest.mark.parametrize('endpoint', ( @pytest.mark.parametrize('endpoint', (
'.broadcast_dashboard', '.broadcast_dashboard_previous', '.broadcast_dashboard', '.broadcast_dashboard_previous', '.broadcast_dashboard_rejected',
)) ))
def test_broadcast_dashboard_does_not_have_button_for_view_only_user( def test_broadcast_dashboard_does_not_have_button_for_view_only_user(
client_request, client_request,
@@ -420,7 +420,6 @@ def test_previous_broadcasts_page(
normalize_spaces(row.text) normalize_spaces(row.text)
for row in page.select('.ajax-block-container')[0].select('.file-list') for row in page.select('.ajax-block-container')[0].select('.file-list')
] == [ ] == [
'Example template This is a test Rejected today at 1:20am England Scotland',
'Example template This is a test Broadcast yesterday at 2:20pm England Scotland', 'Example template This is a test Broadcast yesterday at 2:20pm England Scotland',
'Example template This is a test Broadcast yesterday at 2:20am England Scotland', 'Example template This is a test Broadcast yesterday at 2:20am England Scotland',
] ]
@@ -435,6 +434,40 @@ def test_previous_broadcasts_page(
) )
@freeze_time('2020-02-20 02:20')
def test_rejected_broadcasts_page(
client_request,
service_one,
mock_get_broadcast_messages,
mock_get_service_templates,
):
service_one['permissions'] += ['broadcast']
page = client_request.get(
'.broadcast_dashboard_rejected',
service_id=SERVICE_ONE_ID,
)
assert normalize_spaces(page.select_one('main h1').text) == (
'Rejected alerts'
)
assert len(page.select('.ajax-block-container')) == 1
assert [
normalize_spaces(row.text)
for row in page.select('.ajax-block-container')[0].select('.file-list')
] == [
'Example template This is a test Rejected today at 1:20am England Scotland',
]
button = page.select_one(
'.js-stick-at-bottom-when-scrolling a.govuk-button.govuk-button--secondary'
)
assert normalize_spaces(button.text) == 'New alert'
assert button['href'] == url_for(
'main.new_broadcast',
service_id=SERVICE_ONE_ID,
)
def test_new_broadcast_page( def test_new_broadcast_page(
client_request, client_request,
service_one, service_one,
@@ -1419,6 +1452,7 @@ def test_view_broadcast_message_page(
@pytest.mark.parametrize('endpoint', ( @pytest.mark.parametrize('endpoint', (
'.view_current_broadcast', '.view_current_broadcast',
'.view_previous_broadcast', '.view_previous_broadcast',
'.view_rejected_broadcast',
)) ))
@pytest.mark.parametrize('status, expected_highlighted_navigation_item, expected_back_link_endpoint', ( @pytest.mark.parametrize('status, expected_highlighted_navigation_item, expected_back_link_endpoint', (
( (
@@ -1443,8 +1477,8 @@ def test_view_broadcast_message_page(
), ),
( (
'rejected', 'rejected',
'Previous alerts', 'Rejected alerts',
'.broadcast_dashboard_previous', '.broadcast_dashboard_rejected',
), ),
)) ))
@freeze_time('2020-02-22T22:22:22.000000') @freeze_time('2020-02-22T22:22:22.000000')

View File

@@ -36,6 +36,7 @@ EXCLUDED_ENDPOINTS = tuple(map(Navigation.get_endpoint_with_blueprint, {
'broadcast', 'broadcast',
'broadcast_dashboard', 'broadcast_dashboard',
'broadcast_dashboard_previous', 'broadcast_dashboard_previous',
'broadcast_dashboard_rejected',
'broadcast_dashboard_updates', 'broadcast_dashboard_updates',
'broadcast_tour', 'broadcast_tour',
'callbacks', 'callbacks',
@@ -326,6 +327,7 @@ EXCLUDED_ENDPOINTS = tuple(map(Navigation.get_endpoint_with_blueprint, {
'view_previous_broadcast', 'view_previous_broadcast',
'view_provider', 'view_provider',
'view_providers', 'view_providers',
'view_rejected_broadcast',
'view_template', 'view_template',
'view_template_version', 'view_template_version',
'view_template_versions', 'view_template_versions',
@@ -493,6 +495,7 @@ def test_navigation_for_services_with_broadcast_permission(
] == [ ] == [
'/services/{}/current-alerts'.format(SERVICE_ONE_ID), '/services/{}/current-alerts'.format(SERVICE_ONE_ID),
'/services/{}/previous-alerts'.format(SERVICE_ONE_ID), '/services/{}/previous-alerts'.format(SERVICE_ONE_ID),
'/services/{}/rejected-alerts'.format(SERVICE_ONE_ID),
'/services/{}/templates'.format(SERVICE_ONE_ID), '/services/{}/templates'.format(SERVICE_ONE_ID),
'/services/{}/users'.format(SERVICE_ONE_ID), '/services/{}/users'.format(SERVICE_ONE_ID),
'/services/{}/service-settings'.format(SERVICE_ONE_ID), '/services/{}/service-settings'.format(SERVICE_ONE_ID),