110067722: Add form validation for duplicate service name.

This commit is contained in:
Rebecca Law
2015-12-15 10:17:43 +00:00
parent 23b5cffbe8
commit eb0cff18c5
3 changed files with 39 additions and 2 deletions

View File

@@ -5,7 +5,7 @@ from flask_wtf import Form
from wtforms import StringField, PasswordField from wtforms import StringField, PasswordField
from wtforms.validators import DataRequired, Email, Length, Regexp from wtforms.validators import DataRequired, Email, Length, Regexp
from app.main.dao import verify_codes_dao from app.main.dao import verify_codes_dao, services_dao
from app.main.encryption import check_hash from app.main.encryption import check_hash
from app.main.validators import Blacklist from app.main.validators import Blacklist
@@ -85,4 +85,11 @@ def validate_code(field, code):
class AddServiceForm(Form): class AddServiceForm(Form):
service_name = StringField(validators=[DataRequired(message='Name can not be empty')]) service_name = StringField(validators=[DataRequired(message='Please enter your service name')])
def validate_service_name(self, a):
if services_dao.find_service_by_service_name(self.service_name.data) is not None:
self.service_name.errors.append('Duplicate service name')
return False
else:
return True

View File

@@ -0,0 +1,18 @@
from app.main.dao import services_dao
from app.main.forms import AddServiceForm
from tests.app.main import create_test_user
def test_form_should_have_errors_when_duplicate_service_is_added(notifications_admin,
notifications_admin_db,
notify_db_session):
with notifications_admin.test_request_context(method='POST',
data={'service_name': 'some service'}) as req:
user = create_test_user()
services_dao.insert_new_service('some service', user)
req.session['user_id'] = user.id
form = AddServiceForm(req.request.form)
assert form.validate() is False
assert len(form.errors) == 1
expected = {'service_name': ['Duplicate service name']}
assert form.errors == expected

View File

@@ -26,3 +26,15 @@ def test_should_add_service_and_redirect_to_next_page(notifications_admin, notif
assert response.location == 'http://localhost/dashboard' assert response.location == 'http://localhost/dashboard'
saved_service = services_dao.find_service_by_service_name('testing the post') saved_service = services_dao.find_service_by_service_name('testing the post')
assert saved_service is not None assert saved_service is not None
def test_should_return_form_errors_when_service_name_is_empty(notifications_admin, notifications_admin_db, notify_db_session):
with notifications_admin.test_client() as client:
with client.session_transaction() as session:
user = create_test_user()
session['user_id'] = user.id
verify_codes_dao.add_code(user_id=user.id, code='12345', code_type='sms')
client.post('/two-factor', data={'sms_code': '12345'})
response = client.post('/add-service', data={})
assert response.status_code == 400
assert 'Please enter your service name' in response.get_data(as_text=True)