mirror of
https://github.com/zulip/zulip.git
synced 2025-11-02 13:03:29 +00:00
user_groups: Add helper functions to get options for group-based setting.
This commit adds get_realm_user_groups_for_dropdown_list_widget function which returns the list of objects containing the display name and id of system user groups and adds tests for this function.
This commit is contained in:
@@ -242,3 +242,123 @@ run_test("is_user_in_group", () => {
|
||||
blueslip.expect("error", "Could not find subgroup with ID 9999");
|
||||
assert.equal(user_groups.is_user_in_group(admins.id, 6), false);
|
||||
});
|
||||
|
||||
run_test("get_realm_user_groups_for_dropdown_list_widget", () => {
|
||||
const owners = {
|
||||
name: "@role:owners",
|
||||
description: "foo",
|
||||
id: 1,
|
||||
members: new Set([1]),
|
||||
is_system_group: true,
|
||||
direct_subgroup_ids: new Set([]),
|
||||
};
|
||||
const admins = {
|
||||
name: "@role:administrators",
|
||||
description: "foo",
|
||||
id: 2,
|
||||
members: new Set([2]),
|
||||
is_system_group: true,
|
||||
direct_subgroup_ids: new Set([1]),
|
||||
};
|
||||
const moderators = {
|
||||
name: "@role:moderators",
|
||||
description: "foo",
|
||||
id: 3,
|
||||
members: new Set([3]),
|
||||
is_system_group: true,
|
||||
direct_subgroup_ids: new Set([2]),
|
||||
};
|
||||
const members = {
|
||||
name: "@role:members",
|
||||
description: "foo",
|
||||
id: 4,
|
||||
members: new Set([4]),
|
||||
is_system_group: true,
|
||||
direct_subgroup_ids: new Set([6]),
|
||||
};
|
||||
const everyone = {
|
||||
name: "@role:everyone",
|
||||
description: "foo",
|
||||
id: 5,
|
||||
members: new Set([]),
|
||||
is_system_group: true,
|
||||
direct_subgroup_ids: new Set([4]),
|
||||
};
|
||||
const full_members = {
|
||||
name: "@role:fullmembers",
|
||||
description: "foo",
|
||||
id: 6,
|
||||
members: new Set([5]),
|
||||
is_system_group: true,
|
||||
direct_subgroup_ids: new Set([3]),
|
||||
};
|
||||
const internet = {
|
||||
name: "@role:internet",
|
||||
id: 7,
|
||||
members: new Set([]),
|
||||
is_system_group: true,
|
||||
direct_subgroup_ids: new Set([5]),
|
||||
};
|
||||
|
||||
assert.throws(() => user_groups.get_realm_user_groups_for_dropdown_list_widget(false, false), {
|
||||
name: "Error",
|
||||
message: "Unknown group name: @role:internet",
|
||||
});
|
||||
|
||||
let expected_groups_list = [
|
||||
{name: "translated: Admins, moderators, members and guests", value: "5"},
|
||||
{name: "translated: Admins, moderators and members", value: "4"},
|
||||
{name: "translated: Admins, moderators and full members", value: "6"},
|
||||
{name: "translated: Admins and moderators", value: "3"},
|
||||
{name: "translated: Admins", value: "2"},
|
||||
{name: "translated: Owners", value: "1"},
|
||||
];
|
||||
|
||||
user_groups.initialize({
|
||||
realm_user_groups: [owners, admins, moderators, members, everyone, full_members, internet],
|
||||
});
|
||||
|
||||
assert.deepEqual(
|
||||
user_groups.get_realm_user_groups_for_dropdown_list_widget(true, false),
|
||||
expected_groups_list,
|
||||
);
|
||||
|
||||
expected_groups_list = [
|
||||
{name: "translated: Everyone on the internet", value: "7"},
|
||||
{name: "translated: Admins, moderators, members and guests", value: "5"},
|
||||
{name: "translated: Admins, moderators and members", value: "4"},
|
||||
{name: "translated: Admins, moderators and full members", value: "6"},
|
||||
{name: "translated: Admins and moderators", value: "3"},
|
||||
{name: "translated: Admins", value: "2"},
|
||||
];
|
||||
assert.deepEqual(
|
||||
user_groups.get_realm_user_groups_for_dropdown_list_widget(false, true),
|
||||
expected_groups_list,
|
||||
);
|
||||
|
||||
expected_groups_list = [
|
||||
{name: "translated: Admins, moderators, members and guests", value: "5"},
|
||||
{name: "translated: Admins, moderators and members", value: "4"},
|
||||
{name: "translated: Admins, moderators and full members", value: "6"},
|
||||
{name: "translated: Admins and moderators", value: "3"},
|
||||
{name: "translated: Admins", value: "2"},
|
||||
];
|
||||
assert.deepEqual(
|
||||
user_groups.get_realm_user_groups_for_dropdown_list_widget(true, true),
|
||||
expected_groups_list,
|
||||
);
|
||||
|
||||
expected_groups_list = [
|
||||
{name: "translated: Everyone on the internet", value: "7"},
|
||||
{name: "translated: Admins, moderators, members and guests", value: "5"},
|
||||
{name: "translated: Admins, moderators and members", value: "4"},
|
||||
{name: "translated: Admins, moderators and full members", value: "6"},
|
||||
{name: "translated: Admins and moderators", value: "3"},
|
||||
{name: "translated: Admins", value: "2"},
|
||||
{name: "translated: Owners", value: "1"},
|
||||
];
|
||||
assert.deepEqual(
|
||||
user_groups.get_realm_user_groups_for_dropdown_list_widget(false, false),
|
||||
expected_groups_list,
|
||||
);
|
||||
});
|
||||
|
||||
@@ -801,3 +801,34 @@ export const desktop_icon_count_display_values = {
|
||||
description: $t({defaultMessage: "None"}),
|
||||
},
|
||||
};
|
||||
|
||||
export const system_user_groups_list = [
|
||||
{
|
||||
name: "@role:internet",
|
||||
display_name: $t({defaultMessage: "Everyone on the internet"}),
|
||||
},
|
||||
{
|
||||
name: "@role:everyone",
|
||||
display_name: $t({defaultMessage: "Admins, moderators, members and guests"}),
|
||||
},
|
||||
{
|
||||
name: "@role:members",
|
||||
display_name: $t({defaultMessage: "Admins, moderators and members"}),
|
||||
},
|
||||
{
|
||||
name: "@role:fullmembers",
|
||||
display_name: $t({defaultMessage: "Admins, moderators and full members"}),
|
||||
},
|
||||
{
|
||||
name: "@role:moderators",
|
||||
display_name: $t({defaultMessage: "Admins and moderators"}),
|
||||
},
|
||||
{
|
||||
name: "@role:administrators",
|
||||
display_name: $t({defaultMessage: "Admins"}),
|
||||
},
|
||||
{
|
||||
name: "@role:owners",
|
||||
display_name: $t({defaultMessage: "Owners"}),
|
||||
},
|
||||
];
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import * as blueslip from "./blueslip";
|
||||
import {FoldDict} from "./fold_dict";
|
||||
import * as settings_config from "./settings_config";
|
||||
import type {User, UserGroupUpdateEvent} from "./types";
|
||||
|
||||
type UserGroup = {
|
||||
@@ -15,6 +16,11 @@ type UserGroup = {
|
||||
// to a Set in the initialize function.
|
||||
type UserGroupRaw = Omit<UserGroup, "members"> & {members: number[]};
|
||||
|
||||
type UserGroupForDropdownListWidget = {
|
||||
name: string;
|
||||
value: string;
|
||||
};
|
||||
|
||||
let user_group_name_dict: FoldDict<UserGroup>;
|
||||
let user_group_by_id_dict: Map<number, UserGroup>;
|
||||
|
||||
@@ -195,3 +201,31 @@ export function is_user_in_group(user_group_id: number, user_id: number): boolea
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
export function get_realm_user_groups_for_dropdown_list_widget(
|
||||
exclude_internet_group: boolean,
|
||||
exclude_owners_group: boolean,
|
||||
): UserGroupForDropdownListWidget[] {
|
||||
return settings_config.system_user_groups_list
|
||||
.filter((group) => {
|
||||
if (exclude_internet_group && group.name === "@role:internet") {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (exclude_owners_group && group.name === "@role:owners") {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
})
|
||||
.map((group) => {
|
||||
const user_group = get_user_group_from_name(group.name);
|
||||
if (!user_group) {
|
||||
throw new Error(`Unknown group name: ${group.name}`);
|
||||
}
|
||||
return {
|
||||
name: group.display_name,
|
||||
value: user_group.id.toString(),
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user