mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-09-07 02:18:24 -04:00
Merge pull request #4176 from alphagov/replay-falsey-values
Replay falsey values in input fields
This commit is contained in:
@@ -2,6 +2,7 @@ import math
|
|||||||
import weakref
|
import weakref
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from itertools import chain
|
from itertools import chain
|
||||||
|
from numbers import Number
|
||||||
|
|
||||||
import pytz
|
import pytz
|
||||||
from flask import Markup, render_template, request
|
from flask import Markup, render_template, request
|
||||||
@@ -227,7 +228,8 @@ def password(label='Password'):
|
|||||||
|
|
||||||
|
|
||||||
def govuk_text_input_field_widget(self, field, type=None, param_extensions=None, **kwargs):
|
def govuk_text_input_field_widget(self, field, type=None, param_extensions=None, **kwargs):
|
||||||
value = kwargs["value"] if kwargs.get("value") else field.data
|
value = kwargs["value"] if "value" in kwargs else field.data
|
||||||
|
value = str(value) if isinstance(value, Number) else value
|
||||||
|
|
||||||
# error messages
|
# error messages
|
||||||
error_message = None
|
error_message = None
|
||||||
|
|||||||
12
tests/app/main/forms/test_govuk_text_input_field.py
Normal file
12
tests/app/main/forms/test_govuk_text_input_field.py
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
from flask_wtf import FlaskForm as Form
|
||||||
|
|
||||||
|
from app.main.forms import GovukTextInputField
|
||||||
|
|
||||||
|
|
||||||
|
def test_GovukTextInputField_renders_zero(client_request):
|
||||||
|
class FakeForm(Form):
|
||||||
|
field = GovukTextInputField()
|
||||||
|
|
||||||
|
form = FakeForm(field=0)
|
||||||
|
html = form.field()
|
||||||
|
assert 'value="0"' in html
|
||||||
61
tests/app/main/forms/test_register_user_form.py
Normal file
61
tests/app/main/forms/test_register_user_form.py
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
import pytest
|
||||||
|
|
||||||
|
from app.main.forms import RegisterUserForm
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('password', [
|
||||||
|
'govuknotify', '11111111', 'kittykat', 'blackbox'
|
||||||
|
])
|
||||||
|
def test_should_raise_validation_error_for_password(
|
||||||
|
client_request,
|
||||||
|
mock_get_user_by_email,
|
||||||
|
password,
|
||||||
|
):
|
||||||
|
form = RegisterUserForm()
|
||||||
|
form.name.data = 'test'
|
||||||
|
form.email_address.data = 'teset@example.gov.uk'
|
||||||
|
form.mobile_number.data = '441231231231'
|
||||||
|
form.password.data = password
|
||||||
|
|
||||||
|
form.validate()
|
||||||
|
assert 'Choose a password that’s harder to guess' in form.errors['password']
|
||||||
|
|
||||||
|
|
||||||
|
def test_valid_email_not_in_valid_domains(
|
||||||
|
client_request,
|
||||||
|
mock_get_organisations,
|
||||||
|
):
|
||||||
|
form = RegisterUserForm(email_address="test@test.com", mobile_number='441231231231')
|
||||||
|
assert not form.validate()
|
||||||
|
assert "Enter a public sector email address" in form.errors['email_address'][0]
|
||||||
|
|
||||||
|
|
||||||
|
def test_valid_email_in_valid_domains(
|
||||||
|
client_request,
|
||||||
|
):
|
||||||
|
form = RegisterUserForm(
|
||||||
|
name="test",
|
||||||
|
email_address="test@my.gov.uk",
|
||||||
|
mobile_number='4407888999111',
|
||||||
|
password='an uncommon password')
|
||||||
|
form.validate()
|
||||||
|
assert form.errors == {}
|
||||||
|
|
||||||
|
|
||||||
|
def test_invalid_email_address_error_message(
|
||||||
|
client_request,
|
||||||
|
mock_get_organisations,
|
||||||
|
):
|
||||||
|
form = RegisterUserForm(
|
||||||
|
name="test",
|
||||||
|
email_address="test.com",
|
||||||
|
mobile_number='4407888999111',
|
||||||
|
password='1234567890')
|
||||||
|
assert not form.validate()
|
||||||
|
|
||||||
|
form = RegisterUserForm(
|
||||||
|
name="test",
|
||||||
|
email_address="test.com",
|
||||||
|
mobile_number='4407888999111',
|
||||||
|
password='1234567890')
|
||||||
|
assert not form.validate()
|
||||||
37
tests/app/main/forms/test_service_sms_senders_form.py
Normal file
37
tests/app/main/forms/test_service_sms_senders_form.py
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
import pytest
|
||||||
|
|
||||||
|
from app.main.forms import ServiceSmsSenderForm
|
||||||
|
|
||||||
|
|
||||||
|
@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_request,
|
||||||
|
mock_get_user_by_email,
|
||||||
|
sms_sender,
|
||||||
|
error_expected,
|
||||||
|
error_message
|
||||||
|
):
|
||||||
|
form = ServiceSmsSenderForm()
|
||||||
|
form.sms_sender.data = sms_sender
|
||||||
|
|
||||||
|
form.validate()
|
||||||
|
|
||||||
|
if error_expected:
|
||||||
|
assert form.errors
|
||||||
|
assert error_message == form.errors['sms_sender'][0]
|
||||||
|
else:
|
||||||
|
assert not form.errors
|
||||||
@@ -3,7 +3,6 @@ from unittest.mock import Mock
|
|||||||
import pytest
|
import pytest
|
||||||
from wtforms import ValidationError
|
from wtforms import ValidationError
|
||||||
|
|
||||||
from app.main.forms import RegisterUserForm, ServiceSmsSenderForm
|
|
||||||
from app.main.validators import (
|
from app.main.validators import (
|
||||||
MustContainAlphanumericCharacters,
|
MustContainAlphanumericCharacters,
|
||||||
NoCommasInPlaceHolders,
|
NoCommasInPlaceHolders,
|
||||||
@@ -12,64 +11,6 @@ from app.main.validators import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('password', [
|
|
||||||
'govuknotify', '11111111', 'kittykat', 'blackbox'
|
|
||||||
])
|
|
||||||
def test_should_raise_validation_error_for_password(
|
|
||||||
client_request,
|
|
||||||
mock_get_user_by_email,
|
|
||||||
password,
|
|
||||||
):
|
|
||||||
form = RegisterUserForm()
|
|
||||||
form.name.data = 'test'
|
|
||||||
form.email_address.data = 'teset@example.gov.uk'
|
|
||||||
form.mobile_number.data = '441231231231'
|
|
||||||
form.password.data = password
|
|
||||||
|
|
||||||
form.validate()
|
|
||||||
assert 'Choose a password that’s harder to guess' in form.errors['password']
|
|
||||||
|
|
||||||
|
|
||||||
def test_valid_email_not_in_valid_domains(
|
|
||||||
client_request,
|
|
||||||
mock_get_organisations,
|
|
||||||
):
|
|
||||||
form = RegisterUserForm(email_address="test@test.com", mobile_number='441231231231')
|
|
||||||
assert not form.validate()
|
|
||||||
assert "Enter a public sector email address" in form.errors['email_address'][0]
|
|
||||||
|
|
||||||
|
|
||||||
def test_valid_email_in_valid_domains(
|
|
||||||
client_request,
|
|
||||||
):
|
|
||||||
form = RegisterUserForm(
|
|
||||||
name="test",
|
|
||||||
email_address="test@my.gov.uk",
|
|
||||||
mobile_number='4407888999111',
|
|
||||||
password='an uncommon password')
|
|
||||||
form.validate()
|
|
||||||
assert form.errors == {}
|
|
||||||
|
|
||||||
|
|
||||||
def test_invalid_email_address_error_message(
|
|
||||||
client_request,
|
|
||||||
mock_get_organisations,
|
|
||||||
):
|
|
||||||
form = RegisterUserForm(
|
|
||||||
name="test",
|
|
||||||
email_address="test.com",
|
|
||||||
mobile_number='4407888999111',
|
|
||||||
password='1234567890')
|
|
||||||
assert not form.validate()
|
|
||||||
|
|
||||||
form = RegisterUserForm(
|
|
||||||
name="test",
|
|
||||||
email_address="test.com",
|
|
||||||
mobile_number='4407888999111',
|
|
||||||
password='1234567890')
|
|
||||||
assert not form.validate()
|
|
||||||
|
|
||||||
|
|
||||||
def _gen_mock_field(x):
|
def _gen_mock_field(x):
|
||||||
return Mock(data=x)
|
return Mock(data=x)
|
||||||
|
|
||||||
@@ -185,37 +126,3 @@ def test_if_string_does_not_contain_alphanumeric_characters_raises(string):
|
|||||||
@pytest.mark.parametrize("string", [".A8", "AB.", ".42...."])
|
@pytest.mark.parametrize("string", [".A8", "AB.", ".42...."])
|
||||||
def test_if_string_contains_alphanumeric_characters_does_not_raise(string):
|
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(
|
|
||||||
client_request,
|
|
||||||
mock_get_user_by_email,
|
|
||||||
sms_sender,
|
|
||||||
error_expected,
|
|
||||||
error_message
|
|
||||||
):
|
|
||||||
form = ServiceSmsSenderForm()
|
|
||||||
form.sms_sender.data = sms_sender
|
|
||||||
|
|
||||||
form.validate()
|
|
||||||
|
|
||||||
if error_expected:
|
|
||||||
assert form.errors
|
|
||||||
assert error_message == form.errors['sms_sender'][0]
|
|
||||||
else:
|
|
||||||
assert not form.errors
|
|
||||||
|
|||||||
Reference in New Issue
Block a user