mirror of
https://github.com/zulip/zulip.git
synced 2025-11-03 05:23:35 +00:00
stream_settings: Add new topics_policy setting.
Added `topics_policy` channel setting to configure sending messages in the empty topic. Fixes #33549.
This commit is contained in:
@@ -126,6 +126,7 @@ const social = {
|
||||
name: "social",
|
||||
subscribed: true,
|
||||
can_send_message_group: 2,
|
||||
topics_policy: "inherit",
|
||||
};
|
||||
stream_data.add_sub(social);
|
||||
|
||||
|
||||
@@ -12,15 +12,6 @@ mock_jquery((selector) => {
|
||||
val() {
|
||||
return "lunch";
|
||||
},
|
||||
is(arg) {
|
||||
switch (arg) {
|
||||
case ":focus":
|
||||
return true;
|
||||
/* istanbul ignore next */
|
||||
default:
|
||||
throw new Error(`Unknown arg ${arg}`);
|
||||
}
|
||||
},
|
||||
};
|
||||
/* istanbul ignore next */
|
||||
default:
|
||||
|
||||
@@ -1296,6 +1296,14 @@ run_test("get_focus_area", ({override}) => {
|
||||
get_focus_area({message_type: "stream"}),
|
||||
"#compose_select_recipient_widget_wrapper",
|
||||
);
|
||||
|
||||
stream_data.add_sub({
|
||||
message_type: "stream",
|
||||
name: "fun",
|
||||
stream_id: 4,
|
||||
topics_policy: "inherit",
|
||||
});
|
||||
|
||||
override(realm, "realm_topics_policy", "disable_empty_topic");
|
||||
assert.equal(
|
||||
get_focus_area({message_type: "stream", stream_name: "fun", stream_id: 4}),
|
||||
|
||||
@@ -347,7 +347,6 @@ test_ui("validate", ({mock_template, override}) => {
|
||||
let missing_topic_error_rendered = false;
|
||||
mock_template("compose_banner/compose_banner.hbs", false, (data) => {
|
||||
assert.equal(data.classname, compose_banner.CLASSNAMES.topic_missing);
|
||||
assert.equal(data.banner_text, compose_validate.TOPICS_REQUIRED_ERROR_MESSAGE);
|
||||
missing_topic_error_rendered = true;
|
||||
return "<banner-stub>";
|
||||
});
|
||||
@@ -412,6 +411,7 @@ test_ui("validate_stream_message", ({override, override_rewire, mock_template})
|
||||
name: "special",
|
||||
subscribed: true,
|
||||
can_send_message_group: everyone.id,
|
||||
topics_policy: "inherit",
|
||||
};
|
||||
stream_data.add_sub(special_sub);
|
||||
|
||||
|
||||
@@ -54,6 +54,7 @@ exports.test_streams = {
|
||||
is_web_public: false,
|
||||
message_retention_days: null,
|
||||
stream_post_policy: 1,
|
||||
topics_policy: "inherit",
|
||||
can_administer_channel_group: 2,
|
||||
can_send_message_group: 2,
|
||||
can_remove_subscribers_group: 2,
|
||||
@@ -74,6 +75,7 @@ exports.test_streams = {
|
||||
is_announcement_only: false,
|
||||
message_retention_days: null,
|
||||
stream_post_policy: 1,
|
||||
topics_policy: "inherit",
|
||||
can_administer_channel_group: 2,
|
||||
can_send_message_group: 2,
|
||||
can_remove_subscribers_group: 2,
|
||||
|
||||
@@ -800,7 +800,7 @@ run_test("narrow_to_compose_target streams", ({override, override_rewire}) => {
|
||||
|
||||
compose_state.set_message_type("stream");
|
||||
const rome_id = 99;
|
||||
stream_data.add_sub({name: "ROME", stream_id: rome_id});
|
||||
stream_data.add_sub({name: "ROME", stream_id: rome_id, topics_policy: "inherit"});
|
||||
compose_state.set_stream_id(99);
|
||||
|
||||
// Test with existing topic
|
||||
|
||||
@@ -205,11 +205,6 @@ test_realm_group_settings(
|
||||
settings_data.can_subscribe_others_to_all_accessible_streams,
|
||||
);
|
||||
|
||||
test_realm_group_settings(
|
||||
"realm_can_set_topics_policy_group",
|
||||
settings_data.user_can_set_topics_policy,
|
||||
);
|
||||
|
||||
test_realm_group_settings(
|
||||
"realm_can_delete_any_message_group",
|
||||
settings_data.user_can_delete_any_message,
|
||||
|
||||
@@ -829,6 +829,7 @@ test("stream_settings", ({override}) => {
|
||||
history_public_to_subscribers: false,
|
||||
});
|
||||
stream_data.update_message_retention_setting(sub, -1);
|
||||
stream_data.update_topics_policy_setting(sub, "allow_topics_policy");
|
||||
stream_data.update_stream_permission_group_setting(
|
||||
"can_remove_subscribers_group",
|
||||
sub,
|
||||
@@ -843,6 +844,7 @@ test("stream_settings", ({override}) => {
|
||||
assert.equal(sub.invite_only, false);
|
||||
assert.equal(sub.history_public_to_subscribers, false);
|
||||
assert.equal(sub.message_retention_days, -1);
|
||||
assert.equal(sub.topics_policy, "allow_topics_policy");
|
||||
assert.equal(sub.can_remove_subscribers_group, moderators_group.id);
|
||||
assert.equal(sub.can_administer_channel_group, moderators_group.id);
|
||||
assert.equal(sub.folder_id, 3);
|
||||
@@ -1649,6 +1651,41 @@ test("can_subscribe_others", ({override}) => {
|
||||
assert.equal(stream_data.can_subscribe_others(sub), false);
|
||||
});
|
||||
|
||||
test("user_can_set_topics_policy", ({override}) => {
|
||||
const sub = {
|
||||
name: "Denmark",
|
||||
subscribed: true,
|
||||
color: "red",
|
||||
stream_id: 1,
|
||||
can_add_subscribers_group: admins_group.id,
|
||||
can_administer_channel_group: nobody_group.id,
|
||||
can_remove_subscribers_group: admins_group.id,
|
||||
};
|
||||
stream_data.add_sub(sub);
|
||||
|
||||
override(realm, "realm_can_set_topics_policy_group", nobody_group.id);
|
||||
// Admins can always change per-channel topics policy.
|
||||
initialize_and_override_current_user(admin_user_id, override);
|
||||
override(current_user, "is_admin", true);
|
||||
assert.equal(stream_data.user_can_set_topics_policy(sub), true);
|
||||
|
||||
initialize_and_override_current_user(moderator_user_id, override);
|
||||
override(current_user, "is_admin", false);
|
||||
assert.equal(stream_data.user_can_set_topics_policy(sub), false);
|
||||
|
||||
// Not allowed as user not in can_administer_channel_group.
|
||||
override(realm, "realm_can_set_topics_policy_group", everyone_group.id);
|
||||
assert.equal(stream_data.user_can_set_topics_policy(sub), false);
|
||||
|
||||
sub.can_administer_channel_group = moderators_group.id;
|
||||
assert.equal(stream_data.user_can_set_topics_policy(sub), true);
|
||||
|
||||
// Only realm_can_set_topics_policy_group is checked if sub is not provided.
|
||||
assert.equal(stream_data.user_can_set_topics_policy(), true);
|
||||
override(realm, "realm_can_set_topics_policy_group", nobody_group.id);
|
||||
assert.equal(stream_data.user_can_set_topics_policy(sub), false);
|
||||
});
|
||||
|
||||
test("options for dropdown widget", () => {
|
||||
const denmark = {
|
||||
subscribed: true,
|
||||
|
||||
@@ -278,6 +278,19 @@ test("update_property", ({override}) => {
|
||||
assert.equal(args.val, 20);
|
||||
}
|
||||
|
||||
// Test stream topics_policy change event
|
||||
{
|
||||
const stub = make_stub();
|
||||
override(stream_settings_ui, "update_topics_policy_setting", stub.f);
|
||||
override(compose_recipient, "update_topic_inputbox_on_topics_policy_change", noop);
|
||||
override(compose_recipient, "update_compose_area_placeholder_text", noop);
|
||||
stream_events.update_property(stream_id, "topics_policy", "allow_topics_policy");
|
||||
assert.equal(stub.num_calls, 1);
|
||||
const args = stub.get_args("sub", "val");
|
||||
assert.equal(args.sub.stream_id, stream_id);
|
||||
assert.equal(args.val, "allow_topics_policy");
|
||||
}
|
||||
|
||||
// Test stream can_remove_subscribers_group change event
|
||||
{
|
||||
const stub = make_stub();
|
||||
|
||||
Reference in New Issue
Block a user