diff --git a/src/authentic2/manager/forms.py b/src/authentic2/manager/forms.py index 475e0607b..18f3e2127 100644 --- a/src/authentic2/manager/forms.py +++ b/src/authentic2/manager/forms.py @@ -626,7 +626,7 @@ class OUEditForm(SlugMixin, CssClass, forms.ModelForm): class Meta: model = get_ou_model() fields = ( - 'name', 'default', 'username_is_unique', 'email_is_unique', 'validate_emails', + 'name', 'slug', 'default', 'username_is_unique', 'email_is_unique', 'validate_emails', 'show_username', 'user_can_reset_password', 'user_add_password_policy', 'clean_unused_accounts_alert', 'clean_unused_accounts_deletion' ) diff --git a/src/authentic2/manager/ou_views.py b/src/authentic2/manager/ou_views.py index 8c319c2d8..7f3d78d30 100644 --- a/src/authentic2/manager/ou_views.py +++ b/src/authentic2/manager/ou_views.py @@ -47,6 +47,11 @@ class OrganizationalUnitAddView(views.BaseAddView): permissions = ['a2_rbac.add_organizationalunit'] form_class = forms.OUEditForm title = _('Add organizational unit') + exclude_fields = ('slug',) + + def get_fields(self): + return [x for x in self.form_class.base_fields.keys() + if x not in self.exclude_fields] def get_success_url(self): return '..' diff --git a/src/authentic2/manager/tables.py b/src/authentic2/manager/tables.py index 531001f01..74b07569d 100644 --- a/src/authentic2/manager/tables.py +++ b/src/authentic2/manager/tables.py @@ -137,7 +137,7 @@ class OUTable(tables.Table): class Meta: model = get_ou_model() attrs = {'class': 'main', 'id': 'ou-table'} - fields = ('name', 'default') + fields = ('name', 'slug', 'default') empty_text = _('None') diff --git a/tests/test_manager.py b/tests/test_manager.py index 317c434d8..c7691e5d1 100644 --- a/tests/test_manager.py +++ b/tests/test_manager.py @@ -60,6 +60,8 @@ def test_manager_login(superuser_or_admin, app): def test_manager_create_ou(superuser_or_admin, app): ou_add = login(app, superuser_or_admin, path=reverse('a2-manager-ou-add')) form = ou_add.form + assert 'name' in form.fields + assert 'slug' not in form.fields form.set('name', 'New OU') response = form.submit().follow() assert 'New OU' in response @@ -728,6 +730,7 @@ def test_manager_ou(app, superuser_or_admin, ou1): manager_home_page = login(app, superuser_or_admin, reverse('a2-manager-homepage')) ou_homepage = manager_home_page.click(href='organizational-units') assert set([e.text for e in ou_homepage.pyquery('td.name')]) == set(['OU1', 'Default organizational unit']) + assert [x.text for x in ou_homepage.pyquery('td.slug')] == ['default', 'ou1'] # add a new ou add_ou_page = ou_homepage.click('Add') @@ -766,6 +769,15 @@ def test_manager_ou(app, superuser_or_admin, ou1): assert len(ou_homepage.pyquery('tr[data-pk="%s"] td.default span.true' % ou2.pk)) == 0 assert len(ou_homepage.pyquery('tr[data-pk="%s"] td.default span.true' % old_default.pk)) == 1 + # edit ou slug + assert OU.objects.get(name='ou2').slug == 'ou2' + ou2_detail_page = app.get(reverse('a2-manager-ou-edit', kwargs={'pk': ou2.pk})) + form = ou2_detail_page.form + assert 'slug' in form.fields + form.set('slug', 'new-ou2-slug') + form.submit().follow() + assert OU.objects.get(name='ou2').slug == 'new-ou2-slug' + def test_return_on_logout(superuser, app): '''Verify we will return to /manage/ after logout/login cycle'''