mirror of
https://github.com/zulip/zulip.git
synced 2025-11-20 22:48:16 +00:00
user_group: List groups that a user is associated via subgroups.
In `Group settings` -> `Your groups` and `User Profile Popover` -> `User groups`, we only listed groups that a user was a direct member of. Now, we will also list groups that a user is not a direct member of, but associated via a subgroup. Fixes #32486.
This commit is contained in:
committed by
Tim Abbott
parent
c49c7a534f
commit
8a28b31be3
@@ -679,7 +679,7 @@ export function change_state(section, left_side_tab, right_side_tab) {
|
||||
|
||||
if (left_side_tab === undefined) {
|
||||
left_side_tab = "all-groups";
|
||||
if (user_groups.is_direct_member_of(current_user.user_id, group_id)) {
|
||||
if (user_groups.is_user_in_group(group_id, current_user.user_id)) {
|
||||
left_side_tab = "your-groups";
|
||||
}
|
||||
}
|
||||
@@ -889,10 +889,7 @@ export function setup_page(callback) {
|
||||
name: "user-groups-overlay",
|
||||
get_item: ListWidget.default_get_item,
|
||||
modifier_html(item) {
|
||||
item.is_member = user_groups.is_direct_member_of(
|
||||
people.my_current_user_id(),
|
||||
item.id,
|
||||
);
|
||||
item.is_member = user_groups.is_user_in_group(item.id, people.my_current_user_id());
|
||||
item.can_join = settings_data.can_join_user_group(item.id);
|
||||
item.can_leave = settings_data.can_leave_user_group(item.id);
|
||||
return render_browse_user_groups_list_item(item);
|
||||
|
||||
@@ -293,9 +293,7 @@ export function is_setting_group_empty(setting_group: GroupSettingValue): boolea
|
||||
|
||||
export function get_user_groups_of_user(user_id: number): UserGroup[] {
|
||||
const user_groups_realm = get_realm_user_groups();
|
||||
const groups_of_user = user_groups_realm.filter((group) =>
|
||||
is_direct_member_of(user_id, group.id),
|
||||
);
|
||||
const groups_of_user = user_groups_realm.filter((group) => is_user_in_group(group.id, user_id));
|
||||
return groups_of_user;
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,19 @@ const {set_realm} = zrequire("state_data");
|
||||
const realm = {};
|
||||
set_realm(realm);
|
||||
|
||||
const get_test_subgroup = (id) => ({
|
||||
name: `Subgroup id: ${id} `,
|
||||
id,
|
||||
members: new Set([4]),
|
||||
is_system_group: false,
|
||||
direct_subgroup_ids: new Set([]),
|
||||
can_join_group: 1,
|
||||
can_leave_group: 1,
|
||||
can_manage_group: 1,
|
||||
can_mention_group: 1,
|
||||
deactivated: false,
|
||||
});
|
||||
|
||||
run_test("user_groups", () => {
|
||||
const students = {
|
||||
description: "Students group",
|
||||
@@ -32,9 +45,15 @@ run_test("user_groups", () => {
|
||||
};
|
||||
|
||||
const params = {};
|
||||
params.realm_user_groups = [students];
|
||||
params.realm_user_groups = [
|
||||
students,
|
||||
get_test_subgroup(4),
|
||||
get_test_subgroup(5),
|
||||
get_test_subgroup(6),
|
||||
];
|
||||
const user_id_not_in_any_group = 0;
|
||||
const user_id_part_of_a_group = 2;
|
||||
const user_id_associated_via_subgroup = 4;
|
||||
|
||||
user_groups.initialize(params);
|
||||
assert.deepEqual(user_groups.get_user_group_from_id(students.id), students);
|
||||
@@ -122,12 +141,12 @@ run_test("user_groups", () => {
|
||||
user_groups.add(all);
|
||||
user_groups.add(deactivated_group);
|
||||
const user_groups_array = user_groups.get_realm_user_groups();
|
||||
assert.equal(user_groups_array.length, 2);
|
||||
assert.equal(user_groups_array.length, 5);
|
||||
assert.equal(user_groups_array[1].name, "Everyone");
|
||||
assert.equal(user_groups_array[0].name, "new admins");
|
||||
|
||||
const all_user_groups_array = user_groups.get_realm_user_groups(true);
|
||||
assert.equal(all_user_groups_array.length, 3);
|
||||
assert.equal(all_user_groups_array.length, 6);
|
||||
assert.equal(all_user_groups_array[2].name, "Deactivated test group");
|
||||
assert.equal(all_user_groups_array[1].name, "Everyone");
|
||||
assert.equal(all_user_groups_array[0].name, "new admins");
|
||||
@@ -136,6 +155,12 @@ run_test("user_groups", () => {
|
||||
assert.equal(groups_of_users.length, 1);
|
||||
assert.equal(groups_of_users[0].name, "Everyone");
|
||||
|
||||
const groups_of_users_via_subgroup = user_groups.get_user_groups_of_user(
|
||||
user_id_associated_via_subgroup,
|
||||
);
|
||||
assert.deepEqual(groups_of_users_via_subgroup.map((group) => group.id).sort(), [2, 4, 5, 6]);
|
||||
assert.equal(groups_of_users_via_subgroup.length, 4);
|
||||
|
||||
const groups_of_users_nomatch = user_groups.get_user_groups_of_user(user_id_not_in_any_group);
|
||||
assert.equal(groups_of_users_nomatch.length, 0);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user