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(
'cancelled',
'completed',
'rejected',
),
page_title='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')
@user_has_permissions()
@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>',
endpoint='view_previous_broadcast',
)
@main.route(
'/services/<uuid:service_id>/rejected-alerts/<uuid:broadcast_message_id>',
endpoint='view_rejected_broadcast',
)
@user_has_permissions()
@service_has_permission('broadcast')
def view_broadcast(service_id, broadcast_message_id):
@@ -356,7 +374,7 @@ def view_broadcast(service_id, broadcast_message_id):
abort(404)
if (
broadcast_message.status in {'completed', 'cancelled', 'rejected'}
broadcast_message.status in {'completed', 'cancelled'}
and request.endpoint != 'main.view_previous_broadcast'
):
return redirect(url_for(
@@ -375,9 +393,20 @@ def view_broadcast(service_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 = {
'main.view_current_broadcast': '.broadcast_dashboard',
'main.view_previous_broadcast': '.broadcast_dashboard_previous',
'main.view_rejected_broadcast': '.broadcast_dashboard_rejected',
}[request.endpoint]
return render_template(

View File

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

View File

@@ -7,6 +7,7 @@
{% 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('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') %}
<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 %}

View File

@@ -358,7 +358,7 @@ def test_broadcast_dashboard(
@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(
client_request,
@@ -420,7 +420,6 @@ def test_previous_broadcasts_page(
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',
'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',
]
@@ -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(
client_request,
service_one,
@@ -1419,6 +1452,7 @@ def test_view_broadcast_message_page(
@pytest.mark.parametrize('endpoint', (
'.view_current_broadcast',
'.view_previous_broadcast',
'.view_rejected_broadcast',
))
@pytest.mark.parametrize('status, expected_highlighted_navigation_item, expected_back_link_endpoint', (
(
@@ -1443,8 +1477,8 @@ def test_view_broadcast_message_page(
),
(
'rejected',
'Previous alerts',
'.broadcast_dashboard_previous',
'Rejected alerts',
'.broadcast_dashboard_rejected',
),
))
@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_dashboard',
'broadcast_dashboard_previous',
'broadcast_dashboard_rejected',
'broadcast_dashboard_updates',
'broadcast_tour',
'callbacks',
@@ -326,6 +327,7 @@ EXCLUDED_ENDPOINTS = tuple(map(Navigation.get_endpoint_with_blueprint, {
'view_previous_broadcast',
'view_provider',
'view_providers',
'view_rejected_broadcast',
'view_template',
'view_template_version',
'view_template_versions',
@@ -493,6 +495,7 @@ def test_navigation_for_services_with_broadcast_permission(
] == [
'/services/{}/current-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/{}/users'.format(SERVICE_ONE_ID),
'/services/{}/service-settings'.format(SERVICE_ONE_ID),