profile: disable searchable for first_name and last_name fields (#76673) #35
|
@ -17,6 +17,8 @@
|
|||
from django import forms
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from . import models
|
||||
|
||||
|
||||
class EditFullNameTemplateForm(forms.Form):
|
||||
user_full_name_template = forms.CharField(
|
||||
|
@ -24,3 +26,34 @@ class EditFullNameTemplateForm(forms.Form):
|
|||
widget=forms.Textarea,
|
||||
required=False,
|
||||
)
|
||||
|
||||
|
||||
class AttributeDefinitionCreateForm(forms.ModelForm):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
if self.instance.name in ['first_name', 'last_name']:
|
||||
self.initial['searchable'] = True
|
||||
self.fields['searchable'].disabled = True
|
||||
|
||||
self.fields['searchable'].help_text = _('"%s" field is always searchable.') % self.instance.name
|
||||
|
||||
class Meta:
|
||||
model = models.AttributeDefinition
|
||||
fields = [
|
||||
'label',
|
||||
'name',
|
||||
'description',
|
||||
'required',
|
||||
'required_on_login',
|
||||
'asked_on_registration',
|
||||
'user_editable',
|
||||
'user_visible',
|
||||
'searchable',
|
||||
'disabled',
|
||||
'kind',
|
||||
]
|
||||
|
||||
|
||||
class AttributeDefinitionUpdateForm(AttributeDefinitionCreateForm):
|
||||
class Meta(AttributeDefinitionCreateForm.Meta):
|
||||
model = models.AttributeDefinition
|
||||
vdeniaud
commented
Typo Typo
|
||||
exclude = ['name', 'kind']
|
||||
|
|
|
@ -17,12 +17,11 @@
|
|||
from django.shortcuts import redirect
|
||||
from django.urls import reverse, reverse_lazy
|
||||
from django.utils.translation import gettext as _
|
||||
from django.views.generic import CreateView, ListView, RedirectView, TemplateView, UpdateView
|
||||
from django.views.generic import CreateView, ListView, TemplateView, UpdateView
|
||||
|
||||
from hobo.deploy.signals import notify_agents
|
||||
from hobo.environment.forms import VariablesFormMixin
|
||||
|
||||
from .forms import EditFullNameTemplateForm
|
||||
from .forms import AttributeDefinitionCreateForm, AttributeDefinitionUpdateForm, EditFullNameTemplateForm
|
||||
from .models import AttributeDefinition
|
||||
|
||||
|
||||
|
@ -35,19 +34,7 @@ home = HomeView.as_view()
|
|||
|
||||
class AddAttributeView(CreateView):
|
||||
model = AttributeDefinition
|
||||
fields = [
|
||||
'label',
|
||||
'name',
|
||||
'description',
|
||||
'required',
|
||||
'required_on_login',
|
||||
'asked_on_registration',
|
||||
'user_editable',
|
||||
'user_visible',
|
||||
'searchable',
|
||||
'disabled',
|
||||
'kind',
|
||||
]
|
||||
form_class = AttributeDefinitionCreateForm
|
||||
success_url = reverse_lazy('profile-home')
|
||||
|
||||
|
||||
|
@ -56,19 +43,9 @@ add_attribute = AddAttributeView.as_view()
|
|||
|
||||
class OptionsView(UpdateView):
|
||||
model = AttributeDefinition
|
||||
form_class = AttributeDefinitionUpdateForm
|
||||
slug_url_kwarg = 'name'
|
||||
slug_field = 'name'
|
||||
fields = [
|
||||
'label',
|
||||
'description',
|
||||
'required',
|
||||
'required_on_login',
|
||||
'asked_on_registration',
|
||||
'user_editable',
|
||||
'user_visible',
|
||||
'searchable',
|
||||
'disabled',
|
||||
]
|
||||
success_url = reverse_lazy('profile-home')
|
||||
|
||||
|
||||
|
|
|
@ -142,6 +142,18 @@ def test_profile_attribute_option_view(logged_app):
|
|||
assert resp.location == '/profile/'
|
||||
|
||||
|
||||
@pytest.mark.parametrize('name', ['first_name', 'last_name'])
|
||||
def test_profile_attribute_searchable_is_disabled_on_name(logged_app, name):
|
||||
vdeniaud
commented
Pas fan de ce test qui passe même si il n'y a aucun AttributeDefinition en base, itérer sur ['first_name', 'last_name', un_autre_attribut] me paraît plus solide (et en vérité plus besoin de boucle dans ce cas là). Pas fan de ce test qui passe même si il n'y a aucun AttributeDefinition en base, itérer sur ['first_name', 'last_name', un_autre_attribut] me paraît plus solide (et en vérité plus besoin de boucle dans ce cas là).
bdauvergne
commented
Pour moi l'intérêt c'est de vérifier le profil par défaut qui est installé et pas un choix à l'instant T, on sait qu'il y a toujours un profil par défaut installé. Pour moi l'intérêt c'est de vérifier le profil par défaut qui est installé et pas un choix à l'instant T, on sait qu'il y a toujours un profil par défaut installé.
|
||||
resp = logged_app.get(f'/profile/{name}/options')
|
||||
assert 'disabled' in resp.form['searchable'].attrs
|
||||
assert resp.form['searchable'].value
|
||||
|
||||
|
||||
def test_profile_attribute_searchable_is_not_disabled_on_address(logged_app):
|
||||
resp = logged_app.get('/profile/address/options')
|
||||
assert 'disabled' not in resp.form['searchable'].attrs
|
||||
|
||||
|
||||
def test_debug_home(logged_app):
|
||||
from hobo.environment.utils import get_installed_services_dict, get_setting_variable
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Je ne vois pas de raison de ne pas écrire
if self.instance.name in ['first_name', 'last_name']:
en se passant de la gymnastique au dessus ?