mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-09-11 10:28:41 -04:00
add other send notification error branches and tests
This commit is contained in:
@@ -51,6 +51,8 @@ class Config(object):
|
|||||||
SESSION_COOKIE_SECURE = True
|
SESSION_COOKIE_SECURE = True
|
||||||
SESSION_REFRESH_EACH_REQUEST = True
|
SESSION_REFRESH_EACH_REQUEST = True
|
||||||
SHOW_STYLEGUIDE = True
|
SHOW_STYLEGUIDE = True
|
||||||
|
# TODO: move to utils
|
||||||
|
SMS_CHAR_COUNT_LIMIT = 459
|
||||||
TOKEN_MAX_AGE_SECONDS = 3600
|
TOKEN_MAX_AGE_SECONDS = 3600
|
||||||
WTF_CSRF_ENABLED = True
|
WTF_CSRF_ENABLED = True
|
||||||
WTF_CSRF_TIME_LIMIT = None
|
WTF_CSRF_TIME_LIMIT = None
|
||||||
|
|||||||
+14
-1
@@ -638,14 +638,23 @@ def _check_notification(service_id, template_id, exception=None):
|
|||||||
|
|
||||||
|
|
||||||
def get_template_error_dict(exception):
|
def get_template_error_dict(exception):
|
||||||
|
# TODO: Make API return some computer-friendly identifier as well as the end user error messages
|
||||||
if 'service is in trial mode' in exception.message:
|
if 'service is in trial mode' in exception.message:
|
||||||
error = 'not-allowed-to-send-to'
|
error = 'not-allowed-to-send-to'
|
||||||
|
elif 'Exceeded send limits' in exception.message:
|
||||||
|
error = 'too-many-messages'
|
||||||
|
elif 'Content for template has a character count greater than the limit of' in exception.message:
|
||||||
|
error = 'message-too-long'
|
||||||
else:
|
else:
|
||||||
raise exception
|
raise exception
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'error': error,
|
'error': error,
|
||||||
'SMS_CHAR_COUNT_LIMIT': 0
|
'SMS_CHAR_COUNT_LIMIT': current_app.config['SMS_CHAR_COUNT_LIMIT'],
|
||||||
|
'current_service': current_service,
|
||||||
|
|
||||||
|
# used to trigger CSV specific err msg content, so not needed for single notification errors.
|
||||||
|
'original_file_name': False
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -668,6 +677,10 @@ def send_notification(service_id, template_id):
|
|||||||
personalisation=session['placeholders']
|
personalisation=session['placeholders']
|
||||||
)
|
)
|
||||||
except HTTPError as exception:
|
except HTTPError as exception:
|
||||||
|
current_app.logger.info('Service {} could not send notification: "{}"'.format(
|
||||||
|
current_service['id'],
|
||||||
|
exception.message
|
||||||
|
))
|
||||||
return _check_notification(service_id, template_id, exception)
|
return _check_notification(service_id, template_id, exception)
|
||||||
|
|
||||||
session.pop('placeholders')
|
session.pop('placeholders')
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
{% from "components/banner.html" import banner_wrapper %}
|
||||||
|
|
||||||
<div class="bottom-gutter">
|
<div class="bottom-gutter">
|
||||||
{% call banner_wrapper(type='dangerous') %}
|
{% call banner_wrapper(type='dangerous') %}
|
||||||
<h1 class='banner-title'>
|
<h1 class='banner-title'>
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
{% from "components/banner.html" import banner_wrapper %}
|
||||||
|
|
||||||
<div class="bottom-gutter">
|
<div class="bottom-gutter">
|
||||||
{% call banner_wrapper(type='dangerous') %}
|
{% call banner_wrapper(type='dangerous') %}
|
||||||
<h1 class='banner-title'>
|
<h1 class='banner-title'>
|
||||||
|
|||||||
@@ -14,9 +14,9 @@
|
|||||||
%}
|
%}
|
||||||
{% include "partials/check/not-allowed-to-send-to.html" %}
|
{% include "partials/check/not-allowed-to-send-to.html" %}
|
||||||
{% endwith %}
|
{% endwith %}
|
||||||
{% elif error == 'more_rows_than_can_send' %}
|
{% elif error == 'too-many-messages' %}
|
||||||
{% include "partials/check/too-many-messages.html" %}
|
{% include "partials/check/too-many-messages.html" %}
|
||||||
{% elif error == 'row_errors' %}
|
{% elif error == 'message-too-long' %}
|
||||||
{# the only row_errors we can get when sending one off messages is that the message is too long #}
|
{# the only row_errors we can get when sending one off messages is that the message is too long #}
|
||||||
{% include "partials/check/message-too-long.html" %}
|
{% include "partials/check/message-too-long.html" %}
|
||||||
{% else %}
|
{% else %}
|
||||||
|
|||||||
@@ -1730,24 +1730,48 @@ def test_send_notification_redirects_to_view_page(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
TRIAL_MODE_MSG = (
|
||||||
|
'Can’t send to this recipient when service is in trial mode – '
|
||||||
|
'see https://www.notifications.service.gov.uk/trial-mode'
|
||||||
|
)
|
||||||
|
TOO_LONG_MSG = 'Content for template has a character count greater than the limit of 495'
|
||||||
|
SERVICE_DAILY_LIMIT_MSG = 'Exceeded send limits (1000) for today'
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('exception_msg, expected_h1, expected_err_details', [
|
||||||
|
(
|
||||||
|
TRIAL_MODE_MSG,
|
||||||
|
'You can’t send to this phone number',
|
||||||
|
'In trial mode you can only send to yourself and members of your team'
|
||||||
|
),
|
||||||
|
(
|
||||||
|
TOO_LONG_MSG,
|
||||||
|
'Message too long',
|
||||||
|
'Text messages can’t be longer than 459 characters. Your message is 678 characters.'
|
||||||
|
),
|
||||||
|
(
|
||||||
|
SERVICE_DAILY_LIMIT_MSG,
|
||||||
|
'Daily limit reached',
|
||||||
|
'You can only send 1000 messages per day in trial mode.'
|
||||||
|
),
|
||||||
|
])
|
||||||
def test_send_notification_shows_error_if_400(
|
def test_send_notification_shows_error_if_400(
|
||||||
client_request,
|
client_request,
|
||||||
service_one,
|
service_one,
|
||||||
fake_uuid,
|
fake_uuid,
|
||||||
mocker,
|
mocker,
|
||||||
mock_get_service_template
|
mock_get_service_template_with_placeholders,
|
||||||
|
exception_msg,
|
||||||
|
expected_h1,
|
||||||
|
expected_err_details
|
||||||
):
|
):
|
||||||
trial_mode_msg = (
|
|
||||||
'Can’t send to this recipient when service is in trial mode – '
|
|
||||||
'see https://www.notifications.service.gov.uk/trial-mode'
|
|
||||||
)
|
|
||||||
mocker.patch(
|
mocker.patch(
|
||||||
'app.notification_api_client.send_notification',
|
'app.notification_api_client.send_notification',
|
||||||
side_effect=HTTPError(response=Mock(status_code=400), message=trial_mode_msg)
|
side_effect=HTTPError(response=Mock(status_code=400), message=exception_msg)
|
||||||
)
|
)
|
||||||
with client_request.session_transaction() as session:
|
with client_request.session_transaction() as session:
|
||||||
session['recipient'] = '07700900001'
|
session['recipient'] = '07700900001'
|
||||||
session['placeholders'] = {'a': 'b'}
|
session['placeholders'] = {'name': 'a' * 500}
|
||||||
|
|
||||||
page = client_request.post(
|
page = client_request.post(
|
||||||
'main.send_notification',
|
'main.send_notification',
|
||||||
@@ -1756,4 +1780,6 @@ def test_send_notification_shows_error_if_400(
|
|||||||
_expected_status=200
|
_expected_status=200
|
||||||
)
|
)
|
||||||
|
|
||||||
assert ' '.join(page.h1.text.split()) == 'You can’t send to this phone number'
|
assert ' '.join(page.h1.text.split()) == expected_h1
|
||||||
|
assert ' '.join(page.h1.parent.p.text.split()) == expected_err_details
|
||||||
|
assert not page.find('input[type=submit]')
|
||||||
|
|||||||
Reference in New Issue
Block a user