From 65bdc7f5a41a42d4a18887a117517b721206b733 Mon Sep 17 00:00:00 2001 From: David McDonald Date: Mon, 26 Jul 2021 14:33:54 +0100 Subject: [PATCH] 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). --- tests/app/main/test_validators.py | 58 ++++++++++++------------------- 1 file changed, 23 insertions(+), 35 deletions(-) diff --git a/tests/app/main/test_validators.py b/tests/app/main/test_validators.py index 5798dd2d4..21fd64692 100644 --- a/tests/app/main/test_validators.py +++ b/tests/app/main/test_validators.py @@ -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