Projet

Général

Profil

0001-manager-allow-role-slug-edition-46656.patch

Nicolas Roche, 22 septembre 2020 15:56

Télécharger (5,14 ko)

Voir les différences:

Subject: [PATCH] manager: allow role slug edition (#46656)

 src/authentic2/manager/forms.py      |  2 +-
 src/authentic2/manager/role_views.py |  6 +++++-
 tests/test_manager.py                | 12 ++++++++++++
 3 files changed, 18 insertions(+), 2 deletions(-)
src/authentic2/manager/forms.py
606 606

  
607 607
class RoleEditForm(SlugMixin, HideOUFieldMixin, LimitQuerysetFormMixin, CssClass,
608 608
                   forms.ModelForm):
609 609
    ou = forms.ModelChoiceField(queryset=get_ou_model().objects,
610 610
                                required=True, label=_('Organizational unit'))
611 611

  
612 612
    class Meta:
613 613
        model = get_role_model()
614
        fields = ('name', 'ou', 'description')
614
        fields = ('name', 'slug', 'ou', 'description')
615 615

  
616 616

  
617 617
class OUEditForm(SlugMixin, CssClass, forms.ModelForm):
618 618
    def __init__(self, *args, **kwargs):
619 619
        super(OUEditForm, self).__init__(*args, **kwargs)
620 620
        self.fields['name'].label = _('label').title()
621 621

  
622 622
    class Meta:
src/authentic2/manager/role_views.py
25 25
from django.contrib.contenttypes.models import ContentType
26 26
from django.db import transaction
27 27
from django.db.models.query import Q, Prefetch
28 28
from django.db.models import Count, F
29 29
from django.contrib.auth import get_user_model
30 30

  
31 31
from django_rbac.utils import get_role_model, get_permission_model, get_ou_model
32 32

  
33
from authentic2.forms.profile import modelform_factory
33 34
from authentic2.utils import redirect
34 35
from authentic2 import hooks, data_transfer
35 36

  
36 37
from . import tables, views, resources, forms, app_settings
37 38
from .utils import has_show_username
38 39

  
39 40

  
40 41
class RolesMixin(object):
......
81 82
listing = RolesView.as_view()
82 83

  
83 84

  
84 85
class RoleAddView(views.BaseAddView):
85 86
    template_name = 'authentic2/manager/role_add.html'
86 87
    model = get_role_model()
87 88
    title = _('Add role')
88 89
    success_view_name = 'a2-manager-role-members'
90
    exclude_fields = ('slug',)
89 91

  
90 92
    def get_form_class(self):
91
        return forms.get_role_form_class()
93
        form = forms.get_role_form_class()
94
        fields = [x for x in form.base_fields.keys() if x not in self.exclude_fields]
95
        return modelform_factory(self.model, form=form, fields=fields)
92 96

  
93 97
    def form_valid(self, form):
94 98
        response = super(RoleAddView, self).form_valid(form)
95 99
        hooks.call_hooks('event', name='manager-add-role', user=self.request.user,
96 100
                         instance=form.instance, form=form)
97 101
        return response
98 102

  
99 103

  
tests/test_manager.py
79 79
def test_manager_create_role(superuser_or_admin, app):
80 80
    non_admin_roles = Role.objects.exclude(slug__startswith='_')
81 81

  
82 82
    ou_add = login(app, superuser_or_admin, reverse('a2-manager-role-add'))
83 83
    form = ou_add.form
84 84
    assert 'name' in form.fields
85 85
    assert 'description' in form.fields
86 86
    assert 'ou' not in form.fields
87
    assert 'slug' not in form.fields
87 88
    form.set('name', 'New role')
88 89
    response = form.submit().follow()
89 90
    assert non_admin_roles.count() == 1
90 91
    role = non_admin_roles.get()
91 92
    assert response.request.path == reverse('a2-manager-role-members', kwargs={'pk': role.pk})
92 93
    role_list = app.get(reverse('a2-manager-roles'))
93 94
    assert 'New role' in role_list
94 95

  
......
110 111
    assert 'description' in form.fields
111 112
    assert 'ou' in form.fields
112 113
    options = [o[2] for o in form.fields['ou'][0].options]
113 114
    assert len(options) == 3
114 115
    assert '---------' in options
115 116
    assert 'New OU' in options
116 117

  
117 118

  
119
def test_manager_edit_role_slug(superuser_or_admin, app, simple_role):
120
    assert Role.objects.get(name='simple role').slug == 'simple-role'
121
    resp = login(app, superuser_or_admin,
122
                 reverse('a2-manager-role-edit', kwargs={'pk': simple_role.pk}))
123
    form = resp.form
124
    assert 'slug' in form.fields
125
    form.set('slug', 'new-simple-role-slug')
126
    form.submit().follow()
127
    assert Role.objects.get(name='simple role').slug == 'new-simple-role-slug'
128

  
129

  
118 130
def test_manager_user_password_reset(app, superuser, simple_user):
119 131
    resp = login(app, superuser,
120 132
                 reverse('a2-manager-user-detail', kwargs={'pk': simple_user.pk}))
121 133
    assert len(mail.outbox) == 0
122 134
    resp = resp.forms['object-actions'].submit('password_reset')
123 135
    assert 'A mail was sent to' in resp
124 136
    assert len(mail.outbox) == 1
125 137
    url = get_link_from_mail(mail.outbox[0])
126
-