diff --git a/web/src/stream_events.ts b/web/src/stream_events.ts index ce80c8804c..662e76fa3e 100644 --- a/web/src/stream_events.ts +++ b/web/src/stream_events.ts @@ -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

( 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

( 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) { diff --git a/web/tests/lib/example_settings.cjs b/web/tests/lib/example_settings.cjs new file mode 100644 index 0000000000..0c7f743629 --- /dev/null +++ b/web/tests/lib/example_settings.cjs @@ -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"], + }, + }, +}; diff --git a/web/tests/stream_events.test.cjs b/web/tests/stream_events.test.cjs index 9abada469d..8e561661b2 100644 --- a/web/tests/stream_events.test.cjs +++ b/web/tests/stream_events.test.cjs @@ -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); diff --git a/web/tests/user_groups.test.cjs b/web/tests/user_groups.test.cjs index 9d7fb1732e..5e8908c2f5 100644 --- a/web/tests/user_groups.test.cjs +++ b/web/tests/user_groups.test.cjs @@ -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},