mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-23 15:57:23 -04:00
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
This commit is contained in:
@@ -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')]
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -11,16 +11,19 @@ Create an account
|
||||
<div class="grid-row">
|
||||
<div class="column-two-thirds">
|
||||
<h1 class="heading-large">Create an account</h1>
|
||||
<p>Your account will be created with this email: {{email_address}}</p>
|
||||
<p>Your account will be created with this email: {{invited_user.email_address}}</p>
|
||||
<form method="post" autocomplete="off">
|
||||
{{ textbox(form.name, width='3-4') }}
|
||||
<div class="extra-tracking">
|
||||
{{ textbox(form.mobile_number, width='3-4', hint='We’ll send you a security code by text message') }}
|
||||
</div>
|
||||
{% if invited_user.auth_type == 'sms_auth' %}
|
||||
<div class="extra-tracking">
|
||||
{{ textbox(form.mobile_number, width='3-4', hint='We’ll send you a security code by text message') }}
|
||||
</div>
|
||||
{% endif %}
|
||||
{{ textbox(form.password, hint="At least 8 characters", width='3-4') }}
|
||||
{{ page_footer("Continue") }}
|
||||
{{form.service}}
|
||||
{{form.email_address}}
|
||||
{{form.auth_type}}
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user