From cdd666a23b6c1c25c0fec7fbf800492c036216dc Mon Sep 17 00:00:00 2001 From: Rebecca Law Date: Fri, 8 Jul 2016 11:00:23 +0100 Subject: [PATCH 1/2] Add api client call to email users that are already registered --- app/notify_client/user_api_client.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/notify_client/user_api_client.py b/app/notify_client/user_api_client.py index ac9e99c22..b6bb66c80 100644 --- a/app/notify_client/user_api_client.py +++ b/app/notify_client/user_api_client.py @@ -75,6 +75,11 @@ class UserApiClient(BaseAPIClient): endpoint = '/user/{0}/email-verification'.format(user_id) self.post(endpoint, data=data) + def sent_already_registered_email(self, user_id, to): + data = {'email': to} + endpoint = '/user/{0}/email-already-registered'.format(user_id) + self.post(endpoint, data=data) + def check_verify_code(self, user_id, code, code_type): data = {'code_type': code_type, 'code': code} endpoint = '/user/{}/verify/code'.format(user_id) From 43938936f3505c834bf04bda61f45266d0ebe54b Mon Sep 17 00:00:00 2001 From: Rebecca Law Date: Tue, 12 Jul 2016 11:53:30 +0100 Subject: [PATCH 2/2] If a user has already registered with the email they will get a different email when the register again. The email includes likes to sign in and send feedback --- app/main/views/register.py | 24 ++++++++++-------------- app/notify_client/user_api_client.py | 2 +- tests/app/main/views/test_register.py | 15 ++++++--------- tests/conftest.py | 5 +++++ 4 files changed, 22 insertions(+), 24 deletions(-) diff --git a/app/main/views/register.py b/app/main/views/register.py index fb8d05511..722cc6682 100644 --- a/app/main/views/register.py +++ b/app/main/views/register.py @@ -34,12 +34,8 @@ def register(): form = RegisterUserForm() if form.validate_on_submit(): - registered = _do_registration(form, send_sms=False) - if registered: - return redirect(url_for('main.registration_continue')) - else: - flash('There was an error registering your account') - return render_template('views/register.html', form=form), 400 + _do_registration(form, send_sms=False) + return redirect(url_for('main.registration_continue')) return render_template('views/register.html', form=form) @@ -54,12 +50,9 @@ def register_from_invite(): if form.validate_on_submit(): if form.service.data != invited_user['service'] or form.email_address.data != invited_user['email_address']: abort(400) - registered = _do_registration(form, send_email=False) - if registered: - invite_api_client.accept_invite(invited_user['service'], invited_user['id']) - return redirect(url_for('main.verify')) - else: - flash('There was an error registering your account') + _do_registration(form, send_email=False) + invite_api_client.accept_invite(invited_user['service'], invited_user['id']) + return redirect(url_for('main.verify')) form.service.data = invited_user['service'] form.email_address.data = invited_user['email_address'] @@ -87,9 +80,12 @@ def _do_registration(form, service=None, send_sms=True, send_email=True): user_api_client.send_verify_code(user.id, 'sms', user.mobile_number) session['expiry_date'] = str(datetime.utcnow() + timedelta(hours=1)) session['user_details'] = {"email": user.email_address, "id": user.id} - return True else: - return False + if send_email: + user = user_api_client.get_user_by_email(form.email_address.data) + user_api_client.send_already_registered_email(user.id, user.email_address) + session['expiry_date'] = str(datetime.utcnow() + timedelta(hours=1)) + session['user_details'] = {"email": user.email_address, "id": user.id} @main.route('/registration-continue') diff --git a/app/notify_client/user_api_client.py b/app/notify_client/user_api_client.py index b6bb66c80..8c43f2eeb 100644 --- a/app/notify_client/user_api_client.py +++ b/app/notify_client/user_api_client.py @@ -75,7 +75,7 @@ class UserApiClient(BaseAPIClient): endpoint = '/user/{0}/email-verification'.format(user_id) self.post(endpoint, data=data) - def sent_already_registered_email(self, user_id, to): + def send_already_registered_email(self, user_id, to): data = {'email': to} endpoint = '/user/{0}/email-already-registered'.format(user_id) self.post(endpoint, data=data) diff --git a/tests/app/main/views/test_register.py b/tests/app/main/views/test_register.py index c15dabd6c..b6d4dfadd 100644 --- a/tests/app/main/views/test_register.py +++ b/tests/app/main/views/test_register.py @@ -123,9 +123,10 @@ def test_should_return_200_if_password_is_blacklisted(app_, assert 'That password is blacklisted, too common' in response.get_data(as_text=True) -def test_register_with_existing_email_returns_error(app_, - api_user_active, - mock_get_user_by_email): +def test_register_with_existing_email_sends_emails(app_, + api_user_active, + mock_get_user_by_email, + mock_send_already_registered_email): user_data = { 'name': 'Already Hasaccount', 'email_address': api_user_active.email_address, @@ -136,9 +137,5 @@ def test_register_with_existing_email_returns_error(app_, with app_.test_request_context(): response = app_.test_client().post(url_for('main.register'), data=user_data) - assert response.status_code == 400 - page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser') - element = page.find('h1') - assert element.text == 'Create an account' - flash_banner = page.find('div', class_='banner-dangerous').string.strip() - assert flash_banner == 'There was an error registering your account' + assert response.status_code == 302 + assert response.location == url_for('main.registration_continue', _external=True) diff --git a/tests/conftest.py b/tests/conftest.py index 35c881a18..bc7432c8c 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1121,3 +1121,8 @@ def mock_events(mocker): return {'some': 'data'} return mocker.patch('app.events_api_client.create_event', side_effect=_create_event) + + +@pytest.fixture(scope='function') +def mock_send_already_registered_email(mocker): + return mocker.patch('app.user_api_client.send_already_registered_email')