mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-05-05 16:38:59 -04:00
Make error message specific to template type
This commit is contained in:
@@ -777,11 +777,12 @@ class BaseTemplateForm(StripWhitespaceForm):
|
|||||||
|
|
||||||
class SMSTemplateForm(BaseTemplateForm):
|
class SMSTemplateForm(BaseTemplateForm):
|
||||||
def validate_template_content(self, field):
|
def validate_template_content(self, field):
|
||||||
OnlySMSCharacters()(None, field)
|
OnlySMSCharacters(template_type='sms')(None, field)
|
||||||
|
|
||||||
|
|
||||||
class BroadcastTemplateForm(SMSTemplateForm):
|
class BroadcastTemplateForm(SMSTemplateForm):
|
||||||
pass
|
def validate_template_content(self, field):
|
||||||
|
OnlySMSCharacters(template_type='broadcast')(None, field)
|
||||||
|
|
||||||
|
|
||||||
class LetterAddressForm(StripWhitespaceForm):
|
class LetterAddressForm(StripWhitespaceForm):
|
||||||
|
|||||||
@@ -88,12 +88,21 @@ class NoEmbeddedImagesInSVG:
|
|||||||
|
|
||||||
|
|
||||||
class OnlySMSCharacters:
|
class OnlySMSCharacters:
|
||||||
|
|
||||||
|
def __init__(self, *args, template_type, **kwargs):
|
||||||
|
self._template_type = template_type
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
def __call__(self, form, field):
|
def __call__(self, form, field):
|
||||||
non_sms_characters = sorted(list(SanitiseSMS.get_non_compatible_characters(field.data)))
|
non_sms_characters = sorted(list(SanitiseSMS.get_non_compatible_characters(field.data)))
|
||||||
if non_sms_characters:
|
if non_sms_characters:
|
||||||
raise ValidationError(
|
raise ValidationError(
|
||||||
'You cannot use {} in text messages. {} will not show up properly on everyone’s phones.'.format(
|
'You cannot use {} in {}. {} will not show up properly on everyone’s phones.'.format(
|
||||||
formatted_list(non_sms_characters, conjunction='or', before_each='', after_each=''),
|
formatted_list(non_sms_characters, conjunction='or', before_each='', after_each=''),
|
||||||
|
{
|
||||||
|
'broadcast': 'broadcasts',
|
||||||
|
'sms': 'text messages',
|
||||||
|
}.get(self._template_type),
|
||||||
('It' if len(non_sms_characters) == 1 else 'They')
|
('It' if len(non_sms_characters) == 1 else 'They')
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -154,7 +154,7 @@ def test_for_commas_in_placeholders(
|
|||||||
|
|
||||||
@pytest.mark.parametrize('msg', ['The quick brown fox', 'Thé “quick” bröwn fox\u200B'])
|
@pytest.mark.parametrize('msg', ['The quick brown fox', 'Thé “quick” bröwn fox\u200B'])
|
||||||
def test_sms_character_validation(client, msg):
|
def test_sms_character_validation(client, msg):
|
||||||
OnlySMSCharacters()(None, _gen_mock_field(msg))
|
OnlySMSCharacters(template_type='sms')(None, _gen_mock_field(msg))
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('data, err_msg', [
|
@pytest.mark.parametrize('data, err_msg', [
|
||||||
@@ -175,7 +175,7 @@ def test_sms_character_validation(client, msg):
|
|||||||
])
|
])
|
||||||
def test_non_sms_character_validation(data, err_msg, client):
|
def test_non_sms_character_validation(data, err_msg, client):
|
||||||
with pytest.raises(ValidationError) as error:
|
with pytest.raises(ValidationError) as error:
|
||||||
OnlySMSCharacters()(None, _gen_mock_field(data))
|
OnlySMSCharacters(template_type='sms')(None, _gen_mock_field(data))
|
||||||
|
|
||||||
assert str(error.value) == err_msg
|
assert str(error.value) == err_msg
|
||||||
|
|
||||||
|
|||||||
@@ -1994,14 +1994,20 @@ def test_can_create_email_template_with_emoji(
|
|||||||
assert mock_create_service_template.called is True
|
assert mock_create_service_template.called is True
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('template_type', (
|
@pytest.mark.parametrize('template_type, expected_error', (
|
||||||
'sms', 'broadcast'
|
('sms', (
|
||||||
|
'You cannot use 🍜 in text messages.'
|
||||||
|
)),
|
||||||
|
('broadcast', (
|
||||||
|
'You cannot use 🍜 in broadcasts.'
|
||||||
|
)),
|
||||||
))
|
))
|
||||||
def test_should_not_create_sms_or_broadcast_template_with_emoji(
|
def test_should_not_create_sms_or_broadcast_template_with_emoji(
|
||||||
client_request,
|
client_request,
|
||||||
service_one,
|
service_one,
|
||||||
mock_create_service_template,
|
mock_create_service_template,
|
||||||
template_type,
|
template_type,
|
||||||
|
expected_error,
|
||||||
):
|
):
|
||||||
service_one['permissions'] += [template_type]
|
service_one['permissions'] += [template_type]
|
||||||
page = client_request.post(
|
page = client_request.post(
|
||||||
@@ -2017,22 +2023,37 @@ def test_should_not_create_sms_or_broadcast_template_with_emoji(
|
|||||||
},
|
},
|
||||||
_expected_status=200,
|
_expected_status=200,
|
||||||
)
|
)
|
||||||
assert "You cannot use 🍜 in text messages." in page.text
|
assert expected_error in page.text
|
||||||
assert mock_create_service_template.called is False
|
assert mock_create_service_template.called is False
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('template_type', (
|
@pytest.mark.parametrize('template_type, expected_error', (
|
||||||
'sms', 'broadcast'
|
('sms', (
|
||||||
|
'You cannot use 🍔 in text messages.'
|
||||||
|
)),
|
||||||
|
('broadcast', (
|
||||||
|
'You cannot use 🍔 in broadcasts.'
|
||||||
|
)),
|
||||||
))
|
))
|
||||||
def test_should_not_update_sms_template_with_emoji(
|
def test_should_not_update_sms_template_with_emoji(
|
||||||
|
mocker,
|
||||||
client_request,
|
client_request,
|
||||||
service_one,
|
service_one,
|
||||||
mock_get_service_template,
|
mock_get_service_template,
|
||||||
mock_update_service_template,
|
mock_update_service_template,
|
||||||
fake_uuid,
|
fake_uuid,
|
||||||
template_type,
|
template_type,
|
||||||
|
expected_error,
|
||||||
):
|
):
|
||||||
service_one['permissions'] += [template_type]
|
service_one['permissions'] += [template_type]
|
||||||
|
return mocker.patch(
|
||||||
|
'app.service_api_client.get_service_template',
|
||||||
|
return_value=template_json(
|
||||||
|
SERVICE_ONE_ID,
|
||||||
|
fake_uuid,
|
||||||
|
type_=template_type,
|
||||||
|
),
|
||||||
|
)
|
||||||
page = client_request.post(
|
page = client_request.post(
|
||||||
'.edit_service_template',
|
'.edit_service_template',
|
||||||
service_id=SERVICE_ONE_ID,
|
service_id=SERVICE_ONE_ID,
|
||||||
@@ -2047,7 +2068,7 @@ def test_should_not_update_sms_template_with_emoji(
|
|||||||
},
|
},
|
||||||
_expected_status=200,
|
_expected_status=200,
|
||||||
)
|
)
|
||||||
assert "You cannot use 🍔 in text messages." in page.text
|
assert expected_error in page.text
|
||||||
assert mock_update_service_template.called is False
|
assert mock_update_service_template.called is False
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user