Projet

Général

Profil

0001-manager-provide-a-simpler-role-creation-form-66794.patch

Paul Marillonnet, 04 juillet 2022 11:28

Télécharger (3,85 ko)

Voir les différences:

Subject: [PATCH] manager: provide a simpler role creation form (#66794)

 src/authentic2/manager/forms.py      | 16 ++++++++++++++++
 src/authentic2/manager/role_views.py |  8 +-------
 tests/test_manager.py                | 15 ++++++++++++---
 3 files changed, 29 insertions(+), 10 deletions(-)
src/authentic2/manager/forms.py
609 609
        }
610 610

  
611 611

  
612
class RoleAddForm(HideOUFieldMixin, LimitQuerysetFormMixin, SlugMixin, forms.ModelForm):
613
    ou = forms.ModelChoiceField(
614
        queryset=OrganizationalUnit.objects, required=True, label=_('Organizational unit')
615
    )
616

  
617
    class Meta:
618
        model = Role
619
        fields = (
620
            'name',
621
            'ou',
622
        )
623
        widgets = {
624
            'name': forms.TextInput(),
625
        }
626

  
627

  
612 628
class OUEditForm(SlugMixin, CssClass, forms.ModelForm):
613 629
    def __init__(self, *args, **kwargs):
614 630
        super().__init__(*args, **kwargs)
src/authentic2/manager/role_views.py
37 37
from authentic2.a2_rbac.models import OrganizationalUnit, Permission, Role, RoleParenting
38 38
from authentic2.a2_rbac.utils import get_default_ou
39 39
from authentic2.apps.journal.views import JournalViewWithContext
40
from authentic2.forms.profile import modelform_factory
41 40
from authentic2.utils import crypto
42 41
from authentic2.utils.misc import redirect
43 42

  
......
100 99
    model = Role
101 100
    title = _('Add role')
102 101
    success_view_name = 'a2-manager-role-members'
103
    exclude_fields = ('slug',)
102
    form_class = forms.RoleAddForm
104 103

  
105 104
    def get_initial(self):
106 105
        initial = super().get_initial()
......
108 107
        initial['ou'] = search_ou or get_default_ou()
109 108
        return initial
110 109

  
111
    def get_form_class(self):
112
        form = forms.get_role_form_class()
113
        fields = [x for x in form.base_fields.keys() if x not in self.exclude_fields]
114
        return modelform_factory(self.model, form=form, fields=fields)
115

  
116 110
    def form_valid(self, form):
117 111
        response = super().form_valid(form)
118 112
        hooks.call_hooks(
tests/test_manager.py
86 86
    ou_add = login(app, superuser_or_admin, reverse('a2-manager-role-add'))
87 87
    form = ou_add.form
88 88
    assert 'name' in form.fields
89
    assert 'description' in form.fields
90 89
    assert 'ou' not in form.fields
91
    assert 'slug' not in form.fields
90
    excluded_fields = (
91
        'slug',
92
        'description',
93
        'details',
94
        'service',
95
        'external_id',
96
        'admin_scope',
97
        'members',
98
        'permissions',
99
    )
100
    for field in excluded_fields:
101
        assert field not in form.fields
92 102
    form.set('name', 'New role')
93 103
    response = form.submit().follow()
94 104
    assert non_admin_roles.count() == 1
......
121 131
    ou_add = app.get(reverse('a2-manager-role-add'))
122 132
    form = ou_add.form
123 133
    assert 'name' in form.fields
124
    assert 'description' in form.fields
125 134
    assert 'ou' in form.fields
126 135
    options = [o[2] for o in form.fields['ou'][0].options]
127 136
    assert len(options) == 3
128
-