From 7a48e25dbb3d027a453b090a2dd6e45c8e9ae6d0 Mon Sep 17 00:00:00 2001 From: Leo Hemsted Date: Tue, 8 Nov 2016 14:33:53 +0000 Subject: [PATCH] flash up prompt when archiving a service same way as we do when deleting templates (also rename button from deactivate -> archive) --- app/main/views/service_settings.py | 8 ++++++-- app/templates/views/service-settings.html | 2 +- tests/app/main/views/test_service_settings.py | 18 +++++++++++++++--- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/app/main/views/service_settings.py b/app/main/views/service_settings.py index 7dce7adba..99c2c70c9 100644 --- a/app/main/views/service_settings.py +++ b/app/main/views/service_settings.py @@ -188,8 +188,12 @@ def service_switch_can_send_letters(service_id): @login_required @user_has_permissions('manage_settings', admin_override=True) def deactivate_service(service_id): - service_api_client.deactivate_service(service_id) - return redirect(url_for('.service_settings', service_id=service_id)) + if request.method == 'POST': + service_api_client.deactivate_service(service_id) + return redirect(url_for('.service_settings', service_id=service_id)) + else: + flash('There\'s no way to reverse this! Are you sure you want to archive this service?', 'delete') + return service_settings(service_id) @main.route("/services//service-settings/set-reply-to-email", methods=['GET', 'POST']) diff --git a/app/templates/views/service-settings.html b/app/templates/views/service-settings.html index 041fe301f..08fc368a9 100644 --- a/app/templates/views/service-settings.html +++ b/app/templates/views/service-settings.html @@ -101,7 +101,7 @@ {% if current_service.active %}
  • - Deactivate service + Archive service
  • {% endif %} diff --git a/tests/app/main/views/test_service_settings.py b/tests/app/main/views/test_service_settings.py index e8e30f01d..f269d2316 100644 --- a/tests/app/main/views/test_service_settings.py +++ b/tests/app/main/views/test_service_settings.py @@ -394,6 +394,7 @@ def test_log_error_on_request_to_go_live( 'main.service_name_change', 'main.service_name_change_confirm', 'main.service_request_to_go_live', + 'main.deactivate_service' ]) def test_route_permissions(mocker, app_, api_user_active, service_one, route): with app_.test_request_context(): @@ -453,7 +454,6 @@ def test_route_for_platform_admin(mocker, app_, platform_admin_user, service_one 'main.service_switch_live', 'main.service_switch_research_mode', 'main.service_switch_can_send_letters', - 'main.deactivate_service', ]) def test_route_for_platform_admin_update_service(mocker, app_, platform_admin_user, service_one, route): mocker.patch('app.service_api_client.deactivate_service') @@ -752,17 +752,29 @@ def test_switch_service_disable_letters(client, platform_admin_user, mocker): assert mocked_fn.call_args == call(service['id'], {"can_send_letters": False}) -def test_deactivate_service(client, platform_admin_user, service_one, mocker): +def test_deactivate_service_after_confirm(client, platform_admin_user, service_one, mocker): mocked_fn = mocker.patch('app.service_api_client.post', return_value=service_one) client.login(platform_admin_user, mocker, service_one) - response = client.get(url_for('main.deactivate_service', service_id=service_one['id'])) + response = client.post(url_for('main.deactivate_service', service_id=service_one['id'])) assert response.status_code == 302 assert response.location == url_for('main.service_settings', service_id=service_one['id'], _external=True) assert mocked_fn.call_args == call('/service/{}/deactivate'.format(service_one['id']), data=None) +def test_deactivate_service_prompts_user(client, platform_admin_user, service_one, mocker): + mocked_fn = mocker.patch('app.service_api_client.post') + + client.login(platform_admin_user, mocker, service_one) + response = client.get(url_for('main.deactivate_service', service_id=service_one['id'])) + + assert response.status_code == 200 + page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser') + assert 'Are you sure you want to archive this service?' in page.find('div', class_='banner-dangerous').text + assert mocked_fn.called is False + + def test_cant_deactivate_inactive_service(client, platform_admin_user, service_one, mocker): service_one['active'] = False