From 8c14113da5ae8bbaec3fcf532a160930c38f7c82 Mon Sep 17 00:00:00 2001 From: Leo Hemsted Date: Tue, 14 Nov 2017 15:53:38 +0000 Subject: [PATCH] only show mobile number on register from invite page if user is sms_auth also clean up the way the form is invoked - it now populates from an invited_user object --- app/main/forms.py | 7 +++++++ app/main/views/register.py | 13 ++++++------- app/templates/views/register-from-invite.html | 11 +++++++---- tests/app/main/views/test_accept_invite.py | 2 +- tests/app/main/views/test_register.py | 16 ++++++++++++++++ 5 files changed, 37 insertions(+), 12 deletions(-) diff --git a/app/main/forms.py b/app/main/forms.py index 2363b7e28..f9e1e47c3 100644 --- a/app/main/forms.py +++ b/app/main/forms.py @@ -176,6 +176,13 @@ class RegisterUserForm(Form): class RegisterUserFromInviteForm(Form): + def __init__(self, invited_user): + super().__init__( + service=invited_user['service'], + email_address=invited_user['email_address'], + auth_type=invited_user['auth_type'], + ) + name = StringField( 'Full name', validators=[DataRequired(message='Can’t be empty')] diff --git a/app/main/views/register.py b/app/main/views/register.py index f94895695..0bdcf3ca4 100644 --- a/app/main/views/register.py +++ b/app/main/views/register.py @@ -46,24 +46,23 @@ def register_from_invite(): if not invited_user: abort(404) - form = RegisterUserFromInviteForm() + is_sms_auth = invited_user['auth_type'] == 'sms_auth' + + form = RegisterUserFromInviteForm(invited_user) if form.validate_on_submit(): if form.service.data != invited_user['service'] or form.email_address.data != invited_user['email_address']: abort(400) - _do_registration(form, send_email=False, send_sms=invited_user['auth_type'] == 'sms_auth') + _do_registration(form, send_email=False, send_sms=is_sms_auth) invite_api_client.accept_invite(invited_user['service'], invited_user['id']) - if invited_user['auth_type'] == 'sms_auth': + if is_sms_auth: return redirect(url_for('main.verify')) else: # we've already proven this user has email because they clicked the invite link, # so just activate them straight away return activate_user(session['user_details']['id']) - form.service.data = invited_user['service'] - form.email_address.data = invited_user['email_address'] - - return render_template('views/register-from-invite.html', email_address=invited_user['email_address'], form=form) + return render_template('views/register-from-invite.html', invited_user=invited_user, form=form) def _do_registration(form, send_sms=True, send_email=True): diff --git a/app/templates/views/register-from-invite.html b/app/templates/views/register-from-invite.html index 29f9572b8..4051b8086 100644 --- a/app/templates/views/register-from-invite.html +++ b/app/templates/views/register-from-invite.html @@ -11,16 +11,19 @@ Create an account

Create an account

-

Your account will be created with this email: {{email_address}}

+

Your account will be created with this email: {{invited_user.email_address}}

{{ textbox(form.name, width='3-4') }} -
- {{ textbox(form.mobile_number, width='3-4', hint='We’ll send you a security code by text message') }} -
+ {% if invited_user.auth_type == 'sms_auth' %} +
+ {{ textbox(form.mobile_number, width='3-4', hint='We’ll send you a security code by text message') }} +
+ {% endif %} {{ textbox(form.password, hint="At least 8 characters", width='3-4') }} {{ page_footer("Continue") }} {{form.service}} {{form.email_address}} + {{form.auth_type}}
diff --git a/tests/app/main/views/test_accept_invite.py b/tests/app/main/views/test_accept_invite.py index 842466493..aa2f0de30 100644 --- a/tests/app/main/views/test_accept_invite.py +++ b/tests/app/main/views/test_accept_invite.py @@ -354,7 +354,7 @@ def test_new_invited_user_verifies_and_added_to_service( 'password': 'longpassword', 'mobile_number': '+447890123456', 'name': 'Invited User', - # 'auth_type': 'sms_auth' + 'auth_type': 'sms_auth' } response = client.post(url_for('main.register_from_invite'), data=data) assert response.status_code == 302 diff --git a/tests/app/main/views/test_register.py b/tests/app/main/views/test_register.py index 544e69d8c..ca83de216 100644 --- a/tests/app/main/views/test_register.py +++ b/tests/app/main/views/test_register.py @@ -327,3 +327,19 @@ def test_cannot_register_with_sms_auth_and_missing_mobile_number( err = page.select_one('.error-message') assert err.text.strip() == 'Can’t be empty' assert err.attrs['data-error-label'] == 'mobile_number' + + +def test_register_from_invite_form_doesnt_show_mobile_number_field_if_email_auth( + client, + sample_invite +): + sample_invite['auth_type'] = 'email_auth' + with client.session_transaction() as session: + session['invited_user'] = sample_invite + + response = client.get(url_for('main.register_from_invite')) + + assert response.status_code == 200 + page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser') + assert page.find('input', attrs={'name': 'auth_type'}).attrs['value'] == 'email_auth' + assert page.find('input', attrs={'name': 'mobile_number'}) is None