stream_events: Loop over stream group settings for update_property.

This commit is contained in:
Shubham Padia 2024-12-04 09:04:43 +00:00 committed by Tim Abbott
parent a5a56be15b
commit 173c09e32b
4 changed files with 66 additions and 54 deletions

View File

@ -20,6 +20,7 @@ import * as peer_data from "./peer_data.ts";
import * as people from "./people.ts";
import * as recent_view_ui from "./recent_view_ui.ts";
import * as settings_notifications from "./settings_notifications.ts";
import {realm} from "./state_data.ts";
import * as stream_color_events from "./stream_color_events.ts";
import * as stream_create from "./stream_create.ts";
import * as stream_data from "./stream_data.ts";
@ -27,8 +28,10 @@ import * as stream_list from "./stream_list.ts";
import * as stream_muting from "./stream_muting.ts";
import * as stream_settings_api from "./stream_settings_api.ts";
import * as stream_settings_ui from "./stream_settings_ui.ts";
import {stream_permission_group_settings_schema} from "./stream_types.ts";
import * as sub_store from "./sub_store.ts";
import type {StreamSubscription} from "./sub_store.ts";
import {group_setting_value_schema} from "./types.ts";
import * as unread_ui from "./unread_ui.ts";
import * as user_profile from "./user_profile.ts";
@ -81,6 +84,15 @@ export function update_property<P extends keyof UpdatableStreamProperties>(
return;
}
if (Object.keys(realm.server_supported_permission_settings.stream).includes(property)) {
stream_settings_ui.update_stream_permission_group_setting(
stream_permission_group_settings_schema.parse(property),
sub,
group_setting_value_schema.parse(value),
);
return;
}
const update_stream_specific_notification_setting =
(property: keyof sub_store.StreamSpecificNotificationSettings) =>
(value: boolean | null) => {
@ -145,24 +157,10 @@ export function update_property<P extends keyof UpdatableStreamProperties>(
message_retention_days(value) {
stream_settings_ui.update_message_retention_setting(sub, value);
},
can_remove_subscribers_group(value) {
stream_settings_ui.update_stream_permission_group_setting(
"can_remove_subscribers_group",
sub,
value,
);
},
is_recently_active(value) {
update_stream_setting(sub, value, "is_recently_active");
stream_list.update_streams_sidebar();
},
can_administer_channel_group(value) {
stream_settings_ui.update_stream_permission_group_setting(
"can_administer_channel_group",
sub,
value,
);
},
};
if (Object.hasOwn(updaters, property) && updaters[property] !== undefined) {

View File

@ -0,0 +1,40 @@
"use strict";
exports.server_supported_permission_settings = {
stream: {
can_administer_channel_group: {
require_system_group: true,
allow_internet_group: false,
allow_nobody_group: true,
allow_everyone_group: false,
default_group_name: "stream_creator_or_nobody",
allowed_system_groups: [],
},
can_remove_subscribers_group: {
require_system_group: true,
allow_internet_group: false,
allow_nobody_group: false,
allow_everyone_group: true,
default_group_name: "role:administrators",
allowed_system_groups: [],
},
},
realm: {
create_multiuse_invite_group: {
require_system_group: true,
allow_internet_group: false,
allow_nobody_group: true,
allow_everyone_group: false,
default_group_name: "role:administrators",
allowed_system_groups: [],
},
can_access_all_users_group: {
require_system_group: true,
allow_internet_group: false,
allow_nobody_group: false,
allow_everyone_group: true,
default_group_name: "role:everyone",
allowed_system_groups: ["role:everyone", "role:members"],
},
},
};

View File

@ -2,6 +2,7 @@
const assert = require("node:assert/strict");
const example_settings = require("./lib/example_settings.cjs");
const {mock_esm, zrequire} = require("./lib/namespace.cjs");
const {make_stub} = require("./lib/stub.cjs");
const {run_test, noop} = require("./lib/test.cjs");
@ -52,8 +53,9 @@ const stream_create = zrequire("stream_create");
const stream_data = zrequire("stream_data");
const stream_events = zrequire("stream_events");
const realm = {};
set_current_user({});
set_realm({});
set_realm(realm);
const george = {
email: "george@zulip.com",
@ -106,7 +108,11 @@ function test(label, f) {
test("update_property", ({override}) => {
override(compose_recipient, "possibly_update_stream_name_in_compose", noop);
override(compose_recipient, "on_compose_select_recipient_update", noop);
override(
realm,
"server_supported_permission_settings",
example_settings.server_supported_permission_settings,
);
const sub = {...frontend};
stream_data.add_sub(sub);

View File

@ -2,6 +2,7 @@
const assert = require("node:assert/strict");
const example_settings = require("./lib/example_settings.cjs");
const {zrequire} = require("./lib/namespace.cjs");
const {run_test} = require("./lib/test.cjs");
const blueslip = require("./lib/zblueslip.cjs");
@ -542,44 +543,11 @@ run_test("get_realm_user_groups_for_dropdown_list_widget", ({override}) => {
direct_subgroup_ids: new Set([4, 5]),
};
override(realm, "server_supported_permission_settings", {
stream: {
can_administer_channel_group: {
require_system_group: true,
allow_internet_group: false,
allow_nobody_group: true,
allow_everyone_group: false,
default_group_name: "stream_creator_or_nobody",
allowed_system_groups: [],
},
can_remove_subscribers_group: {
require_system_group: true,
allow_internet_group: false,
allow_nobody_group: false,
allow_everyone_group: true,
default_group_name: "role:administrators",
allowed_system_groups: [],
},
},
realm: {
create_multiuse_invite_group: {
require_system_group: true,
allow_internet_group: false,
allow_nobody_group: true,
allow_everyone_group: false,
default_group_name: "role:administrators",
allowed_system_groups: [],
},
can_access_all_users_group: {
require_system_group: true,
allow_internet_group: false,
allow_nobody_group: false,
allow_everyone_group: true,
default_group_name: "role:everyone",
allowed_system_groups: ["role:everyone", "role:members"],
},
},
});
override(
realm,
"server_supported_permission_settings",
example_settings.server_supported_permission_settings,
);
let expected_groups_list = [
{name: "translated: Admins, moderators, members and guests", unique_id: 6},