mirror of
https://github.com/zulip/zulip.git
synced 2025-11-04 22:13:26 +00:00
user-groups: Add groups to page_params.
This commit is contained in:
@@ -35,6 +35,7 @@ from zerver.lib.actions import (
|
||||
get_status_dict, streams_to_dicts_sorted
|
||||
)
|
||||
from zerver.lib.upload import get_total_uploads_size_for_user
|
||||
from zerver.lib.user_groups import user_groups_in_realm_serialized
|
||||
from zerver.tornado.event_queue import request_event_queue, get_user_events
|
||||
from zerver.models import Client, Message, Realm, UserPresence, UserProfile, \
|
||||
get_user_profile_by_id, \
|
||||
@@ -177,6 +178,9 @@ def fetch_initial_state_data(user_profile, event_types, queue_id, client_gravata
|
||||
if want('realm_filters'):
|
||||
state['realm_filters'] = realm_filters_for_realm(user_profile.realm_id)
|
||||
|
||||
if want('realm_user_groups'):
|
||||
state['realm_user_groups'] = user_groups_in_realm_serialized(user_profile.realm)
|
||||
|
||||
if want('realm_user'):
|
||||
state['raw_users'] = get_raw_user_data(
|
||||
realm_id=user_profile.realm_id,
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
from __future__ import absolute_import
|
||||
|
||||
from collections import defaultdict
|
||||
from django.db import transaction
|
||||
from django.utils.translation import ugettext as _
|
||||
from zerver.lib.exceptions import JsonableError
|
||||
from zerver.models import UserProfile, Realm, UserGroupMembership, UserGroup
|
||||
from typing import Dict, Iterable, List, Text
|
||||
from typing import Dict, Iterable, List, Text, Tuple, Any
|
||||
|
||||
def access_user_group_by_id(user_group_id: int, realm: Realm) -> UserGroup:
|
||||
try:
|
||||
@@ -18,6 +19,28 @@ def user_groups_in_realm(realm):
|
||||
user_groups = UserGroup.objects.filter(realm=realm)
|
||||
return list(user_groups)
|
||||
|
||||
def user_groups_in_realm_serialized(realm):
|
||||
# type: (Realm) -> List[Dict[Text, Any]]
|
||||
"""
|
||||
This function is used in do_events_register code path so this code should
|
||||
be performant. This is the reason why we get the groups through
|
||||
UserGroupMembership table. It gives us the groups and members in one query.
|
||||
"""
|
||||
memberships = UserGroupMembership.objects.filter(user_group__realm=realm)
|
||||
memberships = memberships.select_related('user_group')
|
||||
groups = defaultdict(list) # type: Dict[Tuple[int, Text, Text], List[int]]
|
||||
for membership in memberships:
|
||||
group = (membership.user_group.id,
|
||||
membership.user_group.name,
|
||||
membership.user_group.description)
|
||||
groups[group].append(membership.user_profile_id)
|
||||
|
||||
return [dict(id=group[0],
|
||||
name=group[1],
|
||||
description=group[2],
|
||||
members=sorted(members))
|
||||
for group, members in groups.items()]
|
||||
|
||||
def get_user_groups(user_profile):
|
||||
# type: (UserProfile) -> List[UserGroup]
|
||||
return list(user_profile.usergroup_set.all())
|
||||
|
||||
@@ -2351,7 +2351,7 @@ class FetchQueriesTest(ZulipTestCase):
|
||||
client_gravatar=False,
|
||||
)
|
||||
|
||||
self.assert_length(queries, 28)
|
||||
self.assert_length(queries, 29)
|
||||
|
||||
expected_counts = dict(
|
||||
alert_words=0,
|
||||
@@ -2370,6 +2370,7 @@ class FetchQueriesTest(ZulipTestCase):
|
||||
realm_emoji=1,
|
||||
realm_filters=1,
|
||||
realm_user=4,
|
||||
realm_user_groups=1,
|
||||
stream=2,
|
||||
subscription=5,
|
||||
total_uploads_size=1,
|
||||
|
||||
@@ -138,6 +138,7 @@ class HomeTest(ZulipTestCase):
|
||||
"realm_restricted_to_domain",
|
||||
"realm_show_digest_email",
|
||||
"realm_uri",
|
||||
"realm_user_groups",
|
||||
"realm_users",
|
||||
"realm_waiting_period_threshold",
|
||||
"root_domain_uri",
|
||||
@@ -179,7 +180,7 @@ class HomeTest(ZulipTestCase):
|
||||
with patch('zerver.lib.cache.cache_set') as cache_mock:
|
||||
result = self._get_home_page(stream='Denmark')
|
||||
|
||||
self.assert_length(queries, 40)
|
||||
self.assert_length(queries, 41)
|
||||
self.assert_length(cache_mock.call_args_list, 10)
|
||||
|
||||
html = result.content.decode('utf-8')
|
||||
@@ -244,7 +245,7 @@ class HomeTest(ZulipTestCase):
|
||||
with queries_captured() as queries2:
|
||||
result = self._get_home_page()
|
||||
|
||||
self.assert_length(queries2, 34)
|
||||
self.assert_length(queries2, 35)
|
||||
|
||||
# Do a sanity check that our new streams were in the payload.
|
||||
html = result.content.decode('utf-8')
|
||||
|
||||
@@ -13,6 +13,7 @@ from zerver.lib.user_groups import (
|
||||
get_user_groups,
|
||||
user_groups_in_realm,
|
||||
get_memberships_of_users,
|
||||
user_groups_in_realm_serialized,
|
||||
)
|
||||
from zerver.models import UserProfile, UserGroup, get_realm, Realm, \
|
||||
UserGroupMembership
|
||||
@@ -33,6 +34,19 @@ class UserGroupTestCase(ZulipTestCase):
|
||||
self.assertEqual(len(user_groups), 1)
|
||||
self.assertEqual(user_groups[0].name, 'support')
|
||||
|
||||
def test_user_groups_in_realm_serialized(self):
|
||||
# type: () -> None
|
||||
realm = get_realm('zulip')
|
||||
user_group = self.create_user_group_for_test('support')
|
||||
hamlet = self.example_user('hamlet')
|
||||
check_add_user_to_user_group(hamlet, user_group)
|
||||
members = user_groups_in_realm_serialized(realm)
|
||||
self.assertEqual(len(members), 1)
|
||||
self.assertEqual(members[0]['id'], user_group.id)
|
||||
self.assertEqual(members[0]['name'], user_group.name)
|
||||
self.assertEqual(members[0]['description'], '')
|
||||
self.assertEqual(members[0]['members'], [4, 6])
|
||||
|
||||
def test_get_user_groups(self):
|
||||
# type: () -> None
|
||||
othello = self.example_user('othello')
|
||||
|
||||
Reference in New Issue
Block a user