feat: add optional-exposed extra field type to registration form

This defines optional extra fields that are not hidden under the toggle on the 
registration page.
This commit is contained in:
Gábor Boros
2021-11-12 15:24:59 +01:00
committed by GitHub
parent 285e2c4f29
commit 230795fb07
8 changed files with 78 additions and 12 deletions

View File

@@ -328,12 +328,16 @@ class RegistrationFormFactory:
def _is_field_visible(self, field_name):
"""Check whether a field is visible based on Django settings. """
return self._extra_fields_setting.get(field_name) in ["required", "optional"]
return self._extra_fields_setting.get(field_name) in ["required", "optional", "optional-exposed"]
def _is_field_required(self, field_name):
"""Check whether a field is required based on Django settings. """
return self._extra_fields_setting.get(field_name) == "required"
def _is_field_exposed(self, field_name):
"""Check whether a field is optional and should be toggled. """
return self._extra_fields_setting.get(field_name) in ["required", "optional-exposed"]
def __init__(self):
if settings.ENABLE_COPPA_COMPLIANCE and 'year_of_birth' in self.EXTRA_FIELDS:
@@ -441,6 +445,7 @@ class RegistrationFormFactory:
FormDescription.FIELD_TYPE_MAP.get(field.__class__)),
placeholder=field.initial,
instructions=field.help_text,
exposed=self._is_field_exposed(field_name),
required=(self._is_field_required(field_name) or field.required),
restrictions=restrictions,
options=getattr(field, 'choices', None), error_messages=field.error_messages,

View File

@@ -1020,8 +1020,8 @@ class LoginSessionViewTest(ApiTestCase, OpenEdxEventsTestMixin):
form_desc = json.loads(response.content.decode('utf-8'))
assert form_desc['method'] == 'post'
assert form_desc['submit_url'] == reverse('user_api_login_session', kwargs={'api_version': 'v1'})
assert form_desc['fields'] == [{'name': 'email', 'defaultValue': '', 'type': 'email', 'required': True,
'label': 'Email', 'placeholder': '',
assert form_desc['fields'] == [{'name': 'email', 'defaultValue': '', 'type': 'email', 'exposed': True,
'required': True, 'label': 'Email', 'placeholder': '',
'instructions': 'The email address you used to register with {platform_name}'
.format(platform_name=settings.PLATFORM_NAME),
'restrictions': {'min_length': EMAIL_MIN_LENGTH,
@@ -1033,6 +1033,7 @@ class LoginSessionViewTest(ApiTestCase, OpenEdxEventsTestMixin):
{'name': 'password',
'defaultValue': '',
'type': 'password',
'exposed': True,
'required': True,
'label': 'Password',
'placeholder': '',

View File

@@ -710,8 +710,8 @@ class PasswordResetViewTest(UserAPITestCase):
assert form_desc['method'] == 'post'
assert form_desc['submit_url'] == reverse('password_change_request')
assert form_desc['fields'] ==\
[{'name': 'email', 'defaultValue': '', 'type': 'email', 'required': True,
'label': 'Email', 'placeholder': 'username@domain.com',
[{'name': 'email', 'defaultValue': '', 'type': 'email', 'exposed': True,
'required': True, 'label': 'Email', 'placeholder': 'username@domain.com',
'instructions': 'The email address you used to register with {platform_name}'
.format(platform_name=settings.PLATFORM_NAME),
'restrictions': {'min_length': EMAIL_MIN_LENGTH,