From fe070ddfa285d705fe6ea68e7052fbaec4d1f408 Mon Sep 17 00:00:00 2001 From: Bryan Brancotte <bryan.brancotte@pasteur.fr> Date: Fri, 30 Aug 2019 15:09:06 +0200 Subject: [PATCH] Allow to set first and last name required --- README.md | 1 + README.rst | 2 ++ basetheme_bootstrap/forms.py | 17 ++++++++++++ basetheme_bootstrap/tests.py | 52 +++++++++++++++++++++++++++++++++++- setup.py | 2 +- tests/settings.py | 1 + 6 files changed, 73 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d3f0168..e075141 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,7 @@ BASETHEME_BOOTSTRAP_USER_PREFERENCE_MODEL_ENABLED = True BASETHEME_BOOTSTRAP_USER_PREFERENCE_MODEL_LOCATION_APP = "test_app_1" BASETHEME_BOOTSTRAP_USER_PREFERENCE_MODEL_NAME = "MyUserPreferences" BASETHEME_BOOTSTRAP_USERNAME_IS_EMAIL = False +BASETHEME_BOOTSTRAP_FIRST_LAST_NAME_REQUIRED = False ################################################################################ ``` diff --git a/README.rst b/README.rst index 551a964..8418549 100644 --- a/README.rst +++ b/README.rst @@ -50,6 +50,8 @@ Quick start BASETHEME_BOOTSTRAP_USER_PREFERENCE_MODEL_ENABLED = True BASETHEME_BOOTSTRAP_USER_PREFERENCE_MODEL_LOCATION_APP = "test_app_1" BASETHEME_BOOTSTRAP_USER_PREFERENCE_MODEL_NAME = "MyUserPreferences" + BASETHEME_BOOTSTRAP_USERNAME_IS_EMAIL = False + BASETHEME_BOOTSTRAP_FIRST_LAST_NAME_REQUIRED = False ################################################################################ diff --git a/basetheme_bootstrap/forms.py b/basetheme_bootstrap/forms.py index f082435..6fbecd1 100644 --- a/basetheme_bootstrap/forms.py +++ b/basetheme_bootstrap/forms.py @@ -13,6 +13,12 @@ def is_username_is_email(): except AttributeError: return False +def is_first_last_name_required(): + try: + return settings.BASETHEME_BOOTSTRAP_FIRST_LAST_NAME_REQUIRED + except AttributeError: + return False + class CleanUsernameAndSuggestReset: class Meta: @@ -29,6 +35,11 @@ class CleanUsernameAndSuggestReset: self.add_error("email", mark_safe(_( 'The email already exists, if you have lost your password you can reset it ' '<a href="%s">here</a>.') % (reverse('basetheme_bootstrap:password_reset')))) + if is_first_last_name_required(): + if len(f.get("first_name", ""))==0: + self.add_error("email", _("First name is required")) + if len(f.get("last_name", ""))==0: + self.add_error("email", _("Last name is required")) return f @@ -43,6 +54,9 @@ class UserCreationFormWithMore(CleanUsernameAndSuggestReset, auth_forms.UserCrea self.fields['email'].widget.attrs.update({'required': True}) if is_username_is_email(): del self.fields['username'] + if is_first_last_name_required(): + self.fields['first_name'].widget.attrs.update({'required': True}) + self.fields['last_name'].widget.attrs.update({'required': True}) def save(self, commit=True): user = super().save(commit=False) @@ -63,6 +77,9 @@ class MyUserChangeForm(CleanUsernameAndSuggestReset, auth_forms.UserChangeForm): if is_username_is_email(): del self.fields['username'] self.fields['email'].widget.attrs.update({'required': True}) + if is_first_last_name_required(): + self.fields['first_name'].widget.attrs.update({'required': True}) + self.fields['last_name'].widget.attrs.update({'required': True}) def save(self, commit=True): user = super().save(commit=False) diff --git a/basetheme_bootstrap/tests.py b/basetheme_bootstrap/tests.py index 625dcf3..78a6004 100644 --- a/basetheme_bootstrap/tests.py +++ b/basetheme_bootstrap/tests.py @@ -76,7 +76,7 @@ class SignUpWithoutUsernameTests(TestCase): self.assertEqual(user.email, data["email"]) def test_sign_up_detecte_duplicate_email(self): - get_user_model().objects.create(username="toto",email="userAAA@mp.com") + get_user_model().objects.create(username="toto", email="userAAA@mp.com") user_count = get_user_model().objects.count() data = { 'email': "userAAA@mp.com", @@ -88,6 +88,56 @@ class SignUpWithoutUsernameTests(TestCase): self.assertEqual(response.status_code, 200) +@override_settings( + BASETHEME_BOOTSTRAP_FIRST_LAST_NAME_REQUIRED=True, +) +class SignUpWithFirstLastNameRequiredTests(TestCase): + + def test_sign_up_form_view(self): + user_count = get_user_model().objects.count() + data = { + 'username': "userAAA@mp.com", + 'email': "userAAA@mp.com", + 'password1': "user@mp.comuser@mp.comuser@mp.comuser@mp.com", + 'password2': "user@mp.comuser@mp.comuser@mp.comuser@mp.com", + 'first_name': "my_first_name", + 'last_name': "my_last_name", + } + response = self.client.post(reverse('basetheme_bootstrap:signup'), data) + self.assertEqual(response.status_code, 302) + self.assertRedirects(response, expected_url=reverse('home'), ) + self.assertEqual(get_user_model().objects.count(), user_count + 1) + user = get_user_model().objects.last() + self.assertEqual(user.username, data["email"]) + self.assertEqual(user.email, data["email"]) + self.assertEqual(user.first_name, data["first_name"]) + self.assertEqual(user.last_name, data["last_name"]) + + def test_sign_up_detect_missing_last_name(self): + data = { + 'username': "userAAA@mp.com", + 'email': "userAAA@mp.com", + 'password1': "user@mp.comuser@mp.comuser@mp.comuser@mp.com", + 'password2': "user@mp.comuser@mp.comuser@mp.comuser@mp.com", + 'first_name': "my_first_name", + 'last_name': "", + } + response = self.client.post(reverse('basetheme_bootstrap:signup'), data) + self.assertEqual(response.status_code, 200) + + def test_sign_up_detect_missing_first_name(self): + data = { + 'username': "userAAA@mp.com", + 'email': "userAAA@mp.com", + 'password1': "user@mp.comuser@mp.comuser@mp.comuser@mp.com", + 'password2': "user@mp.comuser@mp.comuser@mp.comuser@mp.com", + 'first_name': "", + 'last_name': "my_last_name", + } + response = self.client.post(reverse('basetheme_bootstrap:signup'), data) + self.assertEqual(response.status_code, 200) + + class TestWithTemplatesInPlace(SignUpTests): def setUp(self): diff --git a/setup.py b/setup.py index 0f0b1df..fdc220c 100644 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ readme = open('README.rst').read() setup( name='django-basetheme-bootstrap', - version='0.2.8', + version='0.2.9', description='Django Basetheme Bootstrap', long_description=readme, author='Bryan Brancotte', diff --git a/tests/settings.py b/tests/settings.py index 842ee24..38b8df3 100644 --- a/tests/settings.py +++ b/tests/settings.py @@ -137,6 +137,7 @@ BASETHEME_BOOTSTRAP_USER_PREFERENCE_MODEL_ENABLED = True BASETHEME_BOOTSTRAP_USER_PREFERENCE_MODEL_LOCATION_APP = "test_app_1" BASETHEME_BOOTSTRAP_USER_PREFERENCE_MODEL_NAME = "MyUserPreferences" # BASETHEME_BOOTSTRAP_USERNAME_IS_EMAIL = True # default is False +# BASETHEME_BOOTSTRAP_FIRST_LAST_NAME_REQUIRED = True # default is False ################################################################################ # Various debug stuff -- GitLab