0001-manager-allow-ou-slug-edition-46655.patch
src/authentic2/manager/forms.py | ||
---|---|---|
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: |
623 | 623 |
model = get_ou_model() |
624 | 624 |
fields = ( |
625 |
'name', 'default', 'username_is_unique', 'email_is_unique', 'validate_emails', |
|
625 |
'name', 'slug', 'default', 'username_is_unique', 'email_is_unique', 'validate_emails',
|
|
626 | 626 |
'show_username', 'user_can_reset_password', 'user_add_password_policy', |
627 | 627 |
'clean_unused_accounts_alert', 'clean_unused_accounts_deletion' |
628 | 628 |
) |
629 | 629 | |
630 | 630 | |
631 | 631 |
def get_role_form_class(): |
632 | 632 |
if app_settings.ROLE_FORM_CLASS: |
633 | 633 |
return import_module_or_class(app_settings.ROLE_FORM_CLASS) |
src/authentic2/manager/ou_views.py | ||
---|---|---|
42 | 42 |
listing = OrganizationalUnitView.as_view() |
43 | 43 | |
44 | 44 | |
45 | 45 |
class OrganizationalUnitAddView(views.BaseAddView): |
46 | 46 |
model = get_ou_model() |
47 | 47 |
permissions = ['a2_rbac.add_organizationalunit'] |
48 | 48 |
form_class = forms.OUEditForm |
49 | 49 |
title = _('Add organizational unit') |
50 |
exclude_fields = ('slug',) |
|
51 | ||
52 |
def get_fields(self): |
|
53 |
return [x for x in self.form_class.base_fields.keys() |
|
54 |
if x not in self.exclude_fields] |
|
50 | 55 | |
51 | 56 |
def get_success_url(self): |
52 | 57 |
return '..' |
53 | 58 | |
54 | 59 |
add = OrganizationalUnitAddView.as_view() |
55 | 60 | |
56 | 61 | |
57 | 62 |
class OrganizationalUnitDetailView(views.BaseDetailView): |
tests/test_manager.py | ||
---|---|---|
55 | 55 |
for section in sections: |
56 | 56 |
path = reverse('a2-manager-%s' % section) |
57 | 57 |
assert manager_home_page.pyquery.remove_namespaces()('.apps a[href=\'%s\']' % path) |
58 | 58 | |
59 | 59 | |
60 | 60 |
def test_manager_create_ou(superuser_or_admin, app): |
61 | 61 |
ou_add = login(app, superuser_or_admin, path=reverse('a2-manager-ou-add')) |
62 | 62 |
form = ou_add.form |
63 |
with pytest.raises(AssertionError): |
|
64 |
form.get('slug') |
|
63 | 65 |
form.set('name', 'New OU') |
64 | 66 |
response = form.submit().follow() |
65 | 67 |
assert 'New OU' in response |
66 | 68 |
assert OU.objects.count() == 2 |
67 | 69 |
assert OU.objects.get(name='New OU').slug == 'new-ou' |
68 | 70 | |
69 | 71 |
# Test slug collision |
70 | 72 |
OU.objects.filter(name='New OU').update(name='Old OU') |
... | ... | |
760 | 762 |
assert old_default_detail_page.pyquery('input[name="default"][checked="checked"]') |
761 | 763 |
# check ou homepage has changed too |
762 | 764 |
ou_homepage = old_default_detail_page.click('Organizational unit') |
763 | 765 |
assert set([e.text for e in ou_homepage.pyquery('td.name')]) == set(['Default organizational unit', 'ou2']) |
764 | 766 |
assert len(ou_homepage.pyquery('span.true')) == 1 |
765 | 767 |
assert len(ou_homepage.pyquery('tr[data-pk="%s"] td.default span.true' % ou2.pk)) == 0 |
766 | 768 |
assert len(ou_homepage.pyquery('tr[data-pk="%s"] td.default span.true' % old_default.pk)) == 1 |
767 | 769 | |
770 |
# edit ou slug |
|
771 |
assert OU.objects.get(name='ou2').slug == 'ou2' |
|
772 |
ou2_detail_page = app.get(reverse('a2-manager-ou-edit', kwargs={'pk': ou2.pk})) |
|
773 |
assert ou2_detail_page.html.find('label', {'for': 'id_slug'}) |
|
774 |
ou2_detail_page.form.set('slug', 'new-ou2-slug') |
|
775 |
ou_homepage = ou2_detail_page.form.submit().follow() |
|
776 |
assert OU.objects.get(name='ou2').slug == 'new-ou2-slug' |
|
777 | ||
768 | 778 | |
769 | 779 |
def test_return_on_logout(superuser, app): |
770 | 780 |
'''Verify we will return to /manage/ after logout/login cycle''' |
771 | 781 |
manager_home_page = login(app, superuser, reverse('a2-manager-homepage')) |
772 | 782 |
response = manager_home_page.click(href='logout').maybe_follow() |
773 | 783 |
assert response.request.query_string == 'next=/manage/' |
774 | 784 | |
775 | 785 | |
776 |
- |