Files
notifications-admin/tests/app/main/test_validators.py
T

195 lines
5.0 KiB
Python
Raw Normal View History

import pytest
from app.main.forms import RegisterUserForm, ServiceSmsSender
from app.main.validators import ValidGovEmail, NoCommasInPlaceHolders, OnlyGSMCharacters
from wtforms import ValidationError
from unittest.mock import Mock
2016-09-27 11:28:12 +01:00
@pytest.mark.parametrize('password', [
'govuknotify', '11111111', 'kittykat', 'evangeli'
2016-09-27 11:28:12 +01:00
])
2017-02-03 10:42:01 +00:00
def test_should_raise_validation_error_for_password(
2017-02-03 12:07:21 +00:00
client,
2017-02-03 10:42:01 +00:00
mock_get_user_by_email,
password,
):
2017-02-03 12:07:21 +00:00
form = RegisterUserForm()
form.name.data = 'test'
form.email_address.data = 'teset@example.gov.uk'
form.mobile_number.data = '441231231231'
form.password.data = password
2017-02-03 12:07:21 +00:00
form.validate()
assert 'Choose a password thats harder to guess' in form.errors['password']
2017-02-03 10:42:01 +00:00
def test_valid_email_not_in_valid_domains(
2017-02-03 12:07:21 +00:00
client
2017-02-03 10:42:01 +00:00
):
2017-02-03 12:07:21 +00:00
form = RegisterUserForm(email_address="test@test.com", mobile_number='441231231231')
assert not form.validate()
assert "Enter a central government email address" in form.errors['email_address'][0]
2017-02-03 10:42:01 +00:00
def test_valid_email_in_valid_domains(
2017-02-03 12:07:21 +00:00
client
2017-02-03 10:42:01 +00:00
):
2017-02-03 12:07:21 +00:00
form = RegisterUserForm(
name="test",
email_address="test@my.gov.uk",
mobile_number='4407888999111',
password='an uncommon password')
form.validate()
assert form.errors == {}
2017-02-03 10:42:01 +00:00
def test_invalid_email_address_error_message(
2017-02-03 12:07:21 +00:00
client
2017-02-03 10:42:01 +00:00
):
2017-02-03 12:07:21 +00:00
form = RegisterUserForm(
name="test",
email_address="test.com",
mobile_number='4407888999111',
password='1234567890')
assert not form.validate()
2017-02-03 12:07:21 +00:00
form = RegisterUserForm(
name="test",
email_address="test.com",
mobile_number='4407888999111',
password='1234567890')
assert not form.validate()
def _gen_mock_field(x):
return Mock(data=x)
@pytest.mark.parametrize("email", [
'test@gov.uk',
'test@GOV.UK',
'test@gov.uK',
'test@test.test.gov.uk',
'test@test.gov.uk',
'test@mod.uk',
'test@ddc-mod.org',
'test@test.ddc-mod.org',
'test@gov.scot',
'test@test.gov.scot',
'test@parliament.uk',
'test@gov.parliament.uk',
'test@nhs.uk',
'test@gov.nhs.uk',
'test@nhs.net',
'test@gov.nhs.net',
'test@police.uk',
'test@gov.police.uk',
'test@GOV.PoliCe.uk',
'test@ucds.email',
'test@naturalengland.org.uk',
2017-01-03 12:34:57 +00:00
'test@hmcts.net',
'test@scotent.co.uk',
2017-03-08 14:08:57 +00:00
'test@assembly.wales',
])
2017-02-03 10:42:01 +00:00
def test_valid_list_of_white_list_email_domains(
2017-02-03 12:07:21 +00:00
client,
2017-02-03 10:42:01 +00:00
email,
):
2017-02-03 12:07:21 +00:00
email_domain_validators = ValidGovEmail()
email_domain_validators(None, _gen_mock_field(email))
@pytest.mark.parametrize("email", [
'test@ukgov.uk',
'test@gov.uk.uk',
'test@gov.test.uk',
'test@ukmod.uk',
'test@mod.uk.uk',
'test@mod.test.uk',
'test@ukddc-mod.org',
'test@ddc-mod.org.uk',
'test@ddc-mod.uk.org',
'test@ukgov.scot',
'test@gov.scot.uk',
'test@gov.test.scot',
'test@ukparliament.uk',
'test@parliament.uk.uk',
'test@parliament.test.uk',
'test@uknhs.uk',
'test@nhs.uk.uk',
'test@uknhs.net',
'test@nhs.net.uk',
'test@nhs.test.net',
'test@ukpolice.uk',
'test@police.uk.uk',
2016-10-18 13:51:34 +01:00
'test@police.test.uk',
'test@ucds.com'
])
2017-02-03 10:42:01 +00:00
def test_invalid_list_of_white_list_email_domains(
2017-02-03 12:07:21 +00:00
client,
2017-02-03 10:42:01 +00:00
email,
):
2017-02-03 12:07:21 +00:00
email_domain_validators = ValidGovEmail()
with pytest.raises(ValidationError):
email_domain_validators(None, _gen_mock_field(email))
2016-04-07 16:02:06 +01:00
2017-02-03 10:42:01 +00:00
def test_for_commas_in_placeholders(
2017-02-03 12:07:21 +00:00
client
2017-02-03 10:42:01 +00:00
):
2017-02-03 12:07:21 +00:00
with pytest.raises(ValidationError) as error:
NoCommasInPlaceHolders()(None, _gen_mock_field('Hello ((name,date))'))
assert str(error.value) == 'You cant have commas in your fields'
NoCommasInPlaceHolders()(None, _gen_mock_field('Hello ((name))'))
@pytest.mark.parametrize('msg', ['The quick brown fox', 'Thé “quick” bröwn fox\u200B'])
def test_gsm_character_validation(client, msg):
OnlyGSMCharacters()(None, _gen_mock_field(msg))
2017-02-15 16:21:14 +00:00
@pytest.mark.parametrize('data, err_msg', [
(
'∆ abc 📲 def 📵 ghi',
(
'You cant use ∆, 📲 or 📵 in text messages. '
'They wont show up properly on everyones phones.'
)
),
(
'📵',
(
'You cant use 📵 in text messages. '
'It wont show up properly on everyones phones.'
)
),
])
def test_non_gsm_character_validation(data, err_msg, client):
with pytest.raises(ValidationError) as error:
2017-02-15 16:21:14 +00:00
OnlyGSMCharacters()(None, _gen_mock_field(data))
2017-02-15 16:21:14 +00:00
assert str(error.value) == err_msg
2017-02-03 10:42:01 +00:00
def test_sms_sender_form_validation(
2017-02-03 12:07:21 +00:00
client,
2017-02-03 10:42:01 +00:00
mock_get_user_by_email,
):
2017-02-03 12:07:21 +00:00
form = ServiceSmsSender()
2017-02-03 12:07:21 +00:00
form.sms_sender.data = 'elevenchars'
form.validate()
assert not form.errors
2017-02-03 12:07:21 +00:00
form.sms_sender.data = ''
form.validate()
assert not form.errors
2016-07-01 16:32:21 +01:00
2017-02-03 12:07:21 +00:00
form.sms_sender.data = 'morethanelevenchars'
form.validate()
2017-02-27 15:49:42 +00:00
assert "Enter 11 characters or fewer" == form.errors['sms_sender'][0]
2017-02-03 12:07:21 +00:00
form.sms_sender.data = '###########'
form.validate()
assert 'Use letters and numbers only' == form.errors['sms_sender'][0]