org settings: Fix error when admin update realm users full names.

Currently, if there is only one admin in realm and admin tries
to updates any non-adminuser's full name it throws error,
"Cannot remove only realm admin". Because in `/json/users/<user_id>`
api check_if_last_admin_is_changed is checked even if property
is_admin is not changed.

This commit fix this issue and add tests for it.
This commit is contained in:
Yashashvi Dave 2018-10-17 18:34:58 +05:30 committed by Tim Abbott
parent 97ed71ca69
commit 41fbb16cdf
2 changed files with 4 additions and 1 deletions

View File

@ -173,6 +173,9 @@ class PermissionTest(ZulipTestCase):
self.assert_json_success(result) self.assert_json_success(result)
hamlet = self.example_user('hamlet') hamlet = self.example_user('hamlet')
self.assertEqual(hamlet.full_name, new_name) self.assertEqual(hamlet.full_name, new_name)
req['is_admin'] = ujson.dumps(False)
result = self.client_patch('/json/users/{}'.format(hamlet.id), req)
self.assert_json_success(result)
def test_non_admin_cannot_change_full_name(self) -> None: def test_non_admin_cannot_change_full_name(self) -> None:
self.login(self.example_email("hamlet")) self.login(self.example_email("hamlet"))

View File

@ -81,7 +81,7 @@ def update_user_backend(request: HttpRequest, user_profile: UserProfile, user_id
is_admin: Optional[bool]=REQ(default=None, validator=check_bool)) -> HttpResponse: is_admin: Optional[bool]=REQ(default=None, validator=check_bool)) -> HttpResponse:
target = access_user_by_id(user_profile, user_id, allow_deactivated=True, allow_bots=True) target = access_user_by_id(user_profile, user_id, allow_deactivated=True, allow_bots=True)
if is_admin is not None: if is_admin is not None and target.is_realm_admin != is_admin:
if not is_admin and check_last_admin(user_profile): if not is_admin and check_last_admin(user_profile):
return json_error(_('Cannot remove the only organization administrator')) return json_error(_('Cannot remove the only organization administrator'))
do_change_is_admin(target, is_admin) do_change_is_admin(target, is_admin)