api: Add an endpoint for listing the user groups in realm.

Adds endpoint for listing the user groups in realm.
Provides "description", "members", "name" and "id" for each user group.

Fixes #10298
This commit is contained in:
Roman Godov
2018-08-16 03:44:51 +03:00
committed by Tim Abbott
parent 1efcdfdb5c
commit a2f407c11b
3 changed files with 18 additions and 1 deletions

View File

@@ -117,6 +117,14 @@ class UserGroupAPITestCase(ZulipTestCase):
self.assert_json_error(result, "User group 'support' already exists.") self.assert_json_error(result, "User group 'support' already exists.")
self.assert_length(UserGroup.objects.all(), 2) self.assert_length(UserGroup.objects.all(), 2)
def test_user_group_get(self) -> None:
# Test success
user_profile = self.example_user('hamlet')
self.login(user_profile.email)
result = self.client_get('/json/user_groups')
self.assert_json_success(result)
self.assert_length(result.json()['user_groups'], UserGroup.objects.filter(realm=user_profile.realm).count())
def test_user_group_create_by_guest_user(self) -> None: def test_user_group_create_by_guest_user(self) -> None:
guest_user = self.example_user('polonius') guest_user = self.example_user('polonius')

View File

@@ -14,7 +14,8 @@ from zerver.lib.response import json_success, json_error
from zerver.lib.users import user_ids_to_users from zerver.lib.users import user_ids_to_users
from zerver.lib.validator import check_list, check_string, check_int, \ from zerver.lib.validator import check_list, check_string, check_int, \
check_short_string check_short_string
from zerver.lib.user_groups import access_user_group_by_id, get_memberships_of_users, get_user_group_members from zerver.lib.user_groups import access_user_group_by_id, get_memberships_of_users, \
get_user_group_members, user_groups_in_realm_serialized
from zerver.models import UserProfile, UserGroup, UserGroupMembership from zerver.models import UserProfile, UserGroup, UserGroupMembership
from zerver.views.streams import compose_views, FuncKwargPair from zerver.views.streams import compose_views, FuncKwargPair
@@ -28,6 +29,12 @@ def add_user_group(request: HttpRequest, user_profile: UserProfile,
check_add_user_group(user_profile.realm, name, user_profiles, description) check_add_user_group(user_profile.realm, name, user_profiles, description)
return json_success() return json_success()
@require_non_guest_human_user
@has_request_variables
def get_user_group(request: HttpRequest, user_profile: UserProfile) -> HttpResponse:
user_groups = user_groups_in_realm_serialized(user_profile.realm)
return json_success({"user_groups": user_groups})
@require_non_guest_human_user @require_non_guest_human_user
@has_request_variables @has_request_variables
def edit_user_group(request: HttpRequest, user_profile: UserProfile, def edit_user_group(request: HttpRequest, user_profile: UserProfile,

View File

@@ -251,6 +251,8 @@ v1_api_and_json_patterns = [
'DELETE': 'zerver.views.push_notifications.remove_android_reg_id'}), 'DELETE': 'zerver.views.push_notifications.remove_android_reg_id'}),
# user_groups -> zerver.views.user_groups # user_groups -> zerver.views.user_groups
url(r'^user_groups$', rest_dispatch,
{'GET': 'zerver.views.user_groups.get_user_group'}),
url(r'^user_groups/create$', rest_dispatch, url(r'^user_groups/create$', rest_dispatch,
{'POST': 'zerver.views.user_groups.add_user_group'}), {'POST': 'zerver.views.user_groups.add_user_group'}),
url(r'^user_groups/(?P<user_group_id>\d+)$', rest_dispatch, url(r'^user_groups/(?P<user_group_id>\d+)$', rest_dispatch,