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,
CsvFileValidator,
DoesNotStartWithDoubleZero,
LettersNumbersFullStopsAndUnderscoresOnly,
LettersNumbersSingleQuotesFullStopsAndUnderscoresOnly,
MustContainAlphanumericCharacters,
NoCommasInPlaceHolders,
NoEmbeddedImagesInSVG,
@@ -1734,7 +1734,7 @@ class ServiceSmsSenderForm(StripWhitespaceForm):
DataRequired(message="Cannot be empty"),
Length(max=11, message="Enter 11 characters or fewer"),
Length(min=3, message="Enter 3 characters or more"),
LettersNumbersFullStopsAndUnderscoresOnly(),
LettersNumbersSingleQuotesFullStopsAndUnderscoresOnly(),
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'):
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))
@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(
client,
mock_get_user_by_email,
sms_sender,
error_expected,
error_message
):
form = ServiceSmsSenderForm()
form.sms_sender.data = sms_sender
form.sms_sender.data = 'elevenchars'
form.validate()
assert not form.errors
form.sms_sender.data = ''
form.validate()
assert "Cannot be empty" == form.errors['sms_sender'][0]
form.sms_sender.data = 'morethanelevenchars'
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]
if error_expected:
assert form.errors
assert error_message == form.errors['sms_sender'][0]
else:
assert not form.errors