mirror of https://github.com/zulip/zulip.git
stream_data: Refactored function to return sub and can_sub streams.
This commit refactors the 'get_subscribed_streams_for_user' function to return an object with two keys: one for the subscribed streams and another for the streams the user can subscribe to. The node tests have been updated accordingly. Renamed 'get_subscribed_streams_for_user' to 'get_streams_for_user'.
This commit is contained in:
parent
94fe762ea5
commit
8198a04ce8
|
@ -388,11 +388,15 @@ export function muted_stream_ids(): number[] {
|
||||||
.map((sub) => sub.stream_id);
|
.map((sub) => sub.stream_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function get_subscribed_streams_for_user(user_id: number): StreamSubscription[] {
|
export function get_streams_for_user(user_id: number): {
|
||||||
|
subscribed: StreamSubscription[];
|
||||||
|
can_subscribe: StreamSubscription[];
|
||||||
|
} {
|
||||||
// Note that we only have access to subscribers of some streams
|
// Note that we only have access to subscribers of some streams
|
||||||
// depending on our role.
|
// depending on our role.
|
||||||
const all_subs = get_unsorted_subs();
|
const all_subs = get_unsorted_subs();
|
||||||
const subscribed_subs = [];
|
const subscribed_subs = [];
|
||||||
|
const can_subscribe_subs = [];
|
||||||
for (const sub of all_subs) {
|
for (const sub of all_subs) {
|
||||||
if (!can_view_subscribers(sub)) {
|
if (!can_view_subscribers(sub)) {
|
||||||
// Private streams that we have been removed from appear
|
// Private streams that we have been removed from appear
|
||||||
|
@ -402,10 +406,15 @@ export function get_subscribed_streams_for_user(user_id: number): StreamSubscrip
|
||||||
}
|
}
|
||||||
if (is_user_subscribed(sub.stream_id, user_id)) {
|
if (is_user_subscribed(sub.stream_id, user_id)) {
|
||||||
subscribed_subs.push(sub);
|
subscribed_subs.push(sub);
|
||||||
|
} else if (can_subscribe_others(sub)) {
|
||||||
|
can_subscribe_subs.push(sub);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return subscribed_subs;
|
return {
|
||||||
|
subscribed: subscribed_subs,
|
||||||
|
can_subscribe: can_subscribe_subs,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export function get_invite_stream_data(): InviteStreamData[] {
|
export function get_invite_stream_data(): InviteStreamData[] {
|
||||||
|
|
|
@ -197,7 +197,7 @@ export function show_user_profile(user, default_tab_key = "profile-tab") {
|
||||||
const profile_data = page_params.custom_profile_fields
|
const profile_data = page_params.custom_profile_fields
|
||||||
.map((f) => get_custom_profile_field_data(user, f, field_types))
|
.map((f) => get_custom_profile_field_data(user, f, field_types))
|
||||||
.filter((f) => f.name !== undefined);
|
.filter((f) => f.name !== undefined);
|
||||||
const user_streams = stream_data.get_subscribed_streams_for_user(user.user_id);
|
const user_streams = stream_data.get_streams_for_user(user.user_id).subscribed;
|
||||||
const groups_of_user = user_groups.get_user_groups_of_user(user.user_id);
|
const groups_of_user = user_groups.get_user_groups_of_user(user.user_id);
|
||||||
const args = {
|
const args = {
|
||||||
user_id: user.user_id,
|
user_id: user.user_id,
|
||||||
|
|
|
@ -201,7 +201,7 @@ test("basics", () => {
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("get_subscribed_streams_for_user", () => {
|
test("get_streams_for_user", () => {
|
||||||
const denmark = {
|
const denmark = {
|
||||||
subscribed: true,
|
subscribed: true,
|
||||||
color: "blue",
|
color: "blue",
|
||||||
|
@ -227,7 +227,16 @@ test("get_subscribed_streams_for_user", () => {
|
||||||
is_muted: true,
|
is_muted: true,
|
||||||
invite_only: true,
|
invite_only: true,
|
||||||
};
|
};
|
||||||
const subs = [denmark, social, test];
|
const world = {
|
||||||
|
color: "blue",
|
||||||
|
name: "world",
|
||||||
|
stream_id: 4,
|
||||||
|
is_muted: false,
|
||||||
|
invite_only: false,
|
||||||
|
history_public_to_subscribers: false,
|
||||||
|
stream_post_policy: stream_data.stream_post_policy_values.admins.code,
|
||||||
|
};
|
||||||
|
const subs = [denmark, social, test, world];
|
||||||
for (const sub of subs) {
|
for (const sub of subs) {
|
||||||
stream_data.add_sub(sub);
|
stream_data.add_sub(sub);
|
||||||
}
|
}
|
||||||
|
@ -235,6 +244,7 @@ test("get_subscribed_streams_for_user", () => {
|
||||||
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]);
|
||||||
|
|
||||||
// test_user is subscribed to all three streams, but current user (me)
|
// test_user is subscribed to all three streams, but current user (me)
|
||||||
// gets only two because of subscriber visibility policy of stream:
|
// gets only two because of subscriber visibility policy of stream:
|
||||||
|
@ -243,10 +253,15 @@ test("get_subscribed_streams_for_user", () => {
|
||||||
// user is a guest.
|
// user is a guest.
|
||||||
// #test: current user is no longer subscribed to a private stream, so
|
// #test: current user is no longer subscribed to a private stream, so
|
||||||
// he can not see whether test_user is subscribed to it.
|
// he can not see whether test_user is subscribed to it.
|
||||||
assert.deepEqual(stream_data.get_subscribed_streams_for_user(test_user.user_id), [
|
assert.deepEqual(stream_data.get_streams_for_user(test_user.user_id).subscribed, [
|
||||||
denmark,
|
denmark,
|
||||||
social,
|
social,
|
||||||
]);
|
]);
|
||||||
|
assert.deepEqual(stream_data.get_streams_for_user(test_user.user_id).can_subscribe, []);
|
||||||
|
// Verify can subscribe if we're an administrator.
|
||||||
|
page_params.is_admin = true;
|
||||||
|
assert.deepEqual(stream_data.get_streams_for_user(test_user.user_id).can_subscribe, [world]);
|
||||||
|
page_params.is_admin = false;
|
||||||
});
|
});
|
||||||
|
|
||||||
test("renames", () => {
|
test("renames", () => {
|
||||||
|
|
Loading…
Reference in New Issue