allow downgradeable unicode characters in SMS templates

This commit is contained in:
Leo Hemsted
2017-02-14 17:06:32 +00:00
parent c25fff9032
commit 73a965a3c6
2 changed files with 24 additions and 6 deletions

View File

@@ -1,7 +1,8 @@
from wtforms import ValidationError from wtforms import ValidationError
from notifications_utils.template import Template from notifications_utils.template import Template
from notifications_utils.gsm import get_non_gsm_characters from notifications_utils.gsm import get_non_gsm_compatible_characters
from app import formatted_list
from app.main._blacklisted_passwords import blacklisted_passwords from app.main._blacklisted_passwords import blacklisted_passwords
from app.utils import ( from app.utils import (
Spreadsheet, Spreadsheet,
@@ -54,8 +55,10 @@ class NoCommasInPlaceHolders:
class OnlyGSMCharacters: class OnlyGSMCharacters:
def __call__(self, form, field): def __call__(self, form, field):
non_gsm_characters = get_non_gsm_characters(field.data) non_gsm_characters = sorted(list(get_non_gsm_compatible_characters(field.data)))
if non_gsm_characters: if non_gsm_characters:
raise ValidationError('The following characters are not allowed in text messages: {}'.format( raise ValidationError(
', '.join(non_gsm_characters) 'You cant use {} in text messages. They wont show up properly on everyones phones.'.format(
)) formatted_list(non_gsm_characters, conjunction='or')
)
)

View File

@@ -1,6 +1,6 @@
import pytest import pytest
from app.main.forms import RegisterUserForm, ServiceSmsSender from app.main.forms import RegisterUserForm, ServiceSmsSender
from app.main.validators import ValidGovEmail, NoCommasInPlaceHolders from app.main.validators import ValidGovEmail, NoCommasInPlaceHolders, OnlyGSMCharacters
from wtforms import ValidationError from wtforms import ValidationError
from unittest.mock import Mock from unittest.mock import Mock
@@ -141,6 +141,21 @@ def test_for_commas_in_placeholders(
NoCommasInPlaceHolders()(None, _gen_mock_field('Hello ((name))')) NoCommasInPlaceHolders()(None, _gen_mock_field('Hello ((name))'))
@pytest.mark.parametrize('msg', ['The quick brown fox', 'Thé “quick” bröwn fox\u200B'])
def test_gsm_character_validation(client, msg):
OnlyGSMCharacters()(None, _gen_mock_field(msg))
def test_non_gsm_character_validation(client):
with pytest.raises(ValidationError) as error:
OnlyGSMCharacters()(None, _gen_mock_field('∆ abc 📲 def 📵 ghi'))
assert str(error.value) == (
'You cant use ‘∆’, ‘📲’ or ‘📵’ in text messages. '
'They wont show up properly on everyones phones.'
)
def test_sms_sender_form_validation( def test_sms_sender_form_validation(
client, client,
mock_get_user_by_email, mock_get_user_by_email,