From 262bbbac4527f199a87ba1cd346c3164ffbdd44b Mon Sep 17 00:00:00 2001 From: Nicholas Staples Date: Fri, 15 Jan 2016 16:10:24 +0000 Subject: [PATCH] Test add service completed. --- app/main/forms.py | 11 +++-- app/main/views/add_service.py | 2 +- app/main/views/dashboard.py | 16 ++++--- tests/__init__.py | 2 +- tests/app/main/dao/test_verify_codes_dao.py | 2 +- tests/app/main/views/test_add_service.py | 48 ++++++++++++++------- 6 files changed, 55 insertions(+), 26 deletions(-) diff --git a/app/main/forms.py b/app/main/forms.py index 4f6dfe1f4..36eccc981 100644 --- a/app/main/forms.py +++ b/app/main/forms.py @@ -157,15 +157,20 @@ class TextNotReceivedForm(Form): class AddServiceForm(Form): - def __init__(self, service_names, *args, **kwargs): - self.service_names = service_names + def __init__(self, names_func, *args, **kwargs): + """ + Keyword arguments: + names_func -- Returns a list of unique service_names already registered + on the system. + """ + self._names_func = names_func super(AddServiceForm, self).__init__(*args, **kwargs) service_name = StringField(validators=[ DataRequired(message='Service name can not be empty')]) def validate_service_name(self, a): - if self.service_name.data in self.service_names: + if self.service_name.data in self._names_func(): raise ValidationError('Service name already exists') diff --git a/app/main/views/add_service.py b/app/main/views/add_service.py index 152e0ae2b..b8367e211 100644 --- a/app/main/views/add_service.py +++ b/app/main/views/add_service.py @@ -9,7 +9,7 @@ from app.main.forms import AddServiceForm @login_required def add_service(): # TODO fix up this - form = AddServiceForm(services_dao.find_all_service_names()) + form = AddServiceForm(services_dao.find_all_service_names) if form.validate_on_submit(): user = users_dao.get_user_by_id(session['user_id']) services_dao.insert_new_service(form.service_name.data, user) diff --git a/app/main/views/dashboard.py b/app/main/views/dashboard.py index eb0b85aea..9b1bb5235 100644 --- a/app/main/views/dashboard.py +++ b/app/main/views/dashboard.py @@ -1,18 +1,24 @@ -from flask import render_template +from flask import (abort, render_template) from flask_login import login_required from app.main import main - - +from app.main.dao.services_dao import get_service_by_id +from client.errors import HTTPError from ._jobs import jobs @main.route("/services//dashboard") @login_required def dashboard(service_id): + try: + service = get_service_by_id(service_id) + except HTTPError as e: + if e.status_code == 404: + abort(404) + else: + raise e return render_template( 'views/dashboard.html', jobs=jobs, free_text_messages_remaining=560, spent_this_month='0.00', - service_id=service_id - ) + service_id=service_id) diff --git a/tests/__init__.py b/tests/__init__.py index 24ba52520..648047b46 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -12,7 +12,7 @@ class TestClient(FlaskClient): verify_codes_dao.add_code(user_id=user.id, code='12345', code_type='sms') response = self.post( url_for('main.two_factor'), data={'sms_code': '12345'}) - assert response.status_code == 200 + assert response.status_code == 302 def logout(self, user): self.get(url_for("main.logout")) diff --git a/tests/app/main/dao/test_verify_codes_dao.py b/tests/app/main/dao/test_verify_codes_dao.py index 582dc2c08..900f751d5 100644 --- a/tests/app/main/dao/test_verify_codes_dao.py +++ b/tests/app/main/dao/test_verify_codes_dao.py @@ -3,7 +3,7 @@ from pytest import fail from app.main.dao import verify_codes_dao from app.main.encryption import check_hash -from tests.app.main import create_test_user, create_another_test_user +from tests import create_test_user, create_another_test_user def test_insert_new_code_and_get_it_back(app_, db_, db_session): diff --git a/tests/app/main/views/test_add_service.py b/tests/app/main/views/test_add_service.py index d50f3b582..8762c3bf8 100644 --- a/tests/app/main/views/test_add_service.py +++ b/tests/app/main/views/test_add_service.py @@ -1,5 +1,7 @@ +from flask import url_for from app.main.dao import verify_codes_dao, services_dao -from tests.app.main import create_test_user +from tests import create_test_user +from app.models import User def test_get_should_render_add_service_template(app_, db_, db_session): @@ -8,35 +10,51 @@ def test_get_should_render_add_service_template(app_, db_, db_session): user = create_test_user('active') client.login(user) verify_codes_dao.add_code(user_id=user.id, code='12345', code_type='sms') - client.post('/two-factor', data={'sms_code': '12345'}) + client.post(url_for('main.two_factor'), data={'sms_code': '12345'}) response = client.get('/add-service') assert response.status_code == 200 assert 'Set up notifications for your service' in response.get_data(as_text=True) -def test_should_add_service_and_redirect_to_next_page(app_, db_, db_session): +def test_should_add_service_and_redirect_to_next_page(app_, + db_, + db_session, + mock_create_service, + mock_get_services): with app_.test_request_context(): with app_.test_client() as client: - user = create_test_user('active') + user = User.query.first() client.login(user) - 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={'service_name': 'testing the post'}) + response = client.post( + url_for('main.add_service'), + data={'service_name': 'testing the post'}) assert response.status_code == 302 - assert response.location == 'http://localhost/services/123/dashboard' - saved_service = services_dao.find_service_by_service_name('testing the post') - assert saved_service is not None + assert response.location == url_for('main.dashboard', service_id=123, _external=True) + assert mock_create_service.called + assert mock_get_services.called def test_should_return_form_errors_when_service_name_is_empty(app_, db_, - db_session): + db_session, + active_user): with app_.test_request_context(): with app_.test_client() as client: - user = create_test_user('active') - client.login(user) - verify_codes_dao.add_code(user_id=user.id, code='12345', code_type='sms') - client.post('/two-factor', data={'sms_code': '12345'}) + client.login(active_user) response = client.post('/add-service', data={}) assert response.status_code == 200 assert 'Service name can not be empty' in response.get_data(as_text=True) + + +def test_should_return_form_errors_with_duplicate_service_name(app_, + db_, + db_session, + mock_get_services): + with app_.test_request_context(): + with app_.test_client() as client: + user = User.query.first() + client.login(user) + response = client.post('/add-service', data={'service_name': 'service_one'}) + assert response.status_code == 200 + assert 'Service name already exists' in response.get_data(as_text=True) + assert mock_get_services.called