From 756a4cad3dfa7e403677f3e537557f2bb95bb0a8 Mon Sep 17 00:00:00 2001 From: Valentin Deniaud Date: Tue, 8 Sep 2020 14:11:48 +0200 Subject: [PATCH] manager: fix import roles crash when single ou (#46448) --- src/authentic2/manager/forms.py | 7 ++++++- tests/test_role_manager.py | 22 ++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/authentic2/manager/forms.py b/src/authentic2/manager/forms.py index eeca421e..3e5dbd25 100644 --- a/src/authentic2/manager/forms.py +++ b/src/authentic2/manager/forms.py @@ -675,9 +675,14 @@ class OusImportForm(SiteImportForm): file_field_label = _('Organizational Units Export File') -class RolesImportForm(HideOUFieldMixin, LimitQuerysetFormMixin, SiteImportForm): +class RolesImportForm(LimitQuerysetFormMixin, SiteImportForm): file_field_label = _('Roles Export File') + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + if utils.get_ou_count() < 2: + self.fields['ou'].widget = forms.HiddenInput() + ou = forms.ModelChoiceField( label=_('Organizational unit'), queryset=get_ou_model().objects, diff --git a/tests/test_role_manager.py b/tests/test_role_manager.py index 5283e34f..b71435de 100644 --- a/tests/test_role_manager.py +++ b/tests/test_role_manager.py @@ -166,3 +166,25 @@ def test_manager_role_import(app, admin, ou1, role_ou1, ou2, role_ou2): resp = resp.form.submit().follow() assert not OrganizationalUnit.objects.filter(slug="should_not_exist").exists() + + +def test_manager_role_import_single_ou(app, admin, simple_role): + assert OrganizationalUnit.objects.count() == 1 + response = login(app, admin, 'a2-manager-roles') + + export_response = response.click('Export') + export = export_response.json + + assert len(export['roles']) == 1 + simple_role.delete() + + resp = app.get('/manage/roles/') + resp = resp.click('Import') + assert not 'Organizational unit' in resp.text + assert resp.form['ou'].attrs['type'] == 'hidden' + + resp.form['site_json'] = Upload('export.json', json.dumps(export).encode(), 'application/json') + resp = resp.form.submit().follow() + + imported_role = Role.objects.get(slug=simple_role.slug) + assert imported_role.ou == simple_role.ou -- 2.20.1