mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-15 07:18:58 -04:00
Merge pull request #1081 from alphagov/send-back-in-help
send users back to beginning of tour if they hit back at end
This commit is contained in:
@@ -241,7 +241,7 @@ def _check_messages(service_id, template_type, upload_id, letters_as_pdf=False):
|
|||||||
# NOTE: this is a 301 MOVED PERMANENTLY (httpstatus.es/301), so the browser will cache this redirect, and it'll
|
# NOTE: this is a 301 MOVED PERMANENTLY (httpstatus.es/301), so the browser will cache this redirect, and it'll
|
||||||
# *always* happen for that browser. _check_messages is only used by endpoints that contain `upload_id`, which
|
# *always* happen for that browser. _check_messages is only used by endpoints that contain `upload_id`, which
|
||||||
# is a one-time-use id (that ties to a given file in S3 that is already deleted if it's not in the session)
|
# is a one-time-use id (that ties to a given file in S3 that is already deleted if it's not in the session)
|
||||||
raise RequestRedirect(url_for('main.choose_template', service_id=service_id, template_type=template_type))
|
raise RequestRedirect(get_check_messages_back_url(service_id, template_type))
|
||||||
|
|
||||||
users = user_api_client.get_users_for_service(service_id=service_id)
|
users = user_api_client.get_users_for_service(service_id=service_id)
|
||||||
|
|
||||||
@@ -410,3 +410,16 @@ def go_to_dashboard_after_tour(service_id, example_template_id):
|
|||||||
return redirect(
|
return redirect(
|
||||||
url_for('main.service_dashboard', service_id=service_id)
|
url_for('main.service_dashboard', service_id=service_id)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def get_check_messages_back_url(service_id, template_type):
|
||||||
|
if get_help_argument():
|
||||||
|
# if the user is on the introductory tour, then they should be redirected back to the beginning of the tour -
|
||||||
|
# but to do that we need to find the template_id of the example template. That template *should* be the only
|
||||||
|
# template for that service, but it's possible they've opened another tab and deleted it for example. In that
|
||||||
|
# case we should just redirect back to the main page as they clearly know what they're doing.
|
||||||
|
templates = service_api_client.get_service_templates(service_id)['data']
|
||||||
|
if len(templates) == 1:
|
||||||
|
return url_for('.send_test', service_id=service_id, template_id=templates[0]['id'], help=1)
|
||||||
|
|
||||||
|
return url_for('main.choose_template', service_id=service_id, template_type=template_type)
|
||||||
|
|||||||
@@ -6,13 +6,14 @@ import re
|
|||||||
from itertools import repeat
|
from itertools import repeat
|
||||||
from functools import partial
|
from functools import partial
|
||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
from urllib.parse import urlparse
|
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from bs4 import BeautifulSoup
|
from bs4 import BeautifulSoup
|
||||||
from flask import url_for
|
from flask import url_for
|
||||||
|
|
||||||
from tests import validate_route_permission
|
from app.main.views.send import get_check_messages_back_url
|
||||||
|
|
||||||
|
from tests import validate_route_permission, template_json
|
||||||
|
|
||||||
template_types = ['email', 'sms']
|
template_types = ['email', 'sms']
|
||||||
|
|
||||||
@@ -885,21 +886,59 @@ def test_check_messages_shows_over_max_row_error(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def test_check_messages_goes_to_select_template_if_no_upload_data(logged_in_client):
|
def test_check_messages_redirects_if_no_upload_data(logged_in_client, mocker):
|
||||||
service_id = uuid.uuid4()
|
checker = mocker.patch('app.main.views.send.get_check_messages_back_url', return_value='foo')
|
||||||
|
|
||||||
response = logged_in_client.get(url_for(
|
response = logged_in_client.get(url_for(
|
||||||
'main.check_messages',
|
'main.check_messages',
|
||||||
service_id=service_id,
|
service_id='0',
|
||||||
template_type='sms',
|
template_type='bar',
|
||||||
upload_id=uuid.uuid4(),
|
upload_id='baz'
|
||||||
))
|
))
|
||||||
|
|
||||||
# permanent redirect
|
checker.assert_called_once_with('0', 'bar')
|
||||||
assert response.status_code == 301
|
assert response.status_code == 301
|
||||||
assert response.location == url_for(
|
assert response.location == 'http://localhost/foo'
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('template_type', ['sms', 'email'])
|
||||||
|
def test_get_check_messages_back_url_returns_to_correct_select_template(client, mocker, template_type):
|
||||||
|
mocker.patch('app.main.views.send.get_help_argument', return_value=False)
|
||||||
|
|
||||||
|
assert get_check_messages_back_url('1234', template_type) == url_for(
|
||||||
'main.choose_template',
|
'main.choose_template',
|
||||||
service_id=service_id,
|
service_id='1234',
|
||||||
template_type='sms',
|
template_type=template_type
|
||||||
_external=True
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_check_messages_back_from_help_goes_to_start_of_help(client, mocker):
|
||||||
|
mocker.patch('app.main.views.send.get_help_argument', return_value=True)
|
||||||
|
mocker.patch('app.service_api_client.get_service_templates', lambda service_id: {
|
||||||
|
'data': [template_json('000', '111', type_='sms')]
|
||||||
|
})
|
||||||
|
assert get_check_messages_back_url('000', 'sms') == url_for(
|
||||||
|
'main.send_test',
|
||||||
|
service_id='000',
|
||||||
|
template_id='111',
|
||||||
|
help='1'
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('templates', [
|
||||||
|
[],
|
||||||
|
[
|
||||||
|
template_json('000', '111', type_='sms'),
|
||||||
|
template_json('000', '222', type_='sms')
|
||||||
|
]
|
||||||
|
], ids=['no_templates', 'two_templates'])
|
||||||
|
def test_check_messages_back_from_help_handles_unexpected_templates(client, mocker, templates):
|
||||||
|
mocker.patch('app.main.views.send.get_help_argument', return_value=True)
|
||||||
|
mocker.patch('app.service_api_client.get_service_templates', lambda service_id: {
|
||||||
|
'data': templates
|
||||||
|
})
|
||||||
|
|
||||||
|
assert get_check_messages_back_url('1234', 'sms') == url_for(
|
||||||
|
'main.choose_template',
|
||||||
|
service_id='1234',
|
||||||
|
template_type='sms'
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user