channels: Include unsubscribed channels in move selectors.

For channel dropdowns in move messages and move topic modals
only subscribed channels are included.

To fix it, a new function is made to include subscribed
and unsubscribed channels to which the acting user has
content access. Each group is sorted respectively with
subscribed channels followed by unsubscribed channels.

To avoid unsubscribed channels from getting included in the
compose box dropdown and saved snippets UI, a separate function
get_stream_for_move_messages_widget is made. This function
is used to include unsubscribed channels in move selector
dropdown only.

Fixes #33670.
This commit is contained in:
kash2104
2025-03-07 10:02:23 +05:30
committed by Tim Abbott
parent 354a16fb0a
commit 2320a8917e
3 changed files with 207 additions and 1 deletions

View File

@@ -139,6 +139,9 @@ test("basics", () => {
is_muted: true,
invite_only: true,
history_public_to_subscribers: true,
can_add_subscribers_group: admins_group.id,
can_administer_channel_group: admins_group.id,
can_subscribe_group: admins_group.id,
};
const social = {
subscribed: true,
@@ -148,6 +151,9 @@ test("basics", () => {
is_muted: false,
invite_only: true,
history_public_to_subscribers: false,
can_add_subscribers_group: admins_group.id,
can_administer_channel_group: admins_group.id,
can_subscribe_group: admins_group.id,
};
const test = {
subscribed: true,
@@ -156,6 +162,9 @@ test("basics", () => {
stream_id: 3,
is_muted: true,
invite_only: false,
can_add_subscribers_group: admins_group.id,
can_administer_channel_group: admins_group.id,
can_subscribe_group: admins_group.id,
};
const web_public_stream = {
subscribed: false,
@@ -166,6 +175,9 @@ test("basics", () => {
invite_only: false,
history_public_to_subscribers: true,
is_web_public: true,
can_add_subscribers_group: admins_group.id,
can_administer_channel_group: admins_group.id,
can_subscribe_group: admins_group.id,
};
stream_data.add_sub(denmark);
stream_data.add_sub(social);
@@ -249,6 +261,14 @@ test("basics", () => {
const stream_starting_with_25 = {
name: "25-or-6-to-4",
stream_id: 400,
can_add_subscribers_group: admins_group.id,
can_administer_channel_group: admins_group.id,
can_subscribe_group: admins_group.id,
subscribed: false,
is_muted: false,
invite_only: false,
history_public_to_subscribers: true,
is_web_public: false,
};
stream_data.add_sub(stream_starting_with_25);
assert.equal(stream_data.slug_to_stream_id("25-or-6-to-4"), 400);
@@ -263,6 +283,9 @@ test("basics", () => {
const stream_99 = {
name: "99",
stream_id: 401,
can_add_subscribers_group: admins_group.id,
can_administer_channel_group: admins_group.id,
can_subscribe_group: admins_group.id,
};
stream_data.add_sub(stream_99);
assert.equal(stream_data.slug_to_stream_id("99"), 401);
@@ -272,6 +295,9 @@ test("basics", () => {
const stream_id_99 = {
name: "Some Stream",
stream_id: 99,
can_add_subscribers_group: admins_group.id,
can_administer_channel_group: admins_group.id,
can_subscribe_group: admins_group.id,
};
stream_data.add_sub(stream_id_99);
assert.equal(stream_data.slug_to_stream_id("99"), 99);
@@ -293,6 +319,9 @@ test("basics", () => {
name: "social",
stream_id: 2,
subscribed: true,
can_add_subscribers_group: admins_group.id,
can_administer_channel_group: admins_group.id,
can_subscribe_group: admins_group.id,
},
unique_id: 2,
},
@@ -305,11 +334,103 @@ test("basics", () => {
name: "test",
stream_id: 3,
subscribed: true,
can_add_subscribers_group: admins_group.id,
can_administer_channel_group: admins_group.id,
can_subscribe_group: admins_group.id,
},
unique_id: 3,
},
]);
assert.deepEqual(stream_data.get_streams_for_move_messages_widget(), [
{
name: "social",
stream: {
color: "red",
history_public_to_subscribers: false,
invite_only: true,
is_muted: false,
name: "social",
stream_id: 2,
subscribed: true,
can_add_subscribers_group: admins_group.id,
can_administer_channel_group: admins_group.id,
can_subscribe_group: admins_group.id,
},
unique_id: 2,
},
{
name: "test",
stream: {
color: "yellow",
invite_only: false,
is_muted: true,
name: "test",
stream_id: 3,
subscribed: true,
can_add_subscribers_group: admins_group.id,
can_administer_channel_group: admins_group.id,
can_subscribe_group: admins_group.id,
},
unique_id: 3,
},
{
name: "25-or-6-to-4",
stream: {
history_public_to_subscribers: true,
invite_only: false,
is_muted: false,
is_web_public: false,
name: "25-or-6-to-4",
stream_id: 400,
subscribed: false,
can_add_subscribers_group: admins_group.id,
can_administer_channel_group: admins_group.id,
can_subscribe_group: admins_group.id,
},
unique_id: 400,
},
{
name: "web_public_stream",
stream: {
name: "web_public_stream",
stream_id: 4,
can_add_subscribers_group: admins_group.id,
can_administer_channel_group: admins_group.id,
can_subscribe_group: admins_group.id,
color: "yellow",
history_public_to_subscribers: true,
invite_only: false,
is_muted: false,
is_web_public: true,
subscribed: false,
},
unique_id: 4,
},
{
name: "99",
stream: {
name: "99",
stream_id: 401,
can_add_subscribers_group: admins_group.id,
can_administer_channel_group: admins_group.id,
can_subscribe_group: admins_group.id,
},
unique_id: 401,
},
{
name: "Some Stream",
stream: {
name: "Some Stream",
stream_id: 99,
can_add_subscribers_group: admins_group.id,
can_administer_channel_group: admins_group.id,
can_subscribe_group: admins_group.id,
},
unique_id: 99,
},
]);
test.is_archived = true;
assert.deepEqual(stream_data.get_options_for_dropdown_widget(), [
{
@@ -322,10 +443,77 @@ test("basics", () => {
name: "social",
stream_id: 2,
subscribed: true,
can_add_subscribers_group: admins_group.id,
can_administer_channel_group: admins_group.id,
can_subscribe_group: admins_group.id,
},
unique_id: 2,
},
]);
social.invite_only = true;
social.can_subscribe_group = me_group.id;
social.subscribed = false;
stream_starting_with_25.invite_only = true;
assert.deepEqual(stream_data.get_streams_for_move_messages_widget(), [
{
name: "social",
stream: {
color: "red",
history_public_to_subscribers: false,
invite_only: true,
is_muted: false,
name: "social",
stream_id: 2,
subscribed: false,
can_add_subscribers_group: admins_group.id,
can_administer_channel_group: admins_group.id,
can_subscribe_group: me_group.id,
},
unique_id: 2,
},
{
name: "web_public_stream",
stream: {
color: "yellow",
history_public_to_subscribers: true,
invite_only: false,
is_muted: false,
is_web_public: true,
name: "web_public_stream",
stream_id: 4,
subscribed: false,
can_add_subscribers_group: admins_group.id,
can_administer_channel_group: admins_group.id,
can_subscribe_group: admins_group.id,
},
unique_id: 4,
},
{
name: "99",
stream: {
name: "99",
stream_id: 401,
can_add_subscribers_group: admins_group.id,
can_administer_channel_group: admins_group.id,
can_subscribe_group: admins_group.id,
},
unique_id: 401,
},
{
name: "Some Stream",
stream: {
name: "Some Stream",
stream_id: 99,
can_add_subscribers_group: admins_group.id,
can_administer_channel_group: admins_group.id,
can_subscribe_group: admins_group.id,
},
unique_id: 99,
},
]);
});
test("get_streams_for_user", ({override}) => {