Projet

Général

Profil

0001-manager-allow-ou-slug-edition-46655.patch

Nicolas Roche, 22 septembre 2020 14:20

Télécharger (4,53 ko)

Voir les différences:

Subject: [PATCH] manager: allow ou slug edition (#46655)

 src/authentic2/manager/forms.py    |  2 +-
 src/authentic2/manager/ou_views.py |  5 +++++
 tests/test_manager.py              | 10 ++++++++++
 3 files changed, 16 insertions(+), 1 deletion(-)
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
-