mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-23 15:57:23 -04:00
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:
@@ -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(
|
||||||
|
|||||||
@@ -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',
|
||||||
|
|||||||
@@ -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 %}
|
||||||
|
|||||||
@@ -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')
|
||||||
|
|||||||
@@ -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),
|
||||||
|
|||||||
Reference in New Issue
Block a user