profile: disable searchable for first_name and last_name fields (#76673) #35

Merged
bdauvergne merged 1 commits from wip/76673-profile-griser-la-case-a-cocher into main 2023-04-21 10:18:11 +02:00
3 changed files with 49 additions and 27 deletions

View File

@ -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

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 ?

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 ?
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

Typo

Typo
exclude = ['name', 'kind']

View File

@ -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')

View File

@ -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):

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à).

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