Merge pull request #3981 from alphagov/single-quote-sms-sender

Add support for single quote in SMS sender name
This commit is contained in:
David McDonald
2021-07-27 09:43:33 +01:00
committed by GitHub
3 changed files with 28 additions and 39 deletions

View File

@@ -45,7 +45,7 @@ from app.main.validators import (
CommonlyUsedPassword, CommonlyUsedPassword,
CsvFileValidator, CsvFileValidator,
DoesNotStartWithDoubleZero, DoesNotStartWithDoubleZero,
LettersNumbersFullStopsAndUnderscoresOnly, LettersNumbersSingleQuotesFullStopsAndUnderscoresOnly,
MustContainAlphanumericCharacters, MustContainAlphanumericCharacters,
NoCommasInPlaceHolders, NoCommasInPlaceHolders,
NoEmbeddedImagesInSVG, NoEmbeddedImagesInSVG,
@@ -1734,7 +1734,7 @@ class ServiceSmsSenderForm(StripWhitespaceForm):
DataRequired(message="Cannot be empty"), DataRequired(message="Cannot be empty"),
Length(max=11, message="Enter 11 characters or fewer"), Length(max=11, message="Enter 11 characters or fewer"),
Length(min=3, message="Enter 3 characters or more"), Length(min=3, message="Enter 3 characters or more"),
LettersNumbersFullStopsAndUnderscoresOnly(), LettersNumbersSingleQuotesFullStopsAndUnderscoresOnly(),
DoesNotStartWithDoubleZero(), DoesNotStartWithDoubleZero(),
] ]
) )

View File

@@ -144,9 +144,9 @@ class BroadcastLength:
) )
class LettersNumbersFullStopsAndUnderscoresOnly: class LettersNumbersSingleQuotesFullStopsAndUnderscoresOnly:
regex = re.compile(r'^[a-zA-Z0-9\s\._]+$') regex = re.compile(r"^[a-zA-Z0-9\s\._']+$")
def __init__(self, message='Use letters and numbers only'): def __init__(self, message='Use letters and numbers only'):
self.message = message self.message = message

View File

@@ -187,46 +187,35 @@ def test_if_string_contains_alphanumeric_characters_does_not_raise(string):
MustContainAlphanumericCharacters()(None, _gen_mock_field(string)) MustContainAlphanumericCharacters()(None, _gen_mock_field(string))
@pytest.mark.parametrize(
"sms_sender,error_expected,error_message",
[
('', True, 'Cannot be empty'),
('22', True, 'Enter 3 characters or more'),
('333', False, None),
('elevenchars', False, None), # 11 chars
('twelvecharas', True, 'Enter 11 characters or fewer'), # 12 chars
('###', True, 'Use letters and numbers only'),
('00111222333', True, 'Cannot start with 00'),
('UK_GOV', False, None), # Underscores are allowed
('UK.GOV', False, None), # Full stops are allowed
("'UC'", False, None), # Straight single quotes are allowed
]
)
def test_sms_sender_form_validation( def test_sms_sender_form_validation(
client, client,
mock_get_user_by_email, mock_get_user_by_email,
sms_sender,
error_expected,
error_message
): ):
form = ServiceSmsSenderForm() form = ServiceSmsSenderForm()
form.sms_sender.data = sms_sender
form.sms_sender.data = 'elevenchars'
form.validate() form.validate()
assert not form.errors
form.sms_sender.data = '' if error_expected:
form.validate() assert form.errors
assert "Cannot be empty" == form.errors['sms_sender'][0] assert error_message == form.errors['sms_sender'][0]
else:
form.sms_sender.data = 'morethanelevenchars' assert not form.errors
form.validate()
assert "Enter 11 characters or fewer" == form.errors['sms_sender'][0]
form.sms_sender.data = '###########'
form.validate()
assert 'Use letters and numbers only' == form.errors['sms_sender'][0]
# Underscores are allowed
form.sms_sender.data = 'UK_GOV'
form.validate()
assert not form.errors
# Full stops are allowed
form.sms_sender.data = 'UK.GOV'
form.validate()
assert not form.errors
form.sms_sender.data = '22'
form.validate()
assert 'Enter 3 characters or more' == form.errors['sms_sender'][0]
form.sms_sender.data = '333'
form.validate()
assert not form.errors
form.sms_sender.data = '00111222333'
form.validate()
assert "Cannot start with 00" == form.errors['sms_sender'][0]