mirror of
https://github.com/zulip/zulip.git
synced 2025-11-09 08:26:11 +00:00
streams: Use can_subscribe_group setting for checking permission.
This commit adds code to use can_subscribe_group setting in webapp. Fixes part of #33417.
This commit is contained in:
@@ -180,6 +180,8 @@ IGNORED_PHRASES = [
|
|||||||
r"weeks",
|
r"weeks",
|
||||||
# Used in "Who can subscribe others to this channel" label.
|
# Used in "Who can subscribe others to this channel" label.
|
||||||
r"must be subscribed",
|
r"must be subscribed",
|
||||||
|
# Used in "Who can subscribe to this channel" label.
|
||||||
|
r"everyone except guests can subscribe to any public channel",
|
||||||
]
|
]
|
||||||
|
|
||||||
# Sort regexes in descending order of their lengths. As a result, the
|
# Sort regexes in descending order of their lengths. As a result, the
|
||||||
|
|||||||
@@ -69,6 +69,7 @@ export const stream_group_setting_name_schema = z.enum([
|
|||||||
"can_administer_channel_group",
|
"can_administer_channel_group",
|
||||||
"can_remove_subscribers_group",
|
"can_remove_subscribers_group",
|
||||||
"can_send_message_group",
|
"can_send_message_group",
|
||||||
|
"can_subscribe_group",
|
||||||
]);
|
]);
|
||||||
export type StreamGroupSettingName = z.infer<typeof stream_group_setting_name_schema>;
|
export type StreamGroupSettingName = z.infer<typeof stream_group_setting_name_schema>;
|
||||||
|
|
||||||
|
|||||||
@@ -662,6 +662,7 @@ export const all_group_setting_labels = {
|
|||||||
can_add_subscribers_group: $t({defaultMessage: "Who can subscribe anyone to this channel"}),
|
can_add_subscribers_group: $t({defaultMessage: "Who can subscribe anyone to this channel"}),
|
||||||
can_send_message_group: $t({defaultMessage: "Who can post to this channel"}),
|
can_send_message_group: $t({defaultMessage: "Who can post to this channel"}),
|
||||||
can_administer_channel_group: $t({defaultMessage: "Who can administer this channel"}),
|
can_administer_channel_group: $t({defaultMessage: "Who can administer this channel"}),
|
||||||
|
can_subscribe_group: $t({defaultMessage: "Who can subscribe to this channel"}),
|
||||||
can_remove_subscribers_group: $t({
|
can_remove_subscribers_group: $t({
|
||||||
defaultMessage: "Who can unsubscribe anyone from this channel",
|
defaultMessage: "Who can unsubscribe anyone from this channel",
|
||||||
}),
|
}),
|
||||||
@@ -752,12 +753,14 @@ export const owner_editable_realm_group_permission_settings = new Set([
|
|||||||
export const stream_group_permission_settings: StreamGroupSettingName[] = [
|
export const stream_group_permission_settings: StreamGroupSettingName[] = [
|
||||||
"can_send_message_group",
|
"can_send_message_group",
|
||||||
"can_administer_channel_group",
|
"can_administer_channel_group",
|
||||||
|
"can_subscribe_group",
|
||||||
"can_add_subscribers_group",
|
"can_add_subscribers_group",
|
||||||
"can_remove_subscribers_group",
|
"can_remove_subscribers_group",
|
||||||
];
|
];
|
||||||
|
|
||||||
export const stream_group_permission_settings_requiring_content_access: StreamGroupSettingName[] = [
|
export const stream_group_permission_settings_requiring_content_access: StreamGroupSettingName[] = [
|
||||||
"can_add_subscribers_group",
|
"can_add_subscribers_group",
|
||||||
|
"can_subscribe_group",
|
||||||
];
|
];
|
||||||
|
|
||||||
// Order of settings is important, as this list is used to
|
// Order of settings is important, as this list is used to
|
||||||
|
|||||||
@@ -515,6 +515,7 @@ export function show_new_stream_modal(): void {
|
|||||||
$("#stream_creation_form .default-stream input").prop("checked", false);
|
$("#stream_creation_form .default-stream input").prop("checked", false);
|
||||||
update_announce_stream_state();
|
update_announce_stream_state();
|
||||||
stream_ui_updates.update_can_add_subscribers_group_label($("#stream-creation"));
|
stream_ui_updates.update_can_add_subscribers_group_label($("#stream-creation"));
|
||||||
|
stream_ui_updates.update_can_subscribe_group_label($("#stream-creation"));
|
||||||
stream_ui_updates.update_default_stream_and_stream_privacy_state($("#stream-creation"));
|
stream_ui_updates.update_default_stream_and_stream_privacy_state($("#stream-creation"));
|
||||||
clear_error_display();
|
clear_error_display();
|
||||||
}
|
}
|
||||||
@@ -545,6 +546,7 @@ export function set_up_handlers(): void {
|
|||||||
$container.on("change", ".stream-privacy-values input", () => {
|
$container.on("change", ".stream-privacy-values input", () => {
|
||||||
update_announce_stream_state();
|
update_announce_stream_state();
|
||||||
stream_ui_updates.update_default_stream_and_stream_privacy_state($container);
|
stream_ui_updates.update_default_stream_and_stream_privacy_state($container);
|
||||||
|
stream_ui_updates.update_can_subscribe_group_label($container);
|
||||||
// We update the label on `can_add_subscribers_groups` in the
|
// We update the label on `can_add_subscribers_groups` in the
|
||||||
// listener attached to `.stream-privacy-values input` on
|
// listener attached to `.stream-privacy-values input` on
|
||||||
// `#channels_overlay_container` which covers both stream
|
// `#channels_overlay_container` which covers both stream
|
||||||
|
|||||||
@@ -518,6 +518,37 @@ export function has_metadata_access(sub: StreamSubscription): boolean {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const can_subscribe = settings_data.user_has_permission_for_group_setting(
|
||||||
|
sub.can_subscribe_group,
|
||||||
|
"can_subscribe_group",
|
||||||
|
"stream",
|
||||||
|
);
|
||||||
|
if (can_subscribe) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function has_content_access_via_group_permissions(sub: StreamSubscription): boolean {
|
||||||
|
const can_add_subscribers = settings_data.user_has_permission_for_group_setting(
|
||||||
|
sub.can_add_subscribers_group,
|
||||||
|
"can_add_subscribers_group",
|
||||||
|
"stream",
|
||||||
|
);
|
||||||
|
if (can_add_subscribers) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
const can_subscribe = settings_data.user_has_permission_for_group_setting(
|
||||||
|
sub.can_subscribe_group,
|
||||||
|
"can_subscribe_group",
|
||||||
|
"stream",
|
||||||
|
);
|
||||||
|
if (can_subscribe) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -543,12 +574,7 @@ export let has_content_access = (sub: StreamSubscription): boolean => {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const can_add_subscribers = settings_data.user_has_permission_for_group_setting(
|
if (has_content_access_via_group_permissions(sub)) {
|
||||||
sub.can_add_subscribers_group,
|
|
||||||
"can_add_subscribers_group",
|
|
||||||
"stream",
|
|
||||||
);
|
|
||||||
if (can_add_subscribers) {
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -584,18 +610,20 @@ function can_administer_channel(sub: StreamSubscription): boolean {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function can_toggle_subscription(sub: StreamSubscription): boolean {
|
export function can_toggle_subscription(sub: StreamSubscription): boolean {
|
||||||
// You can always remove your subscription if you're subscribed.
|
if (page_params.is_spectator) {
|
||||||
//
|
return false;
|
||||||
// One can only join a stream if it is public (!invite_only) and
|
}
|
||||||
// your role is Member or above (!is_guest).
|
|
||||||
// Spectators cannot subscribe to any streams.
|
// Currently, you can always remove your subscription if you're subscribed.
|
||||||
//
|
if (sub.subscribed) {
|
||||||
// Note that the correctness of this logic relies on the fact that
|
return true;
|
||||||
// one cannot be subscribed to a deactivated stream.
|
}
|
||||||
return (
|
|
||||||
(sub.subscribed || (!current_user.is_guest && !(sub.invite_only || sub.is_archived))) &&
|
if (has_content_access(sub)) {
|
||||||
!page_params.is_spectator
|
return true;
|
||||||
);
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function get_current_user_and_their_bots_with_post_messages_permission(
|
export function get_current_user_and_their_bots_with_post_messages_permission(
|
||||||
|
|||||||
@@ -287,6 +287,7 @@ export function show_settings_for(node: HTMLElement): void {
|
|||||||
stream_ui_updates.enable_or_disable_permission_settings_in_edit_panel(sub);
|
stream_ui_updates.enable_or_disable_permission_settings_in_edit_panel(sub);
|
||||||
setup_group_setting_widgets(slim_sub);
|
setup_group_setting_widgets(slim_sub);
|
||||||
stream_ui_updates.update_can_add_subscribers_group_label($edit_container);
|
stream_ui_updates.update_can_add_subscribers_group_label($edit_container);
|
||||||
|
stream_ui_updates.update_can_subscribe_group_label($edit_container);
|
||||||
|
|
||||||
$("#channels_overlay_container").on(
|
$("#channels_overlay_container").on(
|
||||||
"click",
|
"click",
|
||||||
@@ -804,6 +805,8 @@ export function initialize(): void {
|
|||||||
);
|
);
|
||||||
if (sub && $subsection.attr("id") === "stream_permission_settings") {
|
if (sub && $subsection.attr("id") === "stream_permission_settings") {
|
||||||
stream_ui_updates.update_default_stream_and_stream_privacy_state($subsection);
|
stream_ui_updates.update_default_stream_and_stream_privacy_state($subsection);
|
||||||
|
const $edit_container = stream_settings_containers.get_edit_container(sub);
|
||||||
|
stream_ui_updates.update_can_subscribe_group_label($edit_container);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
@@ -871,6 +874,8 @@ export function initialize(): void {
|
|||||||
settings_org.discard_stream_settings_subsection_changes($subsection, sub);
|
settings_org.discard_stream_settings_subsection_changes($subsection, sub);
|
||||||
if ($subsection.attr("id") === "stream_permission_settings") {
|
if ($subsection.attr("id") === "stream_permission_settings") {
|
||||||
stream_ui_updates.update_default_stream_and_stream_privacy_state($subsection);
|
stream_ui_updates.update_default_stream_and_stream_privacy_state($subsection);
|
||||||
|
const $edit_container = stream_settings_containers.get_edit_container(sub);
|
||||||
|
stream_ui_updates.update_can_subscribe_group_label($edit_container);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -104,6 +104,9 @@ export function update_property<P extends keyof UpdatableStreamProperties>(
|
|||||||
sub,
|
sub,
|
||||||
group_setting_value_schema.parse(value),
|
group_setting_value_schema.parse(value),
|
||||||
);
|
);
|
||||||
|
if (property === "can_subscribe_group" || property === "can_add_subscribers_group") {
|
||||||
|
stream_settings_ui.update_subscription_elements(sub);
|
||||||
|
}
|
||||||
user_group_edit.update_stream_setting_in_permissions_panel(
|
user_group_edit.update_stream_setting_in_permissions_panel(
|
||||||
stream_permission_group_settings_schema.parse(property),
|
stream_permission_group_settings_schema.parse(property),
|
||||||
group_setting_value_schema.parse(value),
|
group_setting_value_schema.parse(value),
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import * as peer_data from "./peer_data.ts";
|
|||||||
import * as settings_config from "./settings_config.ts";
|
import * as settings_config from "./settings_config.ts";
|
||||||
import * as settings_data from "./settings_data.ts";
|
import * as settings_data from "./settings_data.ts";
|
||||||
import {current_user} from "./state_data.ts";
|
import {current_user} from "./state_data.ts";
|
||||||
|
import * as stream_data from "./stream_data.ts";
|
||||||
import * as stream_ui_updates from "./stream_ui_updates.ts";
|
import * as stream_ui_updates from "./stream_ui_updates.ts";
|
||||||
import type {StreamSubscription} from "./sub_store.ts";
|
import type {StreamSubscription} from "./sub_store.ts";
|
||||||
import * as ui_report from "./ui_report.ts";
|
import * as ui_report from "./ui_report.ts";
|
||||||
@@ -255,7 +256,10 @@ export function sub_or_unsub(
|
|||||||
): void {
|
): void {
|
||||||
if (sub.subscribed) {
|
if (sub.subscribed) {
|
||||||
// TODO: This next line should allow guests to access web-public streams.
|
// TODO: This next line should allow guests to access web-public streams.
|
||||||
if (sub.invite_only || current_user.is_guest) {
|
if (
|
||||||
|
(sub.invite_only && !stream_data.has_content_access_via_group_permissions(sub)) ||
|
||||||
|
current_user.is_guest
|
||||||
|
) {
|
||||||
unsubscribe_from_private_stream(sub);
|
unsubscribe_from_private_stream(sub);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ import * as stream_edit_toggler from "./stream_edit_toggler.ts";
|
|||||||
import * as stream_list from "./stream_list.ts";
|
import * as stream_list from "./stream_list.ts";
|
||||||
import * as stream_settings_api from "./stream_settings_api.ts";
|
import * as stream_settings_api from "./stream_settings_api.ts";
|
||||||
import * as stream_settings_components from "./stream_settings_components.ts";
|
import * as stream_settings_components from "./stream_settings_components.ts";
|
||||||
|
import * as stream_settings_containers from "./stream_settings_containers.ts";
|
||||||
import * as stream_settings_data from "./stream_settings_data.ts";
|
import * as stream_settings_data from "./stream_settings_data.ts";
|
||||||
import type {StreamPermissionGroupSetting} from "./stream_types.ts";
|
import type {StreamPermissionGroupSetting} from "./stream_types.ts";
|
||||||
import * as stream_ui_updates from "./stream_ui_updates.ts";
|
import * as stream_ui_updates from "./stream_ui_updates.ts";
|
||||||
@@ -192,6 +193,8 @@ export function update_stream_privacy(
|
|||||||
const active_data = stream_settings_components.get_active_data();
|
const active_data = stream_settings_components.get_active_data();
|
||||||
if (active_data.id === sub.stream_id) {
|
if (active_data.id === sub.stream_id) {
|
||||||
stream_settings_components.set_right_panel_title(sub);
|
stream_settings_components.set_right_panel_title(sub);
|
||||||
|
const $edit_container = stream_settings_containers.get_edit_container(sub);
|
||||||
|
stream_ui_updates.update_can_subscribe_group_label($edit_container);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update navbar if needed
|
// Update navbar if needed
|
||||||
@@ -231,6 +234,15 @@ export function update_subscribers_ui(sub: StreamSubscription): void {
|
|||||||
message_view_header.maybe_rerender_title_area_for_stream(sub.stream_id);
|
message_view_header.maybe_rerender_title_area_for_stream(sub.stream_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function update_subscription_elements(sub: StreamSubscription): void {
|
||||||
|
if (!overlays.streams_open()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
update_left_panel_row(sub);
|
||||||
|
stream_ui_updates.update_settings_button_for_sub(sub);
|
||||||
|
}
|
||||||
|
|
||||||
export function add_sub_to_table(sub: StreamSubscription): void {
|
export function add_sub_to_table(sub: StreamSubscription): void {
|
||||||
if (is_sub_already_present(sub)) {
|
if (is_sub_already_present(sub)) {
|
||||||
// If a stream is already listed/added in subscription modal,
|
// If a stream is already listed/added in subscription modal,
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ export const stream_permission_group_settings_schema = z.enum([
|
|||||||
"can_administer_channel_group",
|
"can_administer_channel_group",
|
||||||
"can_remove_subscribers_group",
|
"can_remove_subscribers_group",
|
||||||
"can_send_message_group",
|
"can_send_message_group",
|
||||||
|
"can_subscribe_group",
|
||||||
]);
|
]);
|
||||||
export type StreamPermissionGroupSetting = z.infer<typeof stream_permission_group_settings_schema>;
|
export type StreamPermissionGroupSetting = z.infer<typeof stream_permission_group_settings_schema>;
|
||||||
|
|
||||||
@@ -42,6 +43,7 @@ export const stream_schema = z.object({
|
|||||||
can_administer_channel_group: group_setting_value_schema,
|
can_administer_channel_group: group_setting_value_schema,
|
||||||
can_remove_subscribers_group: group_setting_value_schema,
|
can_remove_subscribers_group: group_setting_value_schema,
|
||||||
can_send_message_group: group_setting_value_schema,
|
can_send_message_group: group_setting_value_schema,
|
||||||
|
can_subscribe_group: group_setting_value_schema,
|
||||||
is_recently_active: z.boolean(),
|
is_recently_active: z.boolean(),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import type * as tippy from "tippy.js";
|
|||||||
|
|
||||||
import render_announce_stream_checkbox from "../templates/stream_settings/announce_stream_checkbox.hbs";
|
import render_announce_stream_checkbox from "../templates/stream_settings/announce_stream_checkbox.hbs";
|
||||||
import render_stream_can_add_subscribers_group_label from "../templates/stream_settings/stream_can_add_subscribers_group_label.hbs";
|
import render_stream_can_add_subscribers_group_label from "../templates/stream_settings/stream_can_add_subscribers_group_label.hbs";
|
||||||
|
import render_stream_can_subscribe_group_label from "../templates/stream_settings/stream_can_subscribe_group_label.hbs";
|
||||||
import render_stream_privacy_icon from "../templates/stream_settings/stream_privacy_icon.hbs";
|
import render_stream_privacy_icon from "../templates/stream_settings/stream_privacy_icon.hbs";
|
||||||
import render_stream_settings_tip from "../templates/stream_settings/stream_settings_tip.hbs";
|
import render_stream_settings_tip from "../templates/stream_settings/stream_settings_tip.hbs";
|
||||||
|
|
||||||
@@ -269,6 +270,15 @@ export function update_can_add_subscribers_group_label($container: JQuery): void
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function update_can_subscribe_group_label($container: JQuery): void {
|
||||||
|
const privacy_type = $container.find("input[type=radio][name=privacy]:checked").val();
|
||||||
|
const is_invite_only =
|
||||||
|
privacy_type === "invite-only" || privacy_type === "invite-only-public-history";
|
||||||
|
|
||||||
|
const $can_subscribe_group_label = $container.find(".can_subscribe_group_label");
|
||||||
|
$can_subscribe_group_label.html(render_stream_can_subscribe_group_label({is_invite_only}));
|
||||||
|
}
|
||||||
|
|
||||||
export function enable_or_disable_permission_settings_in_edit_panel(
|
export function enable_or_disable_permission_settings_in_edit_panel(
|
||||||
sub: SettingsSubscription,
|
sub: SettingsSubscription,
|
||||||
): void {
|
): void {
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
{{!-- We are using snake case for the id since setting_name is always
|
{{!-- We are using snake case for the id and one of the classes since
|
||||||
in snake case and it would be weird to have the resultant id be a mix
|
setting_name is always in snake case and it would be weird to have the
|
||||||
of two types of cases. --}}
|
resultant id be a mix of two types of cases. --}}
|
||||||
<label class="group-setting-label" id="group_setting_label_{{setting_name}}">
|
<label class="group-setting-label {{setting_name}}_label" id="group_setting_label_{{setting_name}}">
|
||||||
{{label}}
|
{{label}}
|
||||||
{{#if label_parens_text}}(<i>{{label_parens_text}}</i>){{/if}}
|
{{#if label_parens_text}}(<i>{{label_parens_text}}</i>){{/if}}
|
||||||
{{#if help_link}}
|
{{#if help_link}}
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
{{t "Who can subscribe to this channel"}}
|
||||||
|
{{#unless is_invite_only}}
|
||||||
|
<i>({{t "everyone except guests can subscribe to any public channel"}})</i>
|
||||||
|
{{/unless}}
|
||||||
@@ -67,6 +67,11 @@
|
|||||||
label=group_setting_labels.can_administer_channel_group
|
label=group_setting_labels.can_administer_channel_group
|
||||||
prefix=prefix }}
|
prefix=prefix }}
|
||||||
|
|
||||||
|
{{> ../settings/group_setting_value_pill_input
|
||||||
|
setting_name="can_subscribe_group"
|
||||||
|
label=group_setting_labels.can_subscribe_group
|
||||||
|
prefix=prefix }}
|
||||||
|
|
||||||
{{> ../settings/group_setting_value_pill_input
|
{{> ../settings/group_setting_value_pill_input
|
||||||
setting_name="can_add_subscribers_group"
|
setting_name="can_add_subscribers_group"
|
||||||
label=group_setting_labels.can_add_subscribers_group
|
label=group_setting_labels.can_add_subscribers_group
|
||||||
|
|||||||
@@ -186,6 +186,8 @@ test_ui("validate_stream_message_address_info", ({mock_template}) => {
|
|||||||
stream_id: 101,
|
stream_id: 101,
|
||||||
name: "party",
|
name: "party",
|
||||||
subscribed: true,
|
subscribed: true,
|
||||||
|
can_add_subscribers_group: nobody.id,
|
||||||
|
can_subscribe_group: nobody.id,
|
||||||
};
|
};
|
||||||
stream_data.add_sub(party_sub);
|
stream_data.add_sub(party_sub);
|
||||||
assert.ok(compose_validate.validate_stream_message_address_info(party_sub));
|
assert.ok(compose_validate.validate_stream_message_address_info(party_sub));
|
||||||
@@ -714,6 +716,7 @@ test_ui("warn_if_mentioning_unsubscribed_user", ({override, mock_template}) => {
|
|||||||
name: "random",
|
name: "random",
|
||||||
can_add_subscribers_group: admin.id,
|
can_add_subscribers_group: admin.id,
|
||||||
can_administer_channel_group: admin.id,
|
can_administer_channel_group: admin.id,
|
||||||
|
can_subscribe_group: admin.id,
|
||||||
};
|
};
|
||||||
stream_data.add_sub(sub);
|
stream_data.add_sub(sub);
|
||||||
compose_state.set_stream_id(sub.stream_id);
|
compose_state.set_stream_id(sub.stream_id);
|
||||||
|
|||||||
@@ -514,6 +514,7 @@ const sweden_stream = stream_item({
|
|||||||
subscribed: true,
|
subscribed: true,
|
||||||
can_administer_channel_group: support.id,
|
can_administer_channel_group: support.id,
|
||||||
can_add_subscribers_group: support.id,
|
can_add_subscribers_group: support.id,
|
||||||
|
can_subscribe_group: support.id,
|
||||||
});
|
});
|
||||||
const denmark_stream = stream_item({
|
const denmark_stream = stream_item({
|
||||||
name: "Denmark",
|
name: "Denmark",
|
||||||
@@ -522,6 +523,7 @@ const denmark_stream = stream_item({
|
|||||||
subscribed: true,
|
subscribed: true,
|
||||||
can_administer_channel_group: support.id,
|
can_administer_channel_group: support.id,
|
||||||
can_add_subscribers_group: support.id,
|
can_add_subscribers_group: support.id,
|
||||||
|
can_subscribe_group: support.id,
|
||||||
});
|
});
|
||||||
const netherland_stream = stream_item({
|
const netherland_stream = stream_item({
|
||||||
name: "The Netherlands",
|
name: "The Netherlands",
|
||||||
@@ -530,6 +532,7 @@ const netherland_stream = stream_item({
|
|||||||
subscribed: false,
|
subscribed: false,
|
||||||
can_administer_channel_group: support.id,
|
can_administer_channel_group: support.id,
|
||||||
can_add_subscribers_group: support.id,
|
can_add_subscribers_group: support.id,
|
||||||
|
can_subscribe_group: support.id,
|
||||||
});
|
});
|
||||||
const mobile_stream = stream_item({
|
const mobile_stream = stream_item({
|
||||||
name: "Mobile",
|
name: "Mobile",
|
||||||
@@ -538,6 +541,7 @@ const mobile_stream = stream_item({
|
|||||||
subscribed: false,
|
subscribed: false,
|
||||||
can_administer_channel_group: support.id,
|
can_administer_channel_group: support.id,
|
||||||
can_add_subscribers_group: support.id,
|
can_add_subscribers_group: support.id,
|
||||||
|
can_subscribe_group: support.id,
|
||||||
});
|
});
|
||||||
const mobile_team_stream = stream_item({
|
const mobile_team_stream = stream_item({
|
||||||
name: "Mobile team",
|
name: "Mobile team",
|
||||||
@@ -546,6 +550,7 @@ const mobile_team_stream = stream_item({
|
|||||||
subscribed: true,
|
subscribed: true,
|
||||||
can_administer_channel_group: support.id,
|
can_administer_channel_group: support.id,
|
||||||
can_add_subscribers_group: support.id,
|
can_add_subscribers_group: support.id,
|
||||||
|
can_subscribe_group: support.id,
|
||||||
});
|
});
|
||||||
const broken_link_stream = stream_item({
|
const broken_link_stream = stream_item({
|
||||||
name: "A* Algorithm",
|
name: "A* Algorithm",
|
||||||
|
|||||||
@@ -26,6 +26,14 @@ exports.server_supported_permission_settings = {
|
|||||||
default_group_name: "role:administrators",
|
default_group_name: "role:administrators",
|
||||||
allowed_system_groups: [],
|
allowed_system_groups: [],
|
||||||
},
|
},
|
||||||
|
can_subscribe_group: {
|
||||||
|
require_system_group: false,
|
||||||
|
allow_internet_group: false,
|
||||||
|
allow_nobody_group: true,
|
||||||
|
allow_everyone_group: false,
|
||||||
|
default_group_name: "role:nobody",
|
||||||
|
allowed_system_groups: [],
|
||||||
|
},
|
||||||
},
|
},
|
||||||
realm: {
|
realm: {
|
||||||
create_multiuse_invite_group: {
|
create_multiuse_invite_group: {
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ mock_esm("../src/compose_banner", {
|
|||||||
const compose_pm_pill = mock_esm("../src/compose_pm_pill");
|
const compose_pm_pill = mock_esm("../src/compose_pm_pill");
|
||||||
mock_esm("../src/settings_data", {
|
mock_esm("../src/settings_data", {
|
||||||
user_can_access_all_other_users: () => true,
|
user_can_access_all_other_users: () => true,
|
||||||
|
user_has_permission_for_group_setting: () => true,
|
||||||
});
|
});
|
||||||
mock_esm("../src/spectators", {
|
mock_esm("../src/spectators", {
|
||||||
login_to_access() {},
|
login_to_access() {},
|
||||||
|
|||||||
@@ -119,6 +119,7 @@ test("subscribers", () => {
|
|||||||
stream_id: 1001,
|
stream_id: 1001,
|
||||||
can_add_subscribers_group: nobody_group.id,
|
can_add_subscribers_group: nobody_group.id,
|
||||||
can_administer_channel_group: nobody_group.id,
|
can_administer_channel_group: nobody_group.id,
|
||||||
|
can_subscribe_group: nobody_group.id,
|
||||||
};
|
};
|
||||||
stream_data.add_sub(sub);
|
stream_data.add_sub(sub);
|
||||||
|
|
||||||
|
|||||||
@@ -340,6 +340,7 @@ test("get_streams_for_user", ({override}) => {
|
|||||||
can_remove_subscribers_group: admins_group.id,
|
can_remove_subscribers_group: admins_group.id,
|
||||||
can_add_subscribers_group: admins_group.id,
|
can_add_subscribers_group: admins_group.id,
|
||||||
can_administer_channel_group: admins_group.id,
|
can_administer_channel_group: admins_group.id,
|
||||||
|
can_subscribe_group: admins_group.id,
|
||||||
};
|
};
|
||||||
const social = {
|
const social = {
|
||||||
color: "red",
|
color: "red",
|
||||||
@@ -351,6 +352,7 @@ test("get_streams_for_user", ({override}) => {
|
|||||||
can_remove_subscribers_group: admins_group.id,
|
can_remove_subscribers_group: admins_group.id,
|
||||||
can_add_subscribers_group: admins_group.id,
|
can_add_subscribers_group: admins_group.id,
|
||||||
can_administer_channel_group: admins_group.id,
|
can_administer_channel_group: admins_group.id,
|
||||||
|
can_subscribe_group: admins_group.id,
|
||||||
};
|
};
|
||||||
const test = {
|
const test = {
|
||||||
color: "yellow",
|
color: "yellow",
|
||||||
@@ -361,6 +363,7 @@ test("get_streams_for_user", ({override}) => {
|
|||||||
can_remove_subscribers_group: admins_group.id,
|
can_remove_subscribers_group: admins_group.id,
|
||||||
can_add_subscribers_group: admins_group.id,
|
can_add_subscribers_group: admins_group.id,
|
||||||
can_administer_channel_group: admins_group.id,
|
can_administer_channel_group: admins_group.id,
|
||||||
|
can_subscribe_group: admins_group.id,
|
||||||
};
|
};
|
||||||
const world = {
|
const world = {
|
||||||
color: "blue",
|
color: "blue",
|
||||||
@@ -372,6 +375,7 @@ test("get_streams_for_user", ({override}) => {
|
|||||||
can_remove_subscribers_group: admins_group.id,
|
can_remove_subscribers_group: admins_group.id,
|
||||||
can_add_subscribers_group: admins_group.id,
|
can_add_subscribers_group: admins_group.id,
|
||||||
can_administer_channel_group: admins_group.id,
|
can_administer_channel_group: admins_group.id,
|
||||||
|
can_subscribe_group: admins_group.id,
|
||||||
};
|
};
|
||||||
const errors = {
|
const errors = {
|
||||||
color: "green",
|
color: "green",
|
||||||
@@ -383,6 +387,7 @@ test("get_streams_for_user", ({override}) => {
|
|||||||
can_remove_subscribers_group: admins_group.id,
|
can_remove_subscribers_group: admins_group.id,
|
||||||
can_add_subscribers_group: admins_group.id,
|
can_add_subscribers_group: admins_group.id,
|
||||||
can_administer_channel_group: admins_group.id,
|
can_administer_channel_group: admins_group.id,
|
||||||
|
can_subscribe_group: admins_group.id,
|
||||||
};
|
};
|
||||||
const subs = [denmark, social, test, world, errors];
|
const subs = [denmark, social, test, world, errors];
|
||||||
for (const sub of subs) {
|
for (const sub of subs) {
|
||||||
@@ -471,6 +476,7 @@ test("admin_options", ({override}) => {
|
|||||||
can_remove_subscribers_group: admins_group.id,
|
can_remove_subscribers_group: admins_group.id,
|
||||||
can_administer_channel_group,
|
can_administer_channel_group,
|
||||||
can_add_subscribers_group: admins_group.id,
|
can_add_subscribers_group: admins_group.id,
|
||||||
|
can_subscribe_group: admins_group.id,
|
||||||
date_created: 1691057093,
|
date_created: 1691057093,
|
||||||
creator_id: null,
|
creator_id: null,
|
||||||
};
|
};
|
||||||
@@ -574,6 +580,7 @@ test("stream_settings", ({override}) => {
|
|||||||
can_remove_subscribers_group: admins_group.id,
|
can_remove_subscribers_group: admins_group.id,
|
||||||
can_administer_channel_group: nobody_group.id,
|
can_administer_channel_group: nobody_group.id,
|
||||||
can_add_subscribers_group: admins_group.id,
|
can_add_subscribers_group: admins_group.id,
|
||||||
|
can_subscribe_group: admins_group.id,
|
||||||
date_created: 1691057093,
|
date_created: 1691057093,
|
||||||
creator_id: null,
|
creator_id: null,
|
||||||
};
|
};
|
||||||
@@ -587,6 +594,7 @@ test("stream_settings", ({override}) => {
|
|||||||
can_remove_subscribers_group: admins_group.id,
|
can_remove_subscribers_group: admins_group.id,
|
||||||
can_administer_channel_group: nobody_group.id,
|
can_administer_channel_group: nobody_group.id,
|
||||||
can_add_subscribers_group: admins_group.id,
|
can_add_subscribers_group: admins_group.id,
|
||||||
|
can_subscribe_group: admins_group.id,
|
||||||
date_created: 1691057093,
|
date_created: 1691057093,
|
||||||
creator_id: null,
|
creator_id: null,
|
||||||
};
|
};
|
||||||
@@ -602,6 +610,7 @@ test("stream_settings", ({override}) => {
|
|||||||
can_remove_subscribers_group: admins_group.id,
|
can_remove_subscribers_group: admins_group.id,
|
||||||
can_administer_channel_group: nobody_group.id,
|
can_administer_channel_group: nobody_group.id,
|
||||||
can_add_subscribers_group: admins_group.id,
|
can_add_subscribers_group: admins_group.id,
|
||||||
|
can_subscribe_group: admins_group.id,
|
||||||
date_created: 1691057093,
|
date_created: 1691057093,
|
||||||
creator_id: null,
|
creator_id: null,
|
||||||
};
|
};
|
||||||
@@ -1123,6 +1132,7 @@ test("get_invite_stream_data", ({override}) => {
|
|||||||
is_web_public: false,
|
is_web_public: false,
|
||||||
can_administer_channel_group: nobody_group.id,
|
can_administer_channel_group: nobody_group.id,
|
||||||
can_add_subscribers_group: nobody_group.id,
|
can_add_subscribers_group: nobody_group.id,
|
||||||
|
can_subscribe_group: nobody_group.id,
|
||||||
};
|
};
|
||||||
|
|
||||||
people.init();
|
people.init();
|
||||||
@@ -1145,6 +1155,7 @@ test("get_invite_stream_data", ({override}) => {
|
|||||||
is_web_public: false,
|
is_web_public: false,
|
||||||
can_administer_channel_group: nobody_group.id,
|
can_administer_channel_group: nobody_group.id,
|
||||||
can_add_subscribers_group: nobody_group.id,
|
can_add_subscribers_group: nobody_group.id,
|
||||||
|
can_subscribe_group: nobody_group.id,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
assert.deepEqual(stream_data.get_invite_stream_data(), expected_list);
|
assert.deepEqual(stream_data.get_invite_stream_data(), expected_list);
|
||||||
@@ -1157,6 +1168,7 @@ test("get_invite_stream_data", ({override}) => {
|
|||||||
is_web_public: false,
|
is_web_public: false,
|
||||||
can_administer_channel_group: nobody_group.id,
|
can_administer_channel_group: nobody_group.id,
|
||||||
can_add_subscribers_group: nobody_group.id,
|
can_add_subscribers_group: nobody_group.id,
|
||||||
|
can_subscribe_group: nobody_group.id,
|
||||||
};
|
};
|
||||||
stream_data.add_sub(inviter);
|
stream_data.add_sub(inviter);
|
||||||
|
|
||||||
@@ -1168,6 +1180,7 @@ test("get_invite_stream_data", ({override}) => {
|
|||||||
is_web_public: false,
|
is_web_public: false,
|
||||||
can_administer_channel_group: nobody_group.id,
|
can_administer_channel_group: nobody_group.id,
|
||||||
can_add_subscribers_group: nobody_group.id,
|
can_add_subscribers_group: nobody_group.id,
|
||||||
|
can_subscribe_group: nobody_group.id,
|
||||||
});
|
});
|
||||||
assert.deepEqual(stream_data.get_invite_stream_data(), expected_list);
|
assert.deepEqual(stream_data.get_invite_stream_data(), expected_list);
|
||||||
|
|
||||||
@@ -1180,6 +1193,7 @@ test("get_invite_stream_data", ({override}) => {
|
|||||||
is_web_public: false,
|
is_web_public: false,
|
||||||
can_administer_channel_group: nobody_group.id,
|
can_administer_channel_group: nobody_group.id,
|
||||||
can_add_subscribers_group: nobody_group.id,
|
can_add_subscribers_group: nobody_group.id,
|
||||||
|
can_subscribe_group: nobody_group.id,
|
||||||
};
|
};
|
||||||
|
|
||||||
stream_data.add_sub(tokyo);
|
stream_data.add_sub(tokyo);
|
||||||
@@ -1193,6 +1207,7 @@ test("get_invite_stream_data", ({override}) => {
|
|||||||
is_web_public: false,
|
is_web_public: false,
|
||||||
can_administer_channel_group: nobody_group.id,
|
can_administer_channel_group: nobody_group.id,
|
||||||
can_add_subscribers_group: nobody_group.id,
|
can_add_subscribers_group: nobody_group.id,
|
||||||
|
can_subscribe_group: nobody_group.id,
|
||||||
};
|
};
|
||||||
|
|
||||||
stream_data.add_sub(random);
|
stream_data.add_sub(random);
|
||||||
@@ -1205,6 +1220,7 @@ test("get_invite_stream_data", ({override}) => {
|
|||||||
is_web_public: false,
|
is_web_public: false,
|
||||||
can_administer_channel_group: nobody_group.id,
|
can_administer_channel_group: nobody_group.id,
|
||||||
can_add_subscribers_group: nobody_group.id,
|
can_add_subscribers_group: nobody_group.id,
|
||||||
|
can_subscribe_group: nobody_group.id,
|
||||||
});
|
});
|
||||||
assert.deepEqual(stream_data.get_invite_stream_data(), expected_list);
|
assert.deepEqual(stream_data.get_invite_stream_data(), expected_list);
|
||||||
});
|
});
|
||||||
@@ -1272,6 +1288,7 @@ test("can_unsubscribe_others", ({override}) => {
|
|||||||
can_remove_subscribers_group: admins_group.id,
|
can_remove_subscribers_group: admins_group.id,
|
||||||
can_administer_channel_group: nobody_group.id,
|
can_administer_channel_group: nobody_group.id,
|
||||||
can_add_subscribers_group: nobody_group.id,
|
can_add_subscribers_group: nobody_group.id,
|
||||||
|
can_subscribe_group: nobody_group.id,
|
||||||
};
|
};
|
||||||
stream_data.add_sub(sub);
|
stream_data.add_sub(sub);
|
||||||
|
|
||||||
@@ -1549,6 +1566,7 @@ test("has_metadata_access", ({override}) => {
|
|||||||
history_public_to_subscribers: false,
|
history_public_to_subscribers: false,
|
||||||
can_add_subscribers_group: nobody_group.id,
|
can_add_subscribers_group: nobody_group.id,
|
||||||
can_administer_channel_group: nobody_group.id,
|
can_administer_channel_group: nobody_group.id,
|
||||||
|
can_subscribe_group: nobody_group.id,
|
||||||
};
|
};
|
||||||
|
|
||||||
assert.equal(stream_data.has_metadata_access(social), true);
|
assert.equal(stream_data.has_metadata_access(social), true);
|
||||||
@@ -1589,10 +1607,10 @@ test("has_metadata_access", ({override}) => {
|
|||||||
override(current_user, "is_guest", false);
|
override(current_user, "is_guest", false);
|
||||||
social.can_administer_channel_group = nobody_group.id;
|
social.can_administer_channel_group = nobody_group.id;
|
||||||
|
|
||||||
// Users that can add other subscribers to a private channel
|
// Users that can add other subscribers or subscribe themselves
|
||||||
// have content access to that channel. Having content access
|
// to a private channel have content access to that channel.
|
||||||
// should give them metadata access to that private channel even
|
// Having content access should give them metadata access to
|
||||||
// when unsubscribed.
|
// that private channel even when unsubscribed.
|
||||||
assert.equal(stream_data.has_metadata_access(social), false);
|
assert.equal(stream_data.has_metadata_access(social), false);
|
||||||
social.can_add_subscribers_group = me_group.id;
|
social.can_add_subscribers_group = me_group.id;
|
||||||
assert.equal(stream_data.has_metadata_access(social), true);
|
assert.equal(stream_data.has_metadata_access(social), true);
|
||||||
@@ -1601,6 +1619,14 @@ test("has_metadata_access", ({override}) => {
|
|||||||
override(current_user, "is_guest", false);
|
override(current_user, "is_guest", false);
|
||||||
social.can_add_subscribers_group = nobody_group.id;
|
social.can_add_subscribers_group = nobody_group.id;
|
||||||
|
|
||||||
|
assert.equal(stream_data.has_metadata_access(social), false);
|
||||||
|
social.can_subscribe_group = me_group.id;
|
||||||
|
assert.equal(stream_data.has_metadata_access(social), true);
|
||||||
|
override(current_user, "is_guest", true);
|
||||||
|
assert.equal(stream_data.has_metadata_access(social), false);
|
||||||
|
override(current_user, "is_guest", false);
|
||||||
|
social.can_subscribe_group = nobody_group.id;
|
||||||
|
|
||||||
// Non-admin and non-guest user should have access to public
|
// Non-admin and non-guest user should have access to public
|
||||||
// channel.
|
// channel.
|
||||||
assert.equal(stream_data.has_metadata_access(social), false);
|
assert.equal(stream_data.has_metadata_access(social), false);
|
||||||
@@ -1629,6 +1655,7 @@ test("has_content_access", ({override}) => {
|
|||||||
history_public_to_subscribers: false,
|
history_public_to_subscribers: false,
|
||||||
can_add_subscribers_group: nobody_group.id,
|
can_add_subscribers_group: nobody_group.id,
|
||||||
can_administer_channel_group: nobody_group.id,
|
can_administer_channel_group: nobody_group.id,
|
||||||
|
can_subscribe_group: nobody_group.id,
|
||||||
};
|
};
|
||||||
|
|
||||||
assert.equal(stream_data.has_content_access(social), true);
|
assert.equal(stream_data.has_content_access(social), true);
|
||||||
@@ -1689,10 +1716,19 @@ test("has_content_access", ({override}) => {
|
|||||||
social.subscribed = false;
|
social.subscribed = false;
|
||||||
assert.equal(stream_data.has_content_access(social), false);
|
assert.equal(stream_data.has_content_access(social), false);
|
||||||
|
|
||||||
|
// Users part of can_subscribe_group or can_add_subscribers_group
|
||||||
|
// should have content access even when unsubscribed.
|
||||||
assert.equal(stream_data.has_content_access(social), false);
|
assert.equal(stream_data.has_content_access(social), false);
|
||||||
social.can_add_subscribers_group = me_group.id;
|
social.can_add_subscribers_group = me_group.id;
|
||||||
assert.equal(stream_data.has_content_access(social), true);
|
assert.equal(stream_data.has_content_access(social), true);
|
||||||
social.can_add_subscribers_group = nobody_group.id;
|
social.can_add_subscribers_group = nobody_group.id;
|
||||||
|
assert.equal(stream_data.has_content_access(social), false);
|
||||||
|
|
||||||
|
social.can_subscribe_group = me_group.id;
|
||||||
|
assert.equal(stream_data.has_content_access(social), true);
|
||||||
|
|
||||||
|
social.can_subscribe_group = nobody_group.id;
|
||||||
|
assert.equal(stream_data.has_content_access(social), false);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("can_preview", ({override_rewire}) => {
|
test("can_preview", ({override_rewire}) => {
|
||||||
@@ -1704,6 +1740,7 @@ test("can_preview", ({override_rewire}) => {
|
|||||||
history_public_to_subscribers: true,
|
history_public_to_subscribers: true,
|
||||||
can_add_subscribers_group: nobody_group.id,
|
can_add_subscribers_group: nobody_group.id,
|
||||||
can_administer_channel_group: nobody_group.id,
|
can_administer_channel_group: nobody_group.id,
|
||||||
|
can_subscribe_group: nobody_group.id,
|
||||||
};
|
};
|
||||||
|
|
||||||
override_rewire(stream_data, "has_content_access", () => true);
|
override_rewire(stream_data, "has_content_access", () => true);
|
||||||
@@ -1715,3 +1752,52 @@ test("can_preview", ({override_rewire}) => {
|
|||||||
override_rewire(stream_data, "has_content_access", () => false);
|
override_rewire(stream_data, "has_content_access", () => false);
|
||||||
assert.equal(stream_data.can_preview(social), false);
|
assert.equal(stream_data.can_preview(social), false);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
run_test("can_toggle_subscription", ({override}) => {
|
||||||
|
const social = {
|
||||||
|
subscribed: false,
|
||||||
|
color: "red",
|
||||||
|
name: "social",
|
||||||
|
stream_id: 2,
|
||||||
|
is_muted: false,
|
||||||
|
invite_only: false,
|
||||||
|
history_public_to_subscribers: false,
|
||||||
|
can_add_subscribers_group: nobody_group.id,
|
||||||
|
can_administer_channel_group: nobody_group.id,
|
||||||
|
can_subscribe_group: nobody_group.id,
|
||||||
|
};
|
||||||
|
social.subscribed = true;
|
||||||
|
|
||||||
|
override(current_user, "user_id", me.user_id);
|
||||||
|
|
||||||
|
override(page_params, "is_spectator", true);
|
||||||
|
assert.equal(stream_data.can_toggle_subscription(social), false);
|
||||||
|
|
||||||
|
override(page_params, "is_spectator", false);
|
||||||
|
assert.equal(stream_data.can_toggle_subscription(social), true);
|
||||||
|
|
||||||
|
override(current_user, "is_guest", true);
|
||||||
|
assert.equal(stream_data.can_toggle_subscription(social), true);
|
||||||
|
|
||||||
|
social.subscribed = false;
|
||||||
|
assert.equal(stream_data.can_toggle_subscription(social), false);
|
||||||
|
|
||||||
|
override(current_user, "is_guest", false);
|
||||||
|
assert.equal(stream_data.can_toggle_subscription(social), true);
|
||||||
|
|
||||||
|
social.invite_only = true;
|
||||||
|
assert.equal(stream_data.can_toggle_subscription(social), false);
|
||||||
|
|
||||||
|
override(current_user, "is_admin", true);
|
||||||
|
assert.equal(stream_data.can_toggle_subscription(social), false);
|
||||||
|
|
||||||
|
override(current_user, "is_admin", false);
|
||||||
|
|
||||||
|
social.can_add_subscribers_group = me_group.id;
|
||||||
|
assert.equal(stream_data.can_toggle_subscription(social), true);
|
||||||
|
|
||||||
|
social.can_add_subscribers_group = nobody_group.id;
|
||||||
|
assert.equal(stream_data.can_toggle_subscription(social), false);
|
||||||
|
social.can_subscribe_group = me_group.id;
|
||||||
|
assert.equal(stream_data.can_toggle_subscription(social), true);
|
||||||
|
});
|
||||||
|
|||||||
@@ -292,6 +292,27 @@ test("update_property", ({override}) => {
|
|||||||
assert.equal(args.val, 3);
|
assert.equal(args.val, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Test stream can_subscribe_group change event
|
||||||
|
{
|
||||||
|
const stub = make_stub();
|
||||||
|
override(stream_settings_ui, "update_stream_permission_group_setting", stub.f);
|
||||||
|
const update_subscription_elements_stub = make_stub();
|
||||||
|
override(
|
||||||
|
stream_settings_ui,
|
||||||
|
"update_subscription_elements",
|
||||||
|
update_subscription_elements_stub.f,
|
||||||
|
);
|
||||||
|
stream_events.update_property(stream_id, "can_subscribe_group", 3);
|
||||||
|
assert.equal(stub.num_calls, 1);
|
||||||
|
assert.equal(update_subscription_elements_stub.num_calls, 1);
|
||||||
|
let args = stub.get_args("setting_name", "sub", "val");
|
||||||
|
assert.equal(args.setting_name, "can_subscribe_group");
|
||||||
|
assert.equal(args.sub.stream_id, stream_id);
|
||||||
|
assert.equal(args.val, 3);
|
||||||
|
args = update_subscription_elements_stub.get_args("sub");
|
||||||
|
assert.equal(args.sub, sub);
|
||||||
|
}
|
||||||
|
|
||||||
// Test deprecated properties for coverage.
|
// Test deprecated properties for coverage.
|
||||||
{
|
{
|
||||||
stream_events.update_property(stream_id, "stream_post_policy", 2);
|
stream_events.update_property(stream_id, "stream_post_policy", 2);
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ const denmark = {
|
|||||||
subscribed: true,
|
subscribed: true,
|
||||||
can_administer_channel_group: nobody_group.id,
|
can_administer_channel_group: nobody_group.id,
|
||||||
can_add_subscribers_group: nobody_group.id,
|
can_add_subscribers_group: nobody_group.id,
|
||||||
|
can_subscribe_group: nobody_group.id,
|
||||||
};
|
};
|
||||||
const sweden = {
|
const sweden = {
|
||||||
stream_id: 102,
|
stream_id: 102,
|
||||||
@@ -52,6 +53,7 @@ const sweden = {
|
|||||||
subscribed: false,
|
subscribed: false,
|
||||||
can_administer_channel_group: nobody_group.id,
|
can_administer_channel_group: nobody_group.id,
|
||||||
can_add_subscribers_group: nobody_group.id,
|
can_add_subscribers_group: nobody_group.id,
|
||||||
|
can_subscribe_group: nobody_group.id,
|
||||||
};
|
};
|
||||||
const germany = {
|
const germany = {
|
||||||
stream_id: 103,
|
stream_id: 103,
|
||||||
@@ -60,6 +62,7 @@ const germany = {
|
|||||||
invite_only: true,
|
invite_only: true,
|
||||||
can_administer_channel_group: nobody_group.id,
|
can_administer_channel_group: nobody_group.id,
|
||||||
can_add_subscribers_group: nobody_group.id,
|
can_add_subscribers_group: nobody_group.id,
|
||||||
|
can_subscribe_group: nobody_group.id,
|
||||||
};
|
};
|
||||||
|
|
||||||
peer_data.set_subscribers(denmark.stream_id, [1, 2, 77]);
|
peer_data.set_subscribers(denmark.stream_id, [1, 2, 77]);
|
||||||
|
|||||||
@@ -80,6 +80,7 @@ run_test("redraw_left_panel", ({override, mock_template}) => {
|
|||||||
can_administer_channel_group: nobody_group.id,
|
can_administer_channel_group: nobody_group.id,
|
||||||
can_remove_subscribers_group: admins_group.id,
|
can_remove_subscribers_group: admins_group.id,
|
||||||
can_add_subscribers_group: admins_group.id,
|
can_add_subscribers_group: admins_group.id,
|
||||||
|
can_subscribe_group: admins_group.id,
|
||||||
date_created: 1691057093,
|
date_created: 1691057093,
|
||||||
creator_id: null,
|
creator_id: null,
|
||||||
};
|
};
|
||||||
@@ -95,6 +96,7 @@ run_test("redraw_left_panel", ({override, mock_template}) => {
|
|||||||
can_administer_channel_group: nobody_group.id,
|
can_administer_channel_group: nobody_group.id,
|
||||||
can_remove_subscribers_group: admins_group.id,
|
can_remove_subscribers_group: admins_group.id,
|
||||||
can_add_subscribers_group: admins_group.id,
|
can_add_subscribers_group: admins_group.id,
|
||||||
|
can_subscribe_group: admins_group.id,
|
||||||
date_created: 1691057093,
|
date_created: 1691057093,
|
||||||
creator_id: null,
|
creator_id: null,
|
||||||
};
|
};
|
||||||
@@ -110,6 +112,7 @@ run_test("redraw_left_panel", ({override, mock_template}) => {
|
|||||||
can_remove_subscribers_group: admins_group.id,
|
can_remove_subscribers_group: admins_group.id,
|
||||||
can_administer_channel_group: nobody_group.id,
|
can_administer_channel_group: nobody_group.id,
|
||||||
can_add_subscribers_group: admins_group.id,
|
can_add_subscribers_group: admins_group.id,
|
||||||
|
can_subscribe_group: admins_group.id,
|
||||||
date_created: 1691057093,
|
date_created: 1691057093,
|
||||||
creator_id: null,
|
creator_id: null,
|
||||||
};
|
};
|
||||||
@@ -125,6 +128,7 @@ run_test("redraw_left_panel", ({override, mock_template}) => {
|
|||||||
can_administer_channel_group: nobody_group.id,
|
can_administer_channel_group: nobody_group.id,
|
||||||
can_remove_subscribers_group: admins_group.id,
|
can_remove_subscribers_group: admins_group.id,
|
||||||
can_add_subscribers_group: admins_group.id,
|
can_add_subscribers_group: admins_group.id,
|
||||||
|
can_subscribe_group: admins_group.id,
|
||||||
date_created: 1691057093,
|
date_created: 1691057093,
|
||||||
creator_id: null,
|
creator_id: null,
|
||||||
};
|
};
|
||||||
@@ -140,6 +144,7 @@ run_test("redraw_left_panel", ({override, mock_template}) => {
|
|||||||
can_administer_channel_group: nobody_group.id,
|
can_administer_channel_group: nobody_group.id,
|
||||||
can_remove_subscribers_group: admins_group.id,
|
can_remove_subscribers_group: admins_group.id,
|
||||||
can_add_subscribers_group: admins_group.id,
|
can_add_subscribers_group: admins_group.id,
|
||||||
|
can_subscribe_group: admins_group.id,
|
||||||
date_created: 1691057093,
|
date_created: 1691057093,
|
||||||
creator_id: null,
|
creator_id: null,
|
||||||
};
|
};
|
||||||
@@ -155,6 +160,7 @@ run_test("redraw_left_panel", ({override, mock_template}) => {
|
|||||||
can_administer_channel_group: nobody_group.id,
|
can_administer_channel_group: nobody_group.id,
|
||||||
can_remove_subscribers_group: admins_group.id,
|
can_remove_subscribers_group: admins_group.id,
|
||||||
can_add_subscribers_group: admins_group.id,
|
can_add_subscribers_group: admins_group.id,
|
||||||
|
can_subscribe_group: admins_group.id,
|
||||||
date_created: 1691057093,
|
date_created: 1691057093,
|
||||||
creator_id: null,
|
creator_id: null,
|
||||||
};
|
};
|
||||||
@@ -170,6 +176,7 @@ run_test("redraw_left_panel", ({override, mock_template}) => {
|
|||||||
can_administer_channel_group: nobody_group.id,
|
can_administer_channel_group: nobody_group.id,
|
||||||
can_remove_subscribers_group: admins_group.id,
|
can_remove_subscribers_group: admins_group.id,
|
||||||
can_add_subscribers_group: admins_group.id,
|
can_add_subscribers_group: admins_group.id,
|
||||||
|
can_subscribe_group: admins_group.id,
|
||||||
date_created: 1691057093,
|
date_created: 1691057093,
|
||||||
creator_id: null,
|
creator_id: null,
|
||||||
};
|
};
|
||||||
@@ -185,6 +192,7 @@ run_test("redraw_left_panel", ({override, mock_template}) => {
|
|||||||
can_administer_channel_group: nobody_group.id,
|
can_administer_channel_group: nobody_group.id,
|
||||||
can_remove_subscribers_group: admins_group.id,
|
can_remove_subscribers_group: admins_group.id,
|
||||||
can_add_subscribers_group: admins_group.id,
|
can_add_subscribers_group: admins_group.id,
|
||||||
|
can_subscribe_group: admins_group.id,
|
||||||
date_created: 1691057093,
|
date_created: 1691057093,
|
||||||
creator_id: null,
|
creator_id: null,
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user