From 3212dd03738e90a7b3bbc7ecb46317a0a8cc9c02 Mon Sep 17 00:00:00 2001 From: Dirk Mueller Date: Wed, 18 Dec 2013 11:28:37 +0100 Subject: [PATCH] User email is optional and can be absent cherry-picked from faf5b2aead067ab00a936249085f65886edcb483 cherry-picked from 19566878b24925bf423fe9588652ea59322af58d Change-Id: Idff0f7c33bcaee29c7d1e7be415eb6b5b29b5b1a Related-Bug: #1260423 --- .../dashboards/admin/users/forms.py | 3 +- .../dashboards/admin/users/tables.py | 2 +- .../dashboards/admin/users/tests.py | 36 +++++++++++++------ .../dashboards/admin/users/views.py | 2 +- 4 files changed, 29 insertions(+), 14 deletions(-) diff --git a/openstack_dashboard/dashboards/admin/users/forms.py b/openstack_dashboard/dashboards/admin/users/forms.py index 4749ce9bfa..d3d7c8c1c5 100644 --- a/openstack_dashboard/dashboards/admin/users/forms.py +++ b/openstack_dashboard/dashboards/admin/users/forms.py @@ -113,7 +113,8 @@ class CreateUserForm(BaseUserForm): class UpdateUserForm(BaseUserForm): id = forms.CharField(label=_("ID"), widget=forms.HiddenInput) name = forms.CharField(label=_("User Name")) - email = forms.EmailField(label=_("Email")) + email = forms.EmailField(label=_("Email"), + required=False) password = forms.RegexField(label=_("Password"), widget=forms.PasswordInput(render_value=False), regex=validators.password_validator(), diff --git a/openstack_dashboard/dashboards/admin/users/tables.py b/openstack_dashboard/dashboards/admin/users/tables.py index 4bafebf188..142053fca6 100644 --- a/openstack_dashboard/dashboards/admin/users/tables.py +++ b/openstack_dashboard/dashboards/admin/users/tables.py @@ -95,7 +95,7 @@ class UserFilterAction(tables.FilterAction): q = filter_string.lower() return [user for user in users if q in user.name.lower() - or q in user.email.lower()] + or q in getattr(user, 'email', '').lower()] class UsersTable(tables.DataTable): diff --git a/openstack_dashboard/dashboards/admin/users/tests.py b/openstack_dashboard/dashboards/admin/users/tests.py index 1586a8cf59..e95ef16530 100644 --- a/openstack_dashboard/dashboards/admin/users/tests.py +++ b/openstack_dashboard/dashboards/admin/users/tests.py @@ -166,22 +166,15 @@ class UsersViewTests(test.BaseAdminViewTests): res, "form", 'password', ['Password must be between 8 and 18 characters.']) - @test.create_stubs({api.keystone: ('user_get', - 'tenant_list', - 'user_update_tenant', - 'user_update_password', - 'user_update', - 'roles_for_user', )}) - def test_update(self): - user = self.users.get(id="1") - + def _update(self, user): + email = getattr(user, 'email', '') api.keystone.user_get(IsA(http.HttpRequest), '1', admin=True).AndReturn(user) api.keystone.tenant_list(IgnoreArg(), admin=True).AndReturn(self.tenants.list()) api.keystone.user_update(IsA(http.HttpRequest), user.id, - email=u'test@example.com', + email=email, name=u'test_user').AndReturn(None) api.keystone.user_update_tenant(IsA(http.HttpRequest), user.id, @@ -198,7 +191,7 @@ class UsersViewTests(test.BaseAdminViewTests): formData = {'method': 'UpdateUserForm', 'id': user.id, 'name': user.name, - 'email': user.email, + 'email': email, 'password': 'normalpwd', 'tenant_id': self.tenant.id, 'confirm_password': 'normalpwd'} @@ -208,6 +201,27 @@ class UsersViewTests(test.BaseAdminViewTests): self.assertNoFormErrors(res) self.assertMessageCount(warning=1) + @test.create_stubs({api.keystone: ('user_get', + 'tenant_list', + 'user_update_tenant', + 'user_update_password', + 'user_update', + 'roles_for_user', )}) + def test_update(self): + user = self.users.get(id="1") + self._update(user) + + @test.create_stubs({api.keystone: ('user_get', + 'tenant_list', + 'user_update_tenant', + 'user_update_password', + 'user_update', + 'roles_for_user', )}) + def test_update_with_no_email_attribute(self): + user = self.users.get(id="1") + del user.email + self._update(user) + @test.create_stubs({api.keystone: ('user_get', 'tenant_list', 'user_update_tenant', diff --git a/openstack_dashboard/dashboards/admin/users/views.py b/openstack_dashboard/dashboards/admin/users/views.py index 11562e797d..2bb7f7ee17 100644 --- a/openstack_dashboard/dashboards/admin/users/views.py +++ b/openstack_dashboard/dashboards/admin/users/views.py @@ -81,7 +81,7 @@ class UpdateView(forms.ModalFormView): return {'id': user.id, 'name': user.name, 'tenant_id': getattr(user, 'tenantId', None), - 'email': user.email} + 'email': getattr(user, 'email', None)} class CreateView(forms.ModalFormView):