Merge pull request #15851 from edx/bessiesteinberg/WL-1098
Add profession & specialty fields to registration page
This commit is contained in:
@@ -84,6 +84,10 @@ PASSWORD_CANT_EQUAL_USERNAME_MSG = _(u"Password cannot be the same as the userna
|
||||
REQUIRED_FIELD_NAME_MSG = _(u"Enter your full name.")
|
||||
REQUIRED_FIELD_CONFIRM_EMAIL_MSG = _(u"The email addresses do not match.")
|
||||
REQUIRED_FIELD_COUNTRY_MSG = _(u"Select your country or region of residence.")
|
||||
REQUIRED_FIELD_PROFESSION_SELECT_MSG = _(u"Select your profession.")
|
||||
REQUIRED_FIELD_SPECIALTY_SELECT_MSG = _(u"Select your specialty.")
|
||||
REQUIRED_FIELD_PROFESSION_TEXT_MSG = _(u"Enter your profession.")
|
||||
REQUIRED_FIELD_SPECIALTY_TEXT_MSG = _(u"Enter your specialty.")
|
||||
REQUIRED_FIELD_CITY_MSG = _(u"Enter your city.")
|
||||
REQUIRED_FIELD_GOALS_MSG = _(u"Tell us your goals.")
|
||||
REQUIRED_FIELD_LEVEL_OF_EDUCATION_MSG = _(u"Select the highest level of education you have completed.")
|
||||
|
||||
@@ -148,6 +148,8 @@ class RegistrationFormFactory(object):
|
||||
"goals",
|
||||
"honor_code",
|
||||
"terms_of_service",
|
||||
"profession",
|
||||
"specialty",
|
||||
]
|
||||
|
||||
def _is_field_visible(self, field_name):
|
||||
@@ -472,6 +474,80 @@ class RegistrationFormFactory(object):
|
||||
required=required
|
||||
)
|
||||
|
||||
def _add_field_with_configurable_select_options(self, field_name, field_label, form_desc, required=False):
|
||||
"""Add a field to a form description.
|
||||
If select options are given for this field, it will be a select type
|
||||
otherwise it will be a text type.
|
||||
|
||||
Arguments:
|
||||
field_name: name of field
|
||||
field_label: label for the field
|
||||
form_desc: A form description
|
||||
|
||||
Keyword Arguments:
|
||||
required (bool): Whether this field is required; defaults to False
|
||||
|
||||
"""
|
||||
|
||||
extra_field_options = configuration_helpers.get_value('EXTRA_FIELD_OPTIONS')
|
||||
if extra_field_options is None or extra_field_options.get(field_name) is None:
|
||||
field_type = "text"
|
||||
include_default_option = False
|
||||
options = None
|
||||
error_msg = ''
|
||||
exec("error_msg = accounts.REQUIRED_FIELD_%s_TEXT_MSG" % (field_name.upper()))
|
||||
else:
|
||||
field_type = "select"
|
||||
include_default_option = True
|
||||
field_options = extra_field_options.get(field_name)
|
||||
options = [(unicode(option.lower()), option) for option in field_options]
|
||||
error_msg = ''
|
||||
exec("error_msg = accounts.REQUIRED_FIELD_%s_SELECT_MSG" % (field_name.upper()))
|
||||
|
||||
form_desc.add_field(
|
||||
field_name,
|
||||
label=field_label,
|
||||
field_type=field_type,
|
||||
options=options,
|
||||
include_default_option=include_default_option,
|
||||
required=required,
|
||||
error_messages={
|
||||
"required": error_msg
|
||||
}
|
||||
)
|
||||
|
||||
def _add_profession_field(self, form_desc, required=False):
|
||||
"""Add a profession field to a form description.
|
||||
|
||||
Arguments:
|
||||
form_desc: A form description
|
||||
|
||||
Keyword Arguments:
|
||||
required (bool): Whether this field is required; defaults to False
|
||||
|
||||
"""
|
||||
# Translators: This label appears above a dropdown menu on the registration
|
||||
# form used to select the user's profession
|
||||
profession_label = _("Profession")
|
||||
|
||||
self._add_field_with_configurable_select_options('profession', profession_label, form_desc, required=required)
|
||||
|
||||
def _add_specialty_field(self, form_desc, required=False):
|
||||
"""Add a specialty field to a form description.
|
||||
|
||||
Arguments:
|
||||
form_desc: A form description
|
||||
|
||||
Keyword Arguments:
|
||||
required (bool): Whether this field is required; defaults to False
|
||||
|
||||
"""
|
||||
# Translators: This label appears above a dropdown menu on the registration
|
||||
# form used to select the user's specialty
|
||||
specialty_label = _("Specialty")
|
||||
|
||||
self._add_field_with_configurable_select_options('specialty', specialty_label, form_desc, required=required)
|
||||
|
||||
def _add_mailing_address_field(self, form_desc, required=True):
|
||||
"""Add a mailing address field to a form description.
|
||||
Arguments:
|
||||
|
||||
@@ -22,6 +22,7 @@ from django_comment_common import models
|
||||
from openedx.core.djangoapps.site_configuration.helpers import get_value
|
||||
from openedx.core.lib.api.test_utils import ApiTestCase, TEST_API_KEY
|
||||
from openedx.core.lib.time_zone_utils import get_display_time_zone
|
||||
from openedx.core.djangoapps.site_configuration.tests.test_util import with_site_configuration
|
||||
from openedx.core.djangolib.testing.utils import CacheIsolationTestCase, skip_unless_lms
|
||||
from student.tests.factories import UserFactory
|
||||
from third_party_auth.tests.testutil import simulate_running_pipeline, ThirdPartyAuthTestMixin
|
||||
@@ -923,6 +924,52 @@ class RegistrationViewTest(ThirdPartyAuthTestMixin, UserAPITestCase):
|
||||
CITY = "Springfield"
|
||||
COUNTRY = "us"
|
||||
GOALS = "Learn all the things!"
|
||||
PROFESSION_OPTIONS = [
|
||||
{
|
||||
"name": u'--',
|
||||
"value": u'',
|
||||
"default": True
|
||||
|
||||
},
|
||||
{
|
||||
"value": u'software engineer',
|
||||
"name": u'Software Engineer',
|
||||
"default": False
|
||||
},
|
||||
{
|
||||
"value": u'teacher',
|
||||
"name": u'Teacher',
|
||||
"default": False
|
||||
},
|
||||
{
|
||||
"value": u'other',
|
||||
"name": u'Other',
|
||||
"default": False
|
||||
}
|
||||
]
|
||||
SPECIALTY_OPTIONS = [
|
||||
{
|
||||
"name": u'--',
|
||||
"value": u'',
|
||||
"default": True
|
||||
|
||||
},
|
||||
{
|
||||
"value": "aerospace",
|
||||
"name": "Aerospace",
|
||||
"default": False
|
||||
},
|
||||
{
|
||||
"value": u'early education',
|
||||
"name": u'Early Education',
|
||||
"default": False
|
||||
},
|
||||
{
|
||||
"value": u'n/a',
|
||||
"name": u'N/A',
|
||||
"default": False
|
||||
}
|
||||
]
|
||||
|
||||
def setUp(self):
|
||||
super(RegistrationViewTest, self).setUp()
|
||||
@@ -1299,6 +1346,66 @@ class RegistrationViewTest(ThirdPartyAuthTestMixin, UserAPITestCase):
|
||||
}
|
||||
)
|
||||
|
||||
def test_register_form_profession_without_profession_options(self):
|
||||
self._assert_reg_field(
|
||||
{"profession": "required"},
|
||||
{
|
||||
"name": "profession",
|
||||
"type": "text",
|
||||
"required": True,
|
||||
"label": "Profession",
|
||||
"errorMessages": {
|
||||
"required": "Enter your profession."
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
@with_site_configuration(configuration={"EXTRA_FIELD_OPTIONS": {"profession": ["Software Engineer", "Teacher", "Other"]}})
|
||||
def test_register_form_profession_with_profession_options(self):
|
||||
self._assert_reg_field(
|
||||
{"profession": "required"},
|
||||
{
|
||||
"name": "profession",
|
||||
"type": "select",
|
||||
"required": True,
|
||||
"label": "Profession",
|
||||
"options": self.PROFESSION_OPTIONS,
|
||||
"errorMessages": {
|
||||
"required": "Select your profession."
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
def test_register_form_specialty_without_specialty_options(self):
|
||||
self._assert_reg_field(
|
||||
{"specialty": "required"},
|
||||
{
|
||||
"name": "specialty",
|
||||
"type": "text",
|
||||
"required": True,
|
||||
"label": "Specialty",
|
||||
"errorMessages": {
|
||||
"required": "Enter your specialty."
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
@with_site_configuration(configuration={"EXTRA_FIELD_OPTIONS": {"specialty": ["Aerospace", "Early Education", "N/A"]}})
|
||||
def test_register_form_specialty_with_specialty_options(self):
|
||||
self._assert_reg_field(
|
||||
{"specialty": "required"},
|
||||
{
|
||||
"name": "specialty",
|
||||
"type": "select",
|
||||
"required": True,
|
||||
"label": "Specialty",
|
||||
"options": self.SPECIALTY_OPTIONS,
|
||||
"errorMessages": {
|
||||
"required": "Select your specialty."
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
def test_registration_form_mailing_address(self):
|
||||
self._assert_reg_field(
|
||||
{"mailing_address": "optional"},
|
||||
@@ -1618,6 +1725,8 @@ class RegistrationViewTest(ThirdPartyAuthTestMixin, UserAPITestCase):
|
||||
"goals",
|
||||
"honor_code",
|
||||
"terms_of_service",
|
||||
"specialty",
|
||||
"profession",
|
||||
],
|
||||
)
|
||||
def test_field_order_override(self):
|
||||
|
||||
Reference in New Issue
Block a user