manager: allow role slug edition (#46656)

This commit is contained in:
Nicolas Roche 2020-09-22 13:51:08 +02:00
parent 233b289139
commit 69ec66052f
4 changed files with 20 additions and 3 deletions

View File

@ -615,7 +615,7 @@ class RoleEditForm(SlugMixin, HideOUFieldMixin, LimitQuerysetFormMixin, CssClass
class Meta:
model = get_role_model()
fields = ('name', 'ou', 'description')
fields = ('name', 'slug', 'ou', 'description')
class OUEditForm(SlugMixin, CssClass, forms.ModelForm):

View File

@ -30,6 +30,7 @@ from django.contrib.auth import get_user_model
from django_rbac.utils import get_role_model, get_permission_model, get_ou_model
from authentic2.forms.profile import modelform_factory
from authentic2.utils import redirect
from authentic2 import hooks, data_transfer
@ -86,9 +87,12 @@ class RoleAddView(views.BaseAddView):
model = get_role_model()
title = _('Add role')
success_view_name = 'a2-manager-role-members'
exclude_fields = ('slug',)
def get_form_class(self):
return forms.get_role_form_class()
form = forms.get_role_form_class()
fields = [x for x in form.base_fields.keys() if x not in self.exclude_fields]
return modelform_factory(self.model, form=form, fields=fields)
def form_valid(self, form):
response = super(RoleAddView, self).form_valid(form)

View File

@ -115,7 +115,7 @@ class RoleTable(tables.Table):
class Meta:
model = get_role_model()
attrs = {'class': 'main', 'id': 'role-table'}
fields = ('name', 'ou', 'member_count')
fields = ('name', 'slug', 'ou', 'member_count')
class PermissionTable(tables.Table):

View File

@ -86,6 +86,7 @@ def test_manager_create_role(superuser_or_admin, app):
assert 'name' in form.fields
assert 'description' in form.fields
assert 'ou' not in form.fields
assert 'slug' not in form.fields
form.set('name', 'New role')
response = form.submit().follow()
assert non_admin_roles.count() == 1
@ -117,6 +118,17 @@ def test_manager_create_role(superuser_or_admin, app):
assert 'New OU' in options
def test_manager_edit_role_slug(superuser_or_admin, app, simple_role):
assert Role.objects.get(name='simple role').slug == 'simple-role'
resp = login(app, superuser_or_admin,
reverse('a2-manager-role-edit', kwargs={'pk': simple_role.pk}))
form = resp.form
assert 'slug' in form.fields
form.set('slug', 'new-simple-role-slug')
form.submit().follow()
assert Role.objects.get(name='simple role').slug == 'new-simple-role-slug'
def test_manager_user_password_reset(app, superuser, simple_user):
resp = login(app, superuser,
reverse('a2-manager-user-detail', kwargs={'pk': simple_user.pk}))
@ -368,6 +380,7 @@ def test_manager_one_ou(app, superuser, admin, simple_role, settings):
# test role listing
response = app.get('/manage/roles/')
assert [x.text for x in response.pyquery('td.slug')] == ['simple-role']
assert 'search-ou' not in response.form.fields
q = response.pyquery.remove_namespaces()
assert len(q('table tbody tr')) == 1