user_groups: Add functions to update subgroups data on receiving events.

This commit is contained in:
Sahil Batra
2022-05-02 20:11:51 +05:30
committed by Tim Abbott
parent e2b9d6ebeb
commit a5b3510cb3
5 changed files with 78 additions and 1 deletions

View File

@@ -178,6 +178,17 @@ run_test("user groups", ({override}) => {
assert_same(args.user_ids, event.user_ids);
}
event = event_fixtures.user_group__add_subgroups;
{
const stub = make_stub();
override(user_groups, "add_subgroups", stub.f);
dispatch(event);
assert.equal(stub.num_calls, 1);
const args = stub.get_args("group_id", "subgroup_ids");
assert_same(args.group_id, event.group_id);
assert_same(args.subgroup_ids, event.subgroup_ids);
}
event = event_fixtures.user_group__remove_members;
{
const stub = make_stub();
@@ -189,6 +200,17 @@ run_test("user groups", ({override}) => {
assert_same(args.user_ids, event.user_ids);
}
event = event_fixtures.user_group__remove_subgroups;
{
const stub = make_stub();
override(user_groups, "remove_subgroups", stub.f);
dispatch(event);
assert.equal(stub.num_calls, 1);
const args = stub.get_args("group_id", "subgroup_ids");
assert_same(args.group_id, event.group_id);
assert_same(args.subgroup_ids, event.subgroup_ids);
}
event = event_fixtures.user_group__update;
{
const stub = make_stub();

View File

@@ -746,6 +746,13 @@ exports.fixtures = {
user_ids: [2],
},
user_group__add_subgroups: {
type: "user_group",
op: "add_subgroups",
group_id: 1,
subgroup_ids: [3],
},
user_group__remove: {
type: "user_group",
op: "remove",
@@ -759,6 +766,13 @@ exports.fixtures = {
user_ids: [99, 100],
},
user_group__remove_subgroups: {
type: "user_group",
op: "remove_subgroups",
group_id: 1,
subgroup_ids: [3],
},
user_group__update: {
type: "user_group",
op: "update",

View File

@@ -99,6 +99,15 @@ run_test("user_groups", () => {
user_groups.remove_members(all.id, [1, 4]);
assert.deepEqual(user_groups.get_user_group_from_id(all.id).members, new Set([2, 3, 5]));
user_groups.add_subgroups(all.id, [2, 3]);
assert.deepEqual(
user_groups.get_user_group_from_id(all.id).subgroups,
new Set([2, 3, 5, 4, 6]),
);
user_groups.remove_subgroups(all.id, [2, 4]);
assert.deepEqual(user_groups.get_user_group_from_id(all.id).subgroups, new Set([3, 5, 6]));
assert.ok(user_groups.is_user_group(admins));
const object = {
name: "core",
@@ -112,7 +121,9 @@ run_test("user_groups", () => {
blueslip.expect("error", "Could not find user group with ID -1");
assert.equal(user_groups.is_member_of(-1, 15), false);
blueslip.expect("error", "Could not find user group with ID -9999", 2);
blueslip.expect("error", "Could not find user group with ID -9999", 4);
user_groups.add_members(-9999);
user_groups.remove_members(-9999);
user_groups.add_subgroups(-9999);
user_groups.remove_subgroups(-9999);
});

View File

@@ -754,6 +754,12 @@ export function dispatch_normal_event(event) {
case "remove_members":
user_groups.remove_members(event.group_id, event.user_ids);
break;
case "add_subgroups":
user_groups.add_subgroups(event.group_id, event.subgroup_ids);
break;
case "remove_subgroups":
user_groups.remove_subgroups(event.group_id, event.subgroup_ids);
break;
case "update":
user_groups.update(event);
break;

View File

@@ -112,6 +112,30 @@ export function remove_members(user_group_id: number, user_ids: number[]): void
}
}
export function add_subgroups(user_group_id: number, subgroup_ids: number[]): void {
const user_group = user_group_by_id_dict.get(user_group_id);
if (user_group === undefined) {
blueslip.error(`Could not find user group with ID ${user_group_id}`);
return;
}
for (const subgroup_id of subgroup_ids) {
user_group.subgroups.add(subgroup_id);
}
}
export function remove_subgroups(user_group_id: number, subgroup_ids: number[]): void {
const user_group = user_group_by_id_dict.get(user_group_id);
if (user_group === undefined) {
blueslip.error(`Could not find user group with ID ${user_group_id}`);
return;
}
for (const subgroup_id of subgroup_ids) {
user_group.subgroups.delete(subgroup_id);
}
}
export function initialize(params: {realm_user_groups: UserGroupRaw[]}): void {
for (const user_group of params.realm_user_groups) {
add(user_group);