mirror of
https://github.com/zulip/zulip.git
synced 2025-11-12 09:58:06 +00:00
settings: Use can_add_subscribers_group instead of realm policy.
We are using `can_add_subscribers_group` instead of `invite_to_stream_policy` to check whether a user can subscribe other users. We've removed `invite_to_stream_policy` from the frontend wherever applicable.
This commit is contained in:
committed by
Tim Abbott
parent
34ade0d9a2
commit
3bf87228a2
@@ -223,7 +223,6 @@ export function dispatch_normal_event(event) {
|
|||||||
can_move_messages_between_channels_group: noop,
|
can_move_messages_between_channels_group: noop,
|
||||||
can_move_messages_between_topics_group: noop,
|
can_move_messages_between_topics_group: noop,
|
||||||
create_multiuse_invite_group: noop,
|
create_multiuse_invite_group: noop,
|
||||||
invite_to_stream_policy: noop,
|
|
||||||
default_code_block_language: noop,
|
default_code_block_language: noop,
|
||||||
default_language: noop,
|
default_language: noop,
|
||||||
description: noop,
|
description: noop,
|
||||||
|
|||||||
@@ -242,7 +242,6 @@ export function get_subsection_property_elements($subsection: JQuery): HTMLEleme
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const simple_dropdown_realm_settings_schema = realm_schema.pick({
|
export const simple_dropdown_realm_settings_schema = realm_schema.pick({
|
||||||
realm_invite_to_stream_policy: true,
|
|
||||||
realm_wildcard_mention_policy: true,
|
realm_wildcard_mention_policy: true,
|
||||||
realm_org_type: true,
|
realm_org_type: true,
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -8,12 +8,6 @@ import type {GroupSettingValue} from "./state_data.ts";
|
|||||||
import * as user_groups from "./user_groups.ts";
|
import * as user_groups from "./user_groups.ts";
|
||||||
import {user_settings} from "./user_settings.ts";
|
import {user_settings} from "./user_settings.ts";
|
||||||
|
|
||||||
let user_join_date: Date;
|
|
||||||
export function initialize(current_user_join_date: Date): void {
|
|
||||||
// We keep the `user_join_date` as the present day's date if the user is a spectator
|
|
||||||
user_join_date = current_user_join_date;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This is a close cousin of settings_config,
|
This is a close cousin of settings_config,
|
||||||
but this has a bit more logic, and we
|
but this has a bit more logic, and we
|
||||||
@@ -58,38 +52,6 @@ export function user_can_change_logo(): boolean {
|
|||||||
return current_user.is_admin && realm.zulip_plan_is_not_limited;
|
return current_user.is_admin && realm.zulip_plan_is_not_limited;
|
||||||
}
|
}
|
||||||
|
|
||||||
function user_has_permission(policy_value: number): boolean {
|
|
||||||
if (current_user.is_admin) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (page_params.is_spectator || current_user.is_guest) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (policy_value === settings_config.common_policy_values.by_admins_only.code) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (current_user.is_moderator) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (policy_value === settings_config.common_policy_values.by_moderators_only.code) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (policy_value === settings_config.common_policy_values.by_members.code) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
const current_datetime = new Date();
|
|
||||||
const person_date_joined = new Date(user_join_date);
|
|
||||||
const user_join_days =
|
|
||||||
(current_datetime.getTime() - person_date_joined.getTime()) / 1000 / 86400;
|
|
||||||
return user_join_days >= realm.realm_waiting_period_threshold;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function user_has_permission_for_group_setting(
|
export function user_has_permission_for_group_setting(
|
||||||
setting_value: GroupSettingValue,
|
setting_value: GroupSettingValue,
|
||||||
setting_name: string,
|
setting_name: string,
|
||||||
@@ -129,7 +91,11 @@ export function user_can_create_multiuse_invite(): boolean {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function user_can_subscribe_other_users(): boolean {
|
export function user_can_subscribe_other_users(): boolean {
|
||||||
return user_has_permission(realm.realm_invite_to_stream_policy);
|
return user_has_permission_for_group_setting(
|
||||||
|
realm.realm_can_add_subscribers_group,
|
||||||
|
"can_add_subscribers_group",
|
||||||
|
"realm",
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function user_can_create_private_streams(): boolean {
|
export function user_can_create_private_streams(): boolean {
|
||||||
|
|||||||
@@ -362,7 +362,6 @@ export const realm_schema = z.object({
|
|||||||
realm_inline_image_preview: z.boolean(),
|
realm_inline_image_preview: z.boolean(),
|
||||||
realm_inline_url_embed_preview: z.boolean(),
|
realm_inline_url_embed_preview: z.boolean(),
|
||||||
realm_invite_required: z.boolean(),
|
realm_invite_required: z.boolean(),
|
||||||
realm_invite_to_stream_policy: z.number(),
|
|
||||||
realm_is_zephyr_mirror_realm: z.boolean(),
|
realm_is_zephyr_mirror_realm: z.boolean(),
|
||||||
realm_jitsi_server_url: z.nullable(z.string()),
|
realm_jitsi_server_url: z.nullable(z.string()),
|
||||||
realm_linkifiers: z.array(realm_linkifier_schema),
|
realm_linkifiers: z.array(realm_linkifier_schema),
|
||||||
|
|||||||
@@ -104,7 +104,6 @@ import * as scroll_util from "./scroll_util.ts";
|
|||||||
import * as search from "./search.ts";
|
import * as search from "./search.ts";
|
||||||
import * as server_events from "./server_events.js";
|
import * as server_events from "./server_events.js";
|
||||||
import * as settings from "./settings.ts";
|
import * as settings from "./settings.ts";
|
||||||
import * as settings_data from "./settings_data.ts";
|
|
||||||
import * as settings_notifications from "./settings_notifications.ts";
|
import * as settings_notifications from "./settings_notifications.ts";
|
||||||
import * as settings_panel_menu from "./settings_panel_menu.ts";
|
import * as settings_panel_menu from "./settings_panel_menu.ts";
|
||||||
import * as settings_preferences from "./settings_preferences.ts";
|
import * as settings_preferences from "./settings_preferences.ts";
|
||||||
@@ -457,18 +456,6 @@ export function initialize_everything(state_data) {
|
|||||||
people.initialize(current_user.user_id, state_data.people);
|
people.initialize(current_user.user_id, state_data.people);
|
||||||
starred_messages.initialize(state_data.starred_messages);
|
starred_messages.initialize(state_data.starred_messages);
|
||||||
|
|
||||||
let date_joined;
|
|
||||||
if (!page_params.is_spectator) {
|
|
||||||
const user = people.get_by_user_id(current_user.user_id);
|
|
||||||
date_joined = user.date_joined;
|
|
||||||
} else {
|
|
||||||
// Spectators don't have an account, so we just prevent their
|
|
||||||
// date_joined is now.
|
|
||||||
date_joined = new Date();
|
|
||||||
}
|
|
||||||
|
|
||||||
settings_data.initialize(date_joined);
|
|
||||||
|
|
||||||
// The emoji module must be initialized before the right sidebar
|
// The emoji module must be initialized before the right sidebar
|
||||||
// module, so that we can display custom emoji in statuses.
|
// module, so that we can display custom emoji in statuses.
|
||||||
emoji.initialize({
|
emoji.initialize({
|
||||||
|
|||||||
@@ -685,11 +685,8 @@ test_ui("warn_if_mentioning_unsubscribed_user", ({override, mock_template}) => {
|
|||||||
const $textarea = $("<textarea>").attr("id", "compose-textarea");
|
const $textarea = $("<textarea>").attr("id", "compose-textarea");
|
||||||
stub_message_row($textarea);
|
stub_message_row($textarea);
|
||||||
compose_state.set_stream_id("");
|
compose_state.set_stream_id("");
|
||||||
override(
|
|
||||||
realm,
|
override(realm, "realm_can_add_subscribers_group", everyone.id);
|
||||||
"realm_invite_to_stream_policy",
|
|
||||||
settings_config.common_policy_values.by_members.code,
|
|
||||||
);
|
|
||||||
|
|
||||||
let mentioned_details = {
|
let mentioned_details = {
|
||||||
user: {
|
user: {
|
||||||
|
|||||||
@@ -530,10 +530,7 @@ run_test("realm settings", ({override}) => {
|
|||||||
assert.equal(realm[parameter_name], 1);
|
assert.equal(realm[parameter_name], 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
let event = event_fixtures.realm__update__invite_to_stream_policy;
|
let event = event_fixtures.realm__update__bot_creation_policy;
|
||||||
test_realm_integer(event, "realm_invite_to_stream_policy");
|
|
||||||
|
|
||||||
event = event_fixtures.realm__update__bot_creation_policy;
|
|
||||||
test_realm_integer(event, "realm_bot_creation_policy");
|
test_realm_integer(event, "realm_bot_creation_policy");
|
||||||
|
|
||||||
event = event_fixtures.realm__update__invite_required;
|
event = event_fixtures.realm__update__invite_required;
|
||||||
@@ -601,6 +598,7 @@ run_test("realm settings", ({override}) => {
|
|||||||
override(realm, "realm_message_content_edit_limit_seconds", 0);
|
override(realm, "realm_message_content_edit_limit_seconds", 0);
|
||||||
override(realm, "realm_authentication_methods", {Google: {enabled: false, available: true}});
|
override(realm, "realm_authentication_methods", {Google: {enabled: false, available: true}});
|
||||||
override(realm, "realm_can_add_custom_emoji_group", 1);
|
override(realm, "realm_can_add_custom_emoji_group", 1);
|
||||||
|
override(realm, "realm_can_add_subscribers_group", 1);
|
||||||
override(realm, "realm_can_create_public_channel_group", 1);
|
override(realm, "realm_can_create_public_channel_group", 1);
|
||||||
override(realm, "realm_can_invite_users_group", 1);
|
override(realm, "realm_can_invite_users_group", 1);
|
||||||
override(realm, "realm_can_move_messages_between_topics_group", 1);
|
override(realm, "realm_can_move_messages_between_topics_group", 1);
|
||||||
@@ -617,6 +615,7 @@ run_test("realm settings", ({override}) => {
|
|||||||
Google: {enabled: true, available: true},
|
Google: {enabled: true, available: true},
|
||||||
});
|
});
|
||||||
assert_same(realm.realm_can_add_custom_emoji_group, 3);
|
assert_same(realm.realm_can_add_custom_emoji_group, 3);
|
||||||
|
assert_same(realm.realm_can_add_subscribers_group, 3);
|
||||||
assert_same(realm.realm_can_create_public_channel_group, 3);
|
assert_same(realm.realm_can_create_public_channel_group, 3);
|
||||||
assert_same(realm.realm_can_invite_users_group, 3);
|
assert_same(realm.realm_can_invite_users_group, 3);
|
||||||
assert_same(realm.realm_can_move_messages_between_topics_group, 3);
|
assert_same(realm.realm_can_move_messages_between_topics_group, 3);
|
||||||
|
|||||||
@@ -308,13 +308,6 @@ exports.fixtures = {
|
|||||||
value: false,
|
value: false,
|
||||||
},
|
},
|
||||||
|
|
||||||
realm__update__invite_to_stream_policy: {
|
|
||||||
type: "realm",
|
|
||||||
op: "update",
|
|
||||||
property: "invite_to_stream_policy",
|
|
||||||
value: 2,
|
|
||||||
},
|
|
||||||
|
|
||||||
realm__update__name: {
|
realm__update__name: {
|
||||||
type: "realm",
|
type: "realm",
|
||||||
op: "update",
|
op: "update",
|
||||||
@@ -369,6 +362,7 @@ exports.fixtures = {
|
|||||||
Google: {enabled: true, available: true},
|
Google: {enabled: true, available: true},
|
||||||
},
|
},
|
||||||
can_add_custom_emoji_group: 3,
|
can_add_custom_emoji_group: 3,
|
||||||
|
can_add_subscribers_group: 3,
|
||||||
can_create_public_channel_group: 3,
|
can_create_public_channel_group: 3,
|
||||||
can_invite_users_group: 3,
|
can_invite_users_group: 3,
|
||||||
can_move_messages_between_topics_group: 3,
|
can_move_messages_between_topics_group: 3,
|
||||||
|
|||||||
@@ -36,5 +36,13 @@ exports.server_supported_permission_settings = {
|
|||||||
default_group_name: "role:everyone",
|
default_group_name: "role:everyone",
|
||||||
allowed_system_groups: ["role:everyone", "role:members"],
|
allowed_system_groups: ["role:everyone", "role:members"],
|
||||||
},
|
},
|
||||||
|
can_add_subscribers_group: {
|
||||||
|
require_system_group: false,
|
||||||
|
allow_internet_group: false,
|
||||||
|
allow_nobody_group: true,
|
||||||
|
allow_everyone_group: false,
|
||||||
|
default_group_name: "role:members",
|
||||||
|
allowed_system_groups: [],
|
||||||
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -26,13 +26,6 @@ initialize_user_settings({user_settings});
|
|||||||
test people.js.
|
test people.js.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const isaac = {
|
|
||||||
email: "isaac@example.com",
|
|
||||||
delivery_email: "isaac-delivery@example.com",
|
|
||||||
user_id: 30,
|
|
||||||
full_name: "Isaac",
|
|
||||||
};
|
|
||||||
|
|
||||||
const admins = {
|
const admins = {
|
||||||
description: "Administrators",
|
description: "Administrators",
|
||||||
name: "role:administrators",
|
name: "role:administrators",
|
||||||
@@ -183,60 +176,16 @@ run_test("user_can_change_logo", ({override}) => {
|
|||||||
assert.equal(can_change_logo(), false);
|
assert.equal(can_change_logo(), false);
|
||||||
});
|
});
|
||||||
|
|
||||||
function test_policy(label, policy, validation_func) {
|
|
||||||
run_test(label, ({override}) => {
|
|
||||||
override(current_user, "is_admin", true);
|
|
||||||
override(realm, policy, settings_config.common_policy_values.by_admins_only.code);
|
|
||||||
assert.equal(validation_func(), true);
|
|
||||||
|
|
||||||
override(current_user, "is_admin", false);
|
|
||||||
assert.equal(validation_func(), false);
|
|
||||||
|
|
||||||
override(current_user, "is_moderator", true);
|
|
||||||
override(realm, policy, settings_config.common_policy_values.by_moderators_only.code);
|
|
||||||
assert.equal(validation_func(), true);
|
|
||||||
|
|
||||||
override(current_user, "is_moderator", false);
|
|
||||||
assert.equal(validation_func(), false);
|
|
||||||
|
|
||||||
override(current_user, "is_guest", true);
|
|
||||||
override(realm, policy, settings_config.common_policy_values.by_members.code);
|
|
||||||
assert.equal(validation_func(), false);
|
|
||||||
|
|
||||||
override(current_user, "is_guest", false);
|
|
||||||
assert.equal(validation_func(), true);
|
|
||||||
|
|
||||||
page_params.is_spectator = true;
|
|
||||||
override(realm, policy, settings_config.common_policy_values.by_members.code);
|
|
||||||
assert.equal(validation_func(), false);
|
|
||||||
|
|
||||||
page_params.is_spectator = false;
|
|
||||||
assert.equal(validation_func(), true);
|
|
||||||
|
|
||||||
override(realm, policy, settings_config.common_policy_values.by_full_members.code);
|
|
||||||
override(current_user, "user_id", 30);
|
|
||||||
isaac.date_joined = new Date(Date.now());
|
|
||||||
settings_data.initialize(isaac.date_joined);
|
|
||||||
override(realm, "realm_waiting_period_threshold", 10);
|
|
||||||
assert.equal(validation_func(), false);
|
|
||||||
|
|
||||||
isaac.date_joined = new Date(Date.now() - 20 * 86400000);
|
|
||||||
settings_data.initialize(isaac.date_joined);
|
|
||||||
assert.equal(validation_func(), true);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
test_policy(
|
|
||||||
"user_can_subscribe_other_users",
|
|
||||||
"realm_invite_to_stream_policy",
|
|
||||||
settings_data.user_can_subscribe_other_users,
|
|
||||||
);
|
|
||||||
|
|
||||||
test_realm_group_settings(
|
test_realm_group_settings(
|
||||||
"realm_can_add_custom_emoji_group",
|
"realm_can_add_custom_emoji_group",
|
||||||
settings_data.user_can_add_custom_emoji,
|
settings_data.user_can_add_custom_emoji,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
test_realm_group_settings(
|
||||||
|
"realm_can_add_subscribers_group",
|
||||||
|
settings_data.user_can_subscribe_other_users,
|
||||||
|
);
|
||||||
|
|
||||||
test_realm_group_settings(
|
test_realm_group_settings(
|
||||||
"realm_can_delete_any_message_group",
|
"realm_can_delete_any_message_group",
|
||||||
settings_data.user_can_delete_any_message,
|
settings_data.user_can_delete_any_message,
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ mock_esm("../src/loading", {
|
|||||||
mock_esm("../src/scroll_util", {scroll_element_into_container: noop});
|
mock_esm("../src/scroll_util", {scroll_element_into_container: noop});
|
||||||
set_global("document", "document-stub");
|
set_global("document", "document-stub");
|
||||||
|
|
||||||
const settings_config = zrequire("settings_config");
|
|
||||||
const settings_bots = zrequire("settings_bots");
|
const settings_bots = zrequire("settings_bots");
|
||||||
const settings_account = zrequire("settings_account");
|
const settings_account = zrequire("settings_account");
|
||||||
const settings_components = zrequire("settings_components");
|
const settings_components = zrequire("settings_components");
|
||||||
@@ -104,7 +103,6 @@ function test_submit_settings_form(override, submit_form) {
|
|||||||
realm_bot_creation_policy: settings_bots.bot_creation_policy_values.restricted.code,
|
realm_bot_creation_policy: settings_bots.bot_creation_policy_values.restricted.code,
|
||||||
realm_waiting_period_threshold: 1,
|
realm_waiting_period_threshold: 1,
|
||||||
realm_default_language: '"es"',
|
realm_default_language: '"es"',
|
||||||
realm_invite_to_stream_policy: settings_config.common_policy_values.by_admins_only.code,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
override(global, "setTimeout", (func) => func());
|
override(global, "setTimeout", (func) => func());
|
||||||
@@ -131,21 +129,13 @@ function test_submit_settings_form(override, submit_form) {
|
|||||||
|
|
||||||
$("#id_realm_waiting_period_threshold").val(10);
|
$("#id_realm_waiting_period_threshold").val(10);
|
||||||
|
|
||||||
const $invite_to_stream_policy_elem = $("#id_realm_invite_to_stream_policy");
|
|
||||||
$invite_to_stream_policy_elem.val("1");
|
|
||||||
$invite_to_stream_policy_elem.attr("id", "id_realm_invite_to_stream_policy");
|
|
||||||
$invite_to_stream_policy_elem.data = () => "number";
|
|
||||||
|
|
||||||
const $bot_creation_policy_elem = $("#id_realm_bot_creation_policy");
|
const $bot_creation_policy_elem = $("#id_realm_bot_creation_policy");
|
||||||
$bot_creation_policy_elem.val("1");
|
$bot_creation_policy_elem.val("1");
|
||||||
$bot_creation_policy_elem.attr("id", "id_realm_bot_creation_policy");
|
$bot_creation_policy_elem.attr("id", "id_realm_bot_creation_policy");
|
||||||
$bot_creation_policy_elem.data = () => "number";
|
$bot_creation_policy_elem.data = () => "number";
|
||||||
|
|
||||||
let $subsection_elem = $(`#org-${CSS.escape(subsection)}`);
|
let $subsection_elem = $(`#org-${CSS.escape(subsection)}`);
|
||||||
$subsection_elem.set_find_results(".prop-element", [
|
$subsection_elem.set_find_results(".prop-element", [$bot_creation_policy_elem]);
|
||||||
$bot_creation_policy_elem,
|
|
||||||
$invite_to_stream_policy_elem,
|
|
||||||
]);
|
|
||||||
|
|
||||||
patched = false;
|
patched = false;
|
||||||
submit_form.call({to_$: () => $(".save-discard-widget-button.save-button")}, ev);
|
submit_form.call({to_$: () => $(".save-discard-widget-button.save-button")}, ev);
|
||||||
@@ -153,7 +143,6 @@ function test_submit_settings_form(override, submit_form) {
|
|||||||
|
|
||||||
let expected_value = {
|
let expected_value = {
|
||||||
bot_creation_policy: 1,
|
bot_creation_policy: 1,
|
||||||
invite_to_stream_policy: 1,
|
|
||||||
};
|
};
|
||||||
assert.deepEqual(data, expected_value);
|
assert.deepEqual(data, expected_value);
|
||||||
|
|
||||||
@@ -283,33 +272,6 @@ function test_sync_realm_settings({override}) {
|
|||||||
$.create("save-button-controls-stub").addClass("hide"),
|
$.create("save-button-controls-stub").addClass("hide"),
|
||||||
);
|
);
|
||||||
|
|
||||||
function test_common_policy(property_name) {
|
|
||||||
const $property_elem = $(`#id_realm_${CSS.escape(property_name)}`);
|
|
||||||
$property_elem.length = 1;
|
|
||||||
$property_elem.attr("id", `id_realm_${CSS.escape(property_name)}`);
|
|
||||||
$property_elem.closest = () => $subsection_stub;
|
|
||||||
$property_elem[0] = `#id_realm_${CSS.escape(property_name)}`;
|
|
||||||
|
|
||||||
/* Each policy is initialized to 'by_members' and then all the values are tested
|
|
||||||
in the following order - by_admins_only, by_moderators_only, by_full_members,
|
|
||||||
by_members. */
|
|
||||||
|
|
||||||
override(
|
|
||||||
realm,
|
|
||||||
`realm_${property_name}`,
|
|
||||||
settings_config.common_policy_values.by_members.code,
|
|
||||||
);
|
|
||||||
$property_elem.val(settings_config.common_policy_values.by_members.code);
|
|
||||||
|
|
||||||
for (const policy_value of Object.values(settings_config.common_policy_values)) {
|
|
||||||
override(realm, `realm_${property_name}`, policy_value.code);
|
|
||||||
settings_org.sync_realm_settings(property_name);
|
|
||||||
assert.equal($property_elem.val(), policy_value.code);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
test_common_policy("invite_to_stream_policy");
|
|
||||||
|
|
||||||
{
|
{
|
||||||
/* Test message content edit limit minutes sync */
|
/* Test message content edit limit minutes sync */
|
||||||
const $property_elem = $("#id_realm_message_content_edit_limit_minutes");
|
const $property_elem = $("#id_realm_message_content_edit_limit_minutes");
|
||||||
@@ -361,31 +323,6 @@ function test_sync_realm_settings({override}) {
|
|||||||
settings_org.sync_realm_settings("emails_restricted_to_domains");
|
settings_org.sync_realm_settings("emails_restricted_to_domains");
|
||||||
assert.equal($("#id_realm_org_join_restrictions").val(), "no_restriction");
|
assert.equal($("#id_realm_org_join_restrictions").val(), "no_restriction");
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
|
||||||
// Test hiding save-discard buttons on live-updating.
|
|
||||||
const $property_elem = $("#id_realm_invite_to_stream_policy");
|
|
||||||
$property_elem.length = 1;
|
|
||||||
$property_elem.attr("id", "id_realm_invite_to_stream_policy");
|
|
||||||
$property_elem.closest = () => $subsection_stub;
|
|
||||||
|
|
||||||
const save_button_stubs = createSaveButtons("subsection-stub");
|
|
||||||
$subsection_stub.set_find_results(
|
|
||||||
".save-button-controls",
|
|
||||||
save_button_stubs.$save_button_controls,
|
|
||||||
);
|
|
||||||
$property_elem.val(settings_config.common_policy_values.by_admins_only.code);
|
|
||||||
override(
|
|
||||||
realm,
|
|
||||||
"realm_invite_to_stream_policy",
|
|
||||||
settings_config.common_policy_values.by_members.code,
|
|
||||||
);
|
|
||||||
save_button_stubs.$save_button_controls.removeClass("hide");
|
|
||||||
$subsection_stub.set_find_results(".prop-element", [$property_elem]);
|
|
||||||
|
|
||||||
settings_org.sync_realm_settings("invite_to_stream_policy");
|
|
||||||
assert.equal(save_button_stubs.props.hidden, true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function test_parse_time_limit({override}) {
|
function test_parse_time_limit({override}) {
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ page_params.development_environment = true;
|
|||||||
const color_data = zrequire("color_data");
|
const color_data = zrequire("color_data");
|
||||||
const peer_data = zrequire("peer_data");
|
const peer_data = zrequire("peer_data");
|
||||||
const people = zrequire("people");
|
const people = zrequire("people");
|
||||||
const settings_config = zrequire("settings_config");
|
|
||||||
const sub_store = zrequire("sub_store");
|
const sub_store = zrequire("sub_store");
|
||||||
const stream_data = zrequire("stream_data");
|
const stream_data = zrequire("stream_data");
|
||||||
const hash_util = zrequire("hash_util");
|
const hash_util = zrequire("hash_util");
|
||||||
@@ -359,17 +358,14 @@ test("get_streams_for_user", ({override}) => {
|
|||||||
for (const sub of subs) {
|
for (const sub of subs) {
|
||||||
stream_data.add_sub(sub);
|
stream_data.add_sub(sub);
|
||||||
}
|
}
|
||||||
|
override(current_user, "user_id", me.user_id);
|
||||||
|
|
||||||
peer_data.set_subscribers(denmark.stream_id, [me.user_id, test_user.user_id]);
|
peer_data.set_subscribers(denmark.stream_id, [me.user_id, test_user.user_id]);
|
||||||
peer_data.set_subscribers(social.stream_id, [test_user.user_id]);
|
peer_data.set_subscribers(social.stream_id, [test_user.user_id]);
|
||||||
peer_data.set_subscribers(test.stream_id, [test_user.user_id]);
|
peer_data.set_subscribers(test.stream_id, [test_user.user_id]);
|
||||||
peer_data.set_subscribers(world.stream_id, [me.user_id]);
|
peer_data.set_subscribers(world.stream_id, [me.user_id]);
|
||||||
|
|
||||||
override(
|
override(realm, "realm_can_add_subscribers_group", students.id);
|
||||||
realm,
|
|
||||||
"realm_invite_to_stream_policy",
|
|
||||||
settings_config.common_policy_values.by_admins_only.code,
|
|
||||||
);
|
|
||||||
assert.deepEqual(stream_data.get_streams_for_user(me.user_id).can_subscribe, [social, errors]);
|
assert.deepEqual(stream_data.get_streams_for_user(me.user_id).can_subscribe, [social, errors]);
|
||||||
|
|
||||||
// test_user is subscribed to all three streams, but current user (me)
|
// test_user is subscribed to all three streams, but current user (me)
|
||||||
@@ -384,19 +380,13 @@ test("get_streams_for_user", ({override}) => {
|
|||||||
social,
|
social,
|
||||||
]);
|
]);
|
||||||
assert.deepEqual(stream_data.get_streams_for_user(test_user.user_id).can_subscribe, []);
|
assert.deepEqual(stream_data.get_streams_for_user(test_user.user_id).can_subscribe, []);
|
||||||
// Verify can subscribe if we're an administrator.
|
// Verify that administrator cannot subscribe if they are not part
|
||||||
|
// of the appropriate group.
|
||||||
override(current_user, "is_admin", true);
|
override(current_user, "is_admin", true);
|
||||||
assert.deepEqual(stream_data.get_streams_for_user(test_user.user_id).can_subscribe, [
|
assert.equal(user_groups.is_user_in_group(students.id, current_user.user_id), false);
|
||||||
world,
|
assert.deepEqual(stream_data.get_streams_for_user(test_user.user_id).can_subscribe, []);
|
||||||
errors,
|
|
||||||
]);
|
|
||||||
override(current_user, "is_admin", false);
|
|
||||||
|
|
||||||
override(
|
override(realm, "realm_can_add_subscribers_group", everyone_group.id);
|
||||||
realm,
|
|
||||||
"realm_invite_to_stream_policy",
|
|
||||||
settings_config.common_policy_values.by_members.code,
|
|
||||||
);
|
|
||||||
assert.deepEqual(stream_data.get_streams_for_user(test_user.user_id).can_subscribe, [
|
assert.deepEqual(stream_data.get_streams_for_user(test_user.user_id).can_subscribe, [
|
||||||
world,
|
world,
|
||||||
errors,
|
errors,
|
||||||
@@ -433,6 +423,8 @@ test("renames", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test("admin_options", ({override}) => {
|
test("admin_options", ({override}) => {
|
||||||
|
override(realm, "realm_can_add_subscribers_group", admins_group.id);
|
||||||
|
|
||||||
function make_sub(can_administer_channel_group) {
|
function make_sub(can_administer_channel_group) {
|
||||||
const sub = {
|
const sub = {
|
||||||
subscribed: false,
|
subscribed: false,
|
||||||
@@ -518,6 +510,7 @@ test("admin_options", ({override}) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test("stream_settings", ({override}) => {
|
test("stream_settings", ({override}) => {
|
||||||
|
override(realm, "realm_can_add_subscribers_group", admins_group.id);
|
||||||
const cinnamon = {
|
const cinnamon = {
|
||||||
stream_id: 1,
|
stream_id: 1,
|
||||||
name: "c",
|
name: "c",
|
||||||
@@ -1076,11 +1069,14 @@ test("get_invite_stream_data", ({override}) => {
|
|||||||
people.init();
|
people.init();
|
||||||
people.add_active_user(me);
|
people.add_active_user(me);
|
||||||
people.initialize_current_user(me.user_id);
|
people.initialize_current_user(me.user_id);
|
||||||
|
override(current_user, "user_id", me.user_id);
|
||||||
override(current_user, "is_admin", true);
|
override(current_user, "is_admin", true);
|
||||||
|
|
||||||
stream_data.add_sub(orie);
|
stream_data.add_sub(orie);
|
||||||
stream_data.set_realm_default_streams([orie.stream_id]);
|
stream_data.set_realm_default_streams([orie.stream_id]);
|
||||||
|
|
||||||
|
override(realm, "realm_can_add_subscribers_group", everyone_group.id);
|
||||||
|
|
||||||
const expected_list = [
|
const expected_list = [
|
||||||
{
|
{
|
||||||
name: "Orie",
|
name: "Orie",
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
const assert = require("node:assert/strict");
|
const assert = require("node:assert/strict");
|
||||||
|
|
||||||
|
const example_settings = require("./lib/example_settings.cjs");
|
||||||
const {zrequire} = require("./lib/namespace.cjs");
|
const {zrequire} = require("./lib/namespace.cjs");
|
||||||
const {run_test} = require("./lib/test.cjs");
|
const {run_test} = require("./lib/test.cjs");
|
||||||
|
|
||||||
@@ -10,10 +11,12 @@ const people = zrequire("people");
|
|||||||
const {set_current_user, set_realm} = zrequire("state_data");
|
const {set_current_user, set_realm} = zrequire("state_data");
|
||||||
const stream_data = zrequire("stream_data");
|
const stream_data = zrequire("stream_data");
|
||||||
const stream_pill = zrequire("stream_pill");
|
const stream_pill = zrequire("stream_pill");
|
||||||
|
const user_groups = zrequire("user_groups");
|
||||||
|
|
||||||
const current_user = {};
|
const current_user = {};
|
||||||
|
const realm = {};
|
||||||
set_current_user(current_user);
|
set_current_user(current_user);
|
||||||
set_realm({});
|
set_realm(realm);
|
||||||
|
|
||||||
const denmark = {
|
const denmark = {
|
||||||
stream_id: 101,
|
stream_id: 101,
|
||||||
@@ -60,9 +63,24 @@ const me = {
|
|||||||
people.add_active_user(me);
|
people.add_active_user(me);
|
||||||
people.initialize_current_user(me.user_id);
|
people.initialize_current_user(me.user_id);
|
||||||
|
|
||||||
|
const me_group = {
|
||||||
|
name: "me_group",
|
||||||
|
id: 1,
|
||||||
|
members: new Set([me.user_id]),
|
||||||
|
is_system_group: false,
|
||||||
|
direct_subgroup_ids: new Set([]),
|
||||||
|
};
|
||||||
|
user_groups.initialize({realm_user_groups: [me_group]});
|
||||||
|
|
||||||
run_test("create_item", ({override}) => {
|
run_test("create_item", ({override}) => {
|
||||||
override(current_user, "user_id", me.user_id);
|
override(current_user, "user_id", me.user_id);
|
||||||
override(current_user, "is_admin", true);
|
override(current_user, "is_admin", true);
|
||||||
|
override(
|
||||||
|
realm,
|
||||||
|
"server_supported_permission_settings",
|
||||||
|
example_settings.server_supported_permission_settings,
|
||||||
|
);
|
||||||
|
override(realm, "realm_can_add_subscribers_group", me_group.id);
|
||||||
function test_create_item(
|
function test_create_item(
|
||||||
stream_name,
|
stream_name,
|
||||||
current_items,
|
current_items,
|
||||||
|
|||||||
@@ -23,6 +23,15 @@ mock_esm("../src/browser_history", {
|
|||||||
mock_esm("../src/hash_parser", {
|
mock_esm("../src/hash_parser", {
|
||||||
get_current_hash_section: () => denmark_stream_id,
|
get_current_hash_section: () => denmark_stream_id,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
mock_esm("../src/group_permission_settings", {
|
||||||
|
get_group_permission_setting_config() {
|
||||||
|
return {
|
||||||
|
allow_everyone_group: false,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
set_global("page_params", {});
|
set_global("page_params", {});
|
||||||
|
|
||||||
const {set_current_user, set_realm} = zrequire("state_data");
|
const {set_current_user, set_realm} = zrequire("state_data");
|
||||||
@@ -31,7 +40,8 @@ const stream_settings_ui = zrequire("stream_settings_ui");
|
|||||||
const user_groups = zrequire("user_groups");
|
const user_groups = zrequire("user_groups");
|
||||||
const {initialize_user_settings} = zrequire("user_settings");
|
const {initialize_user_settings} = zrequire("user_settings");
|
||||||
|
|
||||||
set_realm({});
|
const realm = {};
|
||||||
|
set_realm(realm);
|
||||||
set_current_user({});
|
set_current_user({});
|
||||||
initialize_user_settings({user_settings: {}});
|
initialize_user_settings({user_settings: {}});
|
||||||
|
|
||||||
@@ -53,8 +63,9 @@ const initialize_user_groups = () => {
|
|||||||
user_groups.initialize({realm_user_groups: [admins_group, nobody_group]});
|
user_groups.initialize({realm_user_groups: [admins_group, nobody_group]});
|
||||||
};
|
};
|
||||||
|
|
||||||
run_test("redraw_left_panel", ({mock_template}) => {
|
run_test("redraw_left_panel", ({override, mock_template}) => {
|
||||||
initialize_user_groups();
|
initialize_user_groups();
|
||||||
|
override(realm, "realm_can_add_subscribers_group", admins_group.id);
|
||||||
|
|
||||||
// set-up sub rows stubs
|
// set-up sub rows stubs
|
||||||
const denmark = {
|
const denmark = {
|
||||||
|
|||||||
Reference in New Issue
Block a user