Files
notifications-admin/tests/app/main/test_placeholder_form.py
Chris Hill-Scott 5a2fafb66b Don’t validate phone numbers when sending emails
If you have a placeholder called `((phone number))` in your email
template, and you try to send a one-off message then the form input will
attempt to validate your ‘phone number’.

This is not helpful if you’re trying to put a landline number in your
email, for example.

This only affects messages being sent through the one-off interface.

This commit makes the form be aware of template type, which fixes the
problem.
2018-03-16 14:17:43 +00:00

72 lines
2.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import pytest
from app.main.forms import get_placeholder_form_instance
def test_form_class_not_mutated(app_):
with app_.test_request_context(
method='POST',
data={'placeholder_value': ''}
):
form1 = get_placeholder_form_instance('name', {}, 'sms', optional_placeholder=False)
form2 = get_placeholder_form_instance('city', {}, 'sms', optional_placeholder=True)
assert not form1.validate_on_submit()
assert form2.validate_on_submit()
assert str(form1.placeholder_value.label) == '<label for="placeholder_value">name</label>'
assert str(form2.placeholder_value.label) == '<label for="placeholder_value">city</label>'
@pytest.mark.parametrize('service_can_send_international_sms, placeholder_name, template_type, value, expected_error', [
(False, 'email address', 'email', '', 'Cant be empty'),
(False, 'email address', 'email', '12345', 'Enter a valid email address'),
(False, 'email address', 'email', '“bad”@email-address.com', 'Enter a valid email address'),
(False, 'email address', 'email', 'test@example.com', None),
(False, 'email address', 'email', 'test@example.gov.uk', None),
(False, 'phone number', 'sms', '', 'Cant be empty'),
(False, 'phone number', 'sms', '+1-2345-678890', 'Not a UK mobile number'),
(False, 'phone number', 'sms', '07900900123', None),
(False, 'phone number', 'sms', '+44(0)7900 900-123', None),
(True, 'phone number', 'sms', '+123', 'Not enough digits'),
(True, 'phone number', 'sms', '+44(0)7900 900-123', None),
(True, 'phone number', 'sms', '+1-2345-678890', None),
(False, 'anything else', 'sms', '', 'Cant be empty'),
(False, 'anything else', 'email', '', 'Cant be empty'),
(True, 'phone number', 'sms', 'invalid', 'Must not contain letters or symbols'),
(True, 'phone number', 'email', 'invalid', None),
(True, 'phone number', 'letter', 'invalid', None),
(True, 'email address', 'sms', 'invalid', None),
])
def test_validates_recipients(
app_,
placeholder_name,
template_type,
value,
service_can_send_international_sms,
expected_error,
):
with app_.test_request_context(
method='POST',
data={'placeholder_value': value}
):
form = get_placeholder_form_instance(
placeholder_name,
{},
template_type,
allow_international_phone_numbers=service_can_send_international_sms,
)
if expected_error:
assert not form.validate_on_submit()
assert form.placeholder_value.errors[0] == expected_error
else:
assert form.validate_on_submit()