import pytest from app.main.forms import get_placeholder_form_instance def test_form_class_not_mutated(notify_admin): with notify_admin.test_request_context( method='POST', data={'placeholder_value': ''} ): form1 = get_placeholder_form_instance('name', {}, 'sms') form2 = get_placeholder_form_instance('city', {}, 'sms') assert not form1.validate_on_submit() assert not form2.validate_on_submit() assert str(form1.placeholder_value.label) == '' assert str(form2.placeholder_value.label) == '' @pytest.mark.parametrize('service_can_send_international_sms, placeholder_name, template_type, value, expected_error', [ (False, 'email address', 'email', '', 'Cannot be empty'), (False, 'email address', 'email', '12345', 'Enter a valid email address'), (False, 'email address', 'email', '“bad”@email-address.com', 'Enter a valid email address'), (False, 'email address', 'email', 'test@example.com', None), (False, 'email address', 'email', 'test@example.gsa.gov', None), (False, 'phone number', 'sms', '', 'Cannot be empty'), (False, 'phone number', 'sms', '+(44) 7700-900 855', 'Not a US number'), (False, 'phone number', 'sms', '2028675309', None), (False, 'phone number', 'sms', '+1 (202) 867-5309', None), (True, 'phone number', 'sms', '+123', 'Not enough digits'), (True, 'phone number', 'sms', '+44(0)7900 900-123', None), (True, 'phone number', 'sms', '+1-2345-678890', None), (False, 'anything else', 'sms', '', 'Cannot be empty'), (False, 'anything else', 'email', '', 'Cannot be empty'), (True, 'phone number', 'sms', 'invalid', 'The string supplied did not seem to be a phone number.'), (True, 'phone number', 'email', 'invalid', None), (True, 'email address', 'sms', 'invalid', None), ]) def test_validates_recipients( notify_admin, placeholder_name, template_type, value, service_can_send_international_sms, expected_error, ): with notify_admin.test_request_context( method='POST', data={'placeholder_value': value} ): form = get_placeholder_form_instance( placeholder_name, {}, template_type, allow_international_phone_numbers=service_can_send_international_sms, ) if expected_error: assert not form.validate_on_submit() assert form.placeholder_value.errors[0] == expected_error else: assert form.validate_on_submit()