From 69ec66052f7a6365da40fcca37e2d3f3c41432fe Mon Sep 17 00:00:00 2001 From: Nicolas ROCHE Date: Tue, 22 Sep 2020 13:51:08 +0200 Subject: [PATCH] manager: allow role slug edition (#46656) --- src/authentic2/manager/forms.py | 2 +- src/authentic2/manager/role_views.py | 6 +++++- src/authentic2/manager/tables.py | 2 +- tests/test_manager.py | 13 +++++++++++++ 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/authentic2/manager/forms.py b/src/authentic2/manager/forms.py index 18f3e2127..b871773c6 100644 --- a/src/authentic2/manager/forms.py +++ b/src/authentic2/manager/forms.py @@ -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): diff --git a/src/authentic2/manager/role_views.py b/src/authentic2/manager/role_views.py index d7a54c5a6..fed5957d3 100644 --- a/src/authentic2/manager/role_views.py +++ b/src/authentic2/manager/role_views.py @@ -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) diff --git a/src/authentic2/manager/tables.py b/src/authentic2/manager/tables.py index 4800a3653..6ef7c18b1 100644 --- a/src/authentic2/manager/tables.py +++ b/src/authentic2/manager/tables.py @@ -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): diff --git a/tests/test_manager.py b/tests/test_manager.py index c7691e5d1..68c49ecc6 100644 --- a/tests/test_manager.py +++ b/tests/test_manager.py @@ -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