Refactor of test cases into parametrized tests

No reason this shouldn't be parametrized. It will be neater, more
extendable and give better error messages

No functionality change, however I did slightly adapt one or two of the
test cases (for example to change the 11 characters or fewer test to
test on the boundary with 12 characters rather than many more).
This commit is contained in:
David McDonald
2021-07-26 14:33:54 +01:00
parent b5fa6aeb33
commit 65bdc7f5a4

View File

@@ -187,46 +187,34 @@ 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
]
)
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