From 1871243cc869944c051cbfeb181d4028df6e260c Mon Sep 17 00:00:00 2001 From: Rebecca Law Date: Thu, 31 Mar 2016 10:26:03 +0100 Subject: [PATCH] Check the uniqueness of the service name ignoring case. When the service name changes the email_from changes to. Renamed find_all_service_names to find_all_service_names_lower. --- app/main/forms.py | 2 +- app/main/views/add_service.py | 2 +- app/main/views/service_settings.py | 2 +- app/notify_client/api_client.py | 2 +- tests/__init__.py | 3 +- tests/app/main/views/test_add_service.py | 41 ++++++++----------- tests/app/main/views/test_service_settings.py | 2 +- 7 files changed, 25 insertions(+), 29 deletions(-) diff --git a/app/main/forms.py b/app/main/forms.py index a8d5ba87d..b711231e4 100644 --- a/app/main/forms.py +++ b/app/main/forms.py @@ -159,7 +159,7 @@ class AddServiceForm(Form): ) def validate_name(self, a): - if a.data in self._names_func(): + if a.data.lower() in self._names_func(): raise ValidationError('This service name is already in use') diff --git a/app/main/views/add_service.py b/app/main/views/add_service.py index 355c9bf09..d943ddb75 100644 --- a/app/main/views/add_service.py +++ b/app/main/views/add_service.py @@ -31,7 +31,7 @@ def add_service(): invite_api_client.accept_invite(service_id, invitation.id) return redirect(url_for('main.service_dashboard', service_id=service_id)) - form = AddServiceForm(service_api_client.find_all_service_names) + form = AddServiceForm(service_api_client.find_all_service_names_lower) heading = 'Which service do you want to set up notifications for?' if form.validate_on_submit(): session['service_name'] = form.name.data diff --git a/app/main/views/service_settings.py b/app/main/views/service_settings.py index 159744fc1..729cfee15 100644 --- a/app/main/views/service_settings.py +++ b/app/main/views/service_settings.py @@ -39,7 +39,7 @@ def service_settings(service_id): def service_name_change(service_id): service = service_api_client.get_service(service_id)['data'] - form = ServiceNameForm(service_api_client.find_all_service_names) + form = ServiceNameForm(service_api_client.find_all_service_names_lower) if form.validate_on_submit(): session['service_name_change'] = form.name.data diff --git a/app/notify_client/api_client.py b/app/notify_client/api_client.py index 93a76c20c..8b5200976 100644 --- a/app/notify_client/api_client.py +++ b/app/notify_client/api_client.py @@ -142,7 +142,7 @@ class ServiceAPIClient(NotificationsAPIClient): endpoint = "/service/{0}/template/{1}".format(service_id, template_id) return self.delete(endpoint) - def find_all_service_names(self, user_id=None): + def find_all_service_names_lower(self, user_id=None): resp = self.get_services(user_id) return [x['name'].lower() for x in resp['data']] diff --git a/tests/__init__.py b/tests/__init__.py index bc0513c6e..27cfd2a84 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -10,8 +10,9 @@ class TestClient(FlaskClient): with self.session_transaction() as session: session['user_id'] = user.id session['_fresh'] = True - if mocker and service: + if mocker: mocker.patch('app.user_api_client.get_user', return_value=user) + if mocker and service: mocker.patch('app.service_api_client.get_service', return_value={'data': service}) login_user(user, remember=True) diff --git a/tests/app/main/views/test_add_service.py b/tests/app/main/views/test_add_service.py index 41c444ff4..70c91a5f5 100644 --- a/tests/app/main/views/test_add_service.py +++ b/tests/app/main/views/test_add_service.py @@ -3,62 +3,57 @@ from flask import url_for def test_get_should_render_add_service_template(app_, api_user_active, - mock_login, - mock_get_service, - mock_get_services, - mock_get_user_by_email): + mocker): with app_.test_request_context(): with app_.test_client() as client: - client.login(api_user_active) + client.login(api_user_active, mocker) response = client.get(url_for('main.add_service')) assert response.status_code == 200 assert 'Which service do you want to set up notifications for?' in response.get_data(as_text=True) def test_should_add_service_and_redirect_to_next_page(app_, - mock_login, + mocker, mock_create_service, mock_get_services, api_user_active): with app_.test_request_context(): with app_.test_client() as client: - client.login(api_user_active) + client.login(api_user_active, mocker) response = client.post( url_for('main.add_service'), data={'name': 'testing the post'}) assert response.status_code == 302 assert response.location == url_for('main.service_dashboard', service_id=101, _external=True) + assert mock_get_services.called mock_create_service.asset_called_once_with('testing the post', False, app_.config['DEFAULT_SERVICE_LIMIT'], True, api_user_active.id) def test_should_return_form_errors_when_service_name_is_empty(app_, - api_user_active, - mock_get_service, - mock_get_services, - mock_get_user, - mock_get_user_by_email, - mock_login): + mocker, + api_user_active): with app_.test_request_context(): with app_.test_client() as client: - client.login(api_user_active) + client.login(api_user_active, mocker) response = client.post(url_for('main.add_service'), data={}) assert response.status_code == 200 assert 'Service name can’t be empty' in response.get_data(as_text=True) -def test_should_return_form_errors_with_duplicate_service_name(app_, - mock_login, - mock_get_services, - mock_get_user, - api_user_active, - mock_get_user_by_email): +def test_should_return_form_errors_with_duplicate_service_name_regardless_of_case(app_, + mocker, + service_one, + mock_get_services, + api_user_active, + mock_create_service): with app_.test_request_context(): with app_.test_client() as client: - client.login(api_user_active) - response = client.post( - url_for('main.add_service'), data={'name': 'service_one'}) + client.login(api_user_active, mocker, service_one) + response = client.post(url_for('main.add_service'), data={'name': 'SERVICE_TWO'}) + assert response.status_code == 200 assert 'This service name is already in use' in response.get_data(as_text=True) assert mock_get_services.called + assert not mock_create_service.called diff --git a/tests/app/main/views/test_service_settings.py b/tests/app/main/views/test_service_settings.py index ef3a16ac0..da6d255d6 100644 --- a/tests/app/main/views/test_service_settings.py +++ b/tests/app/main/views/test_service_settings.py @@ -66,7 +66,7 @@ def test_should_not_allow_duplicate_names(app_, service_id = service_one['id'] response = client.post( url_for('main.service_name_change', service_id=service_id), - data={'name': "service_one"}) + data={'name': "SErvICE_TWO"}) assert response.status_code == 200 resp_data = response.get_data(as_text=True)