compose: Use stream id instead of stream name for composebox opts.

This commit is contained in:
evykassirer
2023-06-26 16:40:25 -07:00
committed by Tim Abbott
parent 41b900c2c0
commit c3fe96af52
30 changed files with 196 additions and 168 deletions

View File

@@ -119,7 +119,10 @@ export function complete_starting_tasks(msg_type, opts) {
maybe_scroll_up_selected_message(); maybe_scroll_up_selected_message();
compose_fade.start_compose(msg_type); compose_fade.start_compose(msg_type);
stream_bar.decorate(opts.stream, $("#stream_message_recipient_topic .message_header_stream")); stream_bar.decorate(
opts.stream_id,
$("#stream_message_recipient_topic .message_header_stream"),
);
$(document).trigger(new $.Event("compose_started.zulip", opts)); $(document).trigger(new $.Event("compose_started.zulip", opts));
compose_recipient.update_placeholder_text(); compose_recipient.update_placeholder_text();
compose_recipient.update_narrow_to_recipient_visibility(); compose_recipient.update_narrow_to_recipient_visibility();
@@ -153,7 +156,7 @@ export function maybe_scroll_up_selected_message() {
function fill_in_opts_from_current_narrowed_view(msg_type, opts) { function fill_in_opts_from_current_narrowed_view(msg_type, opts) {
return { return {
message_type: msg_type, message_type: msg_type,
stream: "", stream_id: "",
topic: "", topic: "",
private_message_recipient: "", private_message_recipient: "",
trigger: "unknown", trigger: "unknown",
@@ -171,7 +174,7 @@ function same_recipient_as_before(msg_type, opts) {
return ( return (
compose_state.get_message_type() === msg_type && compose_state.get_message_type() === msg_type &&
((msg_type === "stream" && ((msg_type === "stream" &&
opts.stream === compose_state.stream_name() && opts.stream_id === compose_state.stream_id() &&
opts.topic === compose_state.topic()) || opts.topic === compose_state.topic()) ||
(msg_type === "private" && (msg_type === "private" &&
opts.private_message_recipient === compose_state.private_message_recipient())) opts.private_message_recipient === compose_state.private_message_recipient()))
@@ -216,7 +219,7 @@ export function start(msg_type, opts) {
(opts.trigger === "new topic button" || (opts.trigger === "new topic button" ||
(opts.trigger === "compose_hotkey" && msg_type === "stream")) (opts.trigger === "compose_hotkey" && msg_type === "stream"))
) { ) {
opts.stream = subbed_streams[0].name; opts.stream_id = subbed_streams[0].stream_id;
} }
if (compose_state.composing() && !same_recipient_as_before(msg_type, opts)) { if (compose_state.composing() && !same_recipient_as_before(msg_type, opts)) {
@@ -227,12 +230,12 @@ export function start(msg_type, opts) {
const $stream_header_colorblock = $( const $stream_header_colorblock = $(
"#compose_select_recipient_widget_wrapper .stream_header_colorblock", "#compose_select_recipient_widget_wrapper .stream_header_colorblock",
); );
stream_bar.decorate(opts.stream, $stream_header_colorblock); stream_bar.decorate(opts.stream_id, $stream_header_colorblock);
if (msg_type === "private") { if (msg_type === "private") {
compose_state.set_compose_recipient_id(compose_recipient.DIRECT_MESSAGE_ID); compose_state.set_compose_recipient_id(compose_recipient.DIRECT_MESSAGE_ID);
} else if (opts.stream) { } else if (opts.stream_id) {
compose_state.set_stream_name(opts.stream); compose_state.set_stream_id(opts.stream_id);
} else { } else {
// Open stream selection dropdown if no stream is selected. // Open stream selection dropdown if no stream is selected.
compose_recipient.open_compose_recipient_dropdown(); compose_recipient.open_compose_recipient_dropdown();
@@ -361,11 +364,11 @@ export function respond_to_message(opts) {
msg_type = message.type; msg_type = message.type;
} }
let stream = ""; let stream_id = "";
let topic = ""; let topic = "";
let pm_recipient = ""; let pm_recipient = "";
if (msg_type === "stream") { if (msg_type === "stream") {
stream = message.stream; stream_id = message.stream_id;
topic = message.topic; topic = message.topic;
} else { } else {
pm_recipient = message.reply_to; pm_recipient = message.reply_to;
@@ -380,7 +383,7 @@ export function respond_to_message(opts) {
} }
start(msg_type, { start(msg_type, {
stream, stream_id,
topic, topic,
private_message_recipient: pm_recipient, private_message_recipient: pm_recipient,
trigger: opts.trigger, trigger: opts.trigger,

View File

@@ -153,7 +153,7 @@ function switch_message_type(message_type) {
const opts = { const opts = {
message_type, message_type,
stream: compose_state.stream_name(), stream_id: compose_state.stream_id(),
topic: compose_state.topic(), topic: compose_state.topic(),
private_message_recipient: compose_state.private_message_recipient(), private_message_recipient: compose_state.private_message_recipient(),
}; };
@@ -162,8 +162,8 @@ function switch_message_type(message_type) {
compose_ui.set_focus(message_type, opts); compose_ui.set_focus(message_type, opts);
} }
function update_recipient_label(stream_name) { function update_recipient_label(stream_id) {
const stream = stream_data.get_sub_by_name(stream_name); const stream = stream_data.get_sub_by_id(stream_id);
if (stream === undefined) { if (stream === undefined) {
$("#compose_select_recipient_widget .dropdown_widget_value").text( $("#compose_select_recipient_widget .dropdown_widget_value").text(
$t({defaultMessage: "Select a stream"}), $t({defaultMessage: "Select a stream"}),
@@ -182,7 +182,7 @@ export function update_compose_for_message_type(message_type, opts) {
$("#stream_toggle").addClass("active"); $("#stream_toggle").addClass("active");
$("#private_message_toggle").removeClass("active"); $("#private_message_toggle").removeClass("active");
$("#compose-recipient").removeClass("compose-recipient-direct-selected"); $("#compose-recipient").removeClass("compose-recipient-direct-selected");
update_recipient_label(opts.stream); update_recipient_label(opts.stream_id);
} else { } else {
$("#compose-direct-recipient").show(); $("#compose-direct-recipient").show();
$("#stream_message_recipient_topic").hide(); $("#stream_message_recipient_topic").hide();
@@ -220,9 +220,9 @@ export function on_compose_select_recipient_update() {
const $stream_header_colorblock = $( const $stream_header_colorblock = $(
"#compose_select_recipient_widget_wrapper .stream_header_colorblock", "#compose_select_recipient_widget_wrapper .stream_header_colorblock",
); );
const stream_name = compose_state.stream_name(); const stream_id = compose_state.stream_id();
update_recipient_label(stream_name); update_recipient_label(stream_id);
stream_bar.decorate(stream_name, $stream_header_colorblock); stream_bar.decorate(stream_id, $stream_header_colorblock);
} }
check_posting_policy_for_compose_box(); check_posting_policy_for_compose_box();
@@ -351,7 +351,7 @@ export function update_placeholder_text() {
const opts = { const opts = {
message_type: compose_state.get_message_type(), message_type: compose_state.get_message_type(),
stream: compose_state.stream_name(), stream_id: compose_state.stream_id(),
topic: compose_state.topic(), topic: compose_state.topic(),
// TODO: to remove a circular import, direct message recipient needs // TODO: to remove a circular import, direct message recipient needs
// to be calculated in compose_state instead of compose_pm_pill. // to be calculated in compose_state instead of compose_pm_pill.

View File

@@ -1,9 +1,7 @@
import $ from "jquery"; import $ from "jquery";
import * as blueslip from "./blueslip";
import * as compose_pm_pill from "./compose_pm_pill"; import * as compose_pm_pill from "./compose_pm_pill";
import * as compose_recipient from "./compose_recipient"; import * as compose_recipient from "./compose_recipient";
import * as stream_data from "./stream_data";
import * as sub_store from "./sub_store"; import * as sub_store from "./sub_store";
let message_type = false; // 'stream', 'private', or false-y let message_type = false; // 'stream', 'private', or false-y
@@ -88,20 +86,7 @@ export function stream_name() {
return ""; return "";
} }
export function set_stream_name(stream_name) { export function set_stream_id(stream_id) {
if (!stream_name) {
compose_recipient.set_selected_recipient_id("");
return;
}
// If we fail to select a stream that the caller expects
// us to do successfully, we should throw an error.
const stream_id = stream_data.get_stream_id(stream_name);
if (stream_id === undefined) {
blueslip.error("Unable to select stream: " + stream_name);
compose_recipient.set_selected_recipient_id("");
return;
}
compose_recipient.set_selected_recipient_id(stream_id); compose_recipient.set_selected_recipient_id(stream_id);
} }

View File

@@ -11,6 +11,7 @@ import * as loading from "./loading";
import * as people from "./people"; import * as people from "./people";
import * as popover_menus from "./popover_menus"; import * as popover_menus from "./popover_menus";
import * as rtl from "./rtl"; import * as rtl from "./rtl";
import * as stream_data from "./stream_data";
import * as user_status from "./user_status"; import * as user_status from "./user_status";
export let compose_spinner_visible = false; export let compose_spinner_visible = false;
@@ -35,10 +36,10 @@ export function autosize_textarea($textarea) {
function get_focus_area(msg_type, opts) { function get_focus_area(msg_type, opts) {
// Set focus to "Topic" when narrowed to a stream+topic and "New topic" button clicked. // Set focus to "Topic" when narrowed to a stream+topic and "New topic" button clicked.
if (msg_type === "stream" && opts.stream && !opts.topic) { if (msg_type === "stream" && opts.stream_id && !opts.topic) {
return "#stream_message_recipient_topic"; return "#stream_message_recipient_topic";
} else if ( } else if (
(msg_type === "stream" && opts.stream) || (msg_type === "stream" && opts.stream_id) ||
(msg_type === "private" && opts.private_message_recipient) (msg_type === "private" && opts.private_message_recipient)
) { ) {
if (opts.trigger === "new topic button") { if (opts.trigger === "new topic button") {
@@ -224,13 +225,16 @@ export function compute_placeholder_text(opts) {
// because the caller is expected to insert this into the // because the caller is expected to insert this into the
// placeholder field in a way that does HTML escaping. // placeholder field in a way that does HTML escaping.
if (opts.message_type === "stream") { if (opts.message_type === "stream") {
if (opts.topic) { const stream = stream_data.get_sub_by_id(opts.stream_id);
const stream_name = stream ? stream.name : "";
if (stream_name && opts.topic) {
return $t( return $t(
{defaultMessage: "Message #{stream_name} > {topic_name}"}, {defaultMessage: "Message #{stream_name} > {topic_name}"},
{stream_name: opts.stream, topic_name: opts.topic}, {stream_name, topic_name: opts.topic},
); );
} else if (opts.stream) { } else if (stream_name) {
return $t({defaultMessage: "Message #{stream_name}"}, {stream_name: opts.stream}); return $t({defaultMessage: "Message #{stream_name}"}, {stream_name});
} }
} }

View File

@@ -436,7 +436,7 @@ export function get_pm_people(query) {
const opts = { const opts = {
want_broadcast: false, want_broadcast: false,
filter_pills: true, filter_pills: true,
stream: compose_state.stream_name(), stream_id: compose_state.stream_id(),
topic: compose_state.topic(), topic: compose_state.topic(),
}; };
return get_person_suggestions(query, opts); return get_person_suggestions(query, opts);
@@ -509,7 +509,7 @@ export function get_person_suggestions(query, opts) {
return typeahead_helper.sort_recipients({ return typeahead_helper.sort_recipients({
users: filtered_persons, users: filtered_persons,
query, query,
current_stream: opts.stream, current_stream_id: opts.stream_id,
current_topic: opts.topic, current_topic: opts.topic,
groups: filtered_groups, groups: filtered_groups,
max_num_items, max_num_items,
@@ -520,14 +520,14 @@ export function get_stream_topic_data(hacky_this) {
const opts = {}; const opts = {};
const $message_row = hacky_this.$element.closest(".message_row"); const $message_row = hacky_this.$element.closest(".message_row");
if ($message_row.length === 1) { if ($message_row.length === 1) {
// we are editing a message so we try to use it's keys. // we are editing a message so we try to use its keys.
const msg = message_store.get(rows.id($message_row)); const msg = message_store.get(rows.id($message_row));
if (msg.type === "stream") { if (msg.type === "stream") {
opts.stream = msg.stream; opts.stream_id = msg.stream_id;
opts.topic = msg.topic; opts.topic = msg.topic;
} }
} else { } else {
opts.stream = compose_state.stream_name(); opts.stream_id = compose_state.stream_id();
opts.topic = compose_state.topic(); opts.topic = compose_state.topic();
} }
return opts; return opts;

View File

@@ -360,9 +360,14 @@ export function format_draft(draft) {
draft_model.editDraft(id, draft); draft_model.editDraft(id, draft);
} }
} }
} else {
const sub = stream_data.get_sub(stream_name);
if (sub !== undefined) {
draft.stream_id = sub.stream_id;
}
} }
const draft_topic = draft.topic || compose.empty_topic_placeholder(); const draft_topic = draft.topic || compose.empty_topic_placeholder();
const draft_stream_color = stream_data.get_color(stream_name); const draft_stream_color = stream_data.get_color(draft.stream_id);
formatted = { formatted = {
draft_id: draft.id, draft_id: draft.id,

View File

@@ -187,7 +187,7 @@ function populate_group_from_message_container(group, message_container) {
group.is_private = message_container.msg.is_private; group.is_private = message_container.msg.is_private;
if (group.is_stream) { if (group.is_stream) {
const color = stream_data.get_color(message_container.msg.stream); const color = stream_data.get_color(message_container.msg.stream_id);
group.recipient_bar_color = stream_color.get_recipient_bar_color(color); group.recipient_bar_color = stream_color.get_recipient_bar_color(color);
group.stream_privacy_icon_color = stream_color.get_stream_privacy_icon_color(color); group.stream_privacy_icon_color = stream_color.get_stream_privacy_icon_color(color);
group.invite_only = stream_data.is_invite_only_by_stream_name(message_container.msg.stream); group.invite_only = stream_data.is_invite_only_by_stream_name(message_container.msg.stream);
@@ -409,7 +409,7 @@ export class MessageListView {
message_container.small_avatar_url = people.small_avatar_url(message_container.msg); message_container.small_avatar_url = people.small_avatar_url(message_container.msg);
if (message_container.msg.stream) { if (message_container.msg.stream) {
message_container.background_color = stream_data.get_color( message_container.background_color = stream_data.get_color(
message_container.msg.stream, message_container.msg.stream_id,
); );
} }

View File

@@ -93,7 +93,7 @@ export function set_compose_defaults() {
// So we look up the resolved stream and return that if appropriate. // So we look up the resolved stream and return that if appropriate.
const sub = stream_sub(); const sub = stream_sub();
if (sub !== undefined) { if (sub !== undefined) {
opts.stream = sub.name; opts.stream_id = sub.stream_id;
} }
} }

View File

@@ -112,7 +112,7 @@ export function set_up($input, pills, opts) {
return typeahead_helper.sort_recipients({ return typeahead_helper.sort_recipients({
users, users,
query, query,
current_stream: "", current_stream_id: "",
current_topic: undefined, current_topic: undefined,
groups, groups,
max_num_items: undefined, max_num_items: undefined,

View File

@@ -70,7 +70,7 @@ function format(scheduled_messages) {
msg_render_context.stream_name = sub_store.maybe_get_stream_name( msg_render_context.stream_name = sub_store.maybe_get_stream_name(
msg_render_context.stream_id, msg_render_context.stream_id,
); );
const color = stream_data.get_color(msg_render_context.stream_name); const color = stream_data.get_color(msg_render_context.stream_id);
msg_render_context.recipient_bar_color = stream_color.get_recipient_bar_color(color); msg_render_context.recipient_bar_color = stream_color.get_recipient_bar_color(color);
msg_render_context.stream_privacy_icon_color = msg_render_context.stream_privacy_icon_color =
stream_color.get_stream_privacy_icon_color(color); stream_color.get_stream_privacy_icon_color(color);

View File

@@ -4,10 +4,10 @@ import * as stream_data from "./stream_data";
// color look like the stream being used. // color look like the stream being used.
// (In particular, if there's a color associated with it, // (In particular, if there's a color associated with it,
// have that color be reflected here too.) // have that color be reflected here too.)
export function decorate(stream_name, $element) { export function decorate(stream_id, $element) {
if (stream_name === undefined) { if (stream_id === undefined) {
return; return;
} }
const color = stream_data.get_color(stream_name); const color = stream_data.get_color(stream_id);
$element.css("background-color", color); $element.css("background-color", color);
} }

View File

@@ -11,18 +11,16 @@ import * as row from "./rows";
import * as settings_data from "./settings_data"; import * as settings_data from "./settings_data";
import * as stream_data from "./stream_data"; import * as stream_data from "./stream_data";
import * as stream_settings_ui from "./stream_settings_ui"; import * as stream_settings_ui from "./stream_settings_ui";
import * as sub_store from "./sub_store";
extend([lchPlugin, mixPlugin]); extend([lchPlugin, mixPlugin]);
export function update_stream_recipient_color($stream_header) { export function update_stream_recipient_color($stream_header) {
if ($stream_header.length) { if ($stream_header.length) {
const stream_id = Number.parseInt($($stream_header).attr("data-stream-id"), 10); const stream_id = Number.parseInt($($stream_header).attr("data-stream-id"), 10);
const stream_name = sub_store.maybe_get_stream_name(stream_id); if (!stream_id) {
if (!stream_name) {
return; return;
} }
const stream_color = stream_data.get_color(stream_name); const stream_color = stream_data.get_color(stream_id);
const recipient_bar_color = get_recipient_bar_color(stream_color); const recipient_bar_color = get_recipient_bar_color(stream_color);
$stream_header $stream_header
.find(".message-header-contents") .find(".message-header-contents")

View File

@@ -453,8 +453,8 @@ export function canonicalized_name(stream_name) {
return stream_name.toString().toLowerCase(); return stream_name.toString().toLowerCase();
} }
export function get_color(stream_name) { export function get_color(stream_id) {
const sub = get_sub(stream_name); const sub = get_sub_by_id(stream_id);
if (sub === undefined) { if (sub === undefined) {
return DEFAULT_COLOR; return DEFAULT_COLOR;
} }

View File

@@ -135,7 +135,7 @@ function show_subscription_settings(sub) {
const $edit_container = stream_settings_containers.get_edit_container(sub); const $edit_container = stream_settings_containers.get_edit_container(sub);
const $colorpicker = $edit_container.find(".colorpicker"); const $colorpicker = $edit_container.find(".colorpicker");
const color = stream_data.get_color(sub.name); const color = stream_data.get_color(sub.stream_id);
stream_color.set_colorpicker_color($colorpicker, color); stream_color.set_colorpicker_color($colorpicker, color);
stream_ui_updates.update_add_subscriptions_elements(sub); stream_ui_updates.update_add_subscriptions_elements(sub);

View File

@@ -334,11 +334,9 @@ export function build_move_topic_to_stream_popover(
} }
function render_selected_stream() { function render_selected_stream() {
const stream_name = sub_store.maybe_get_stream_name( const stream_id = Number.parseInt(stream_widget_value, 10);
Number.parseInt(stream_widget_value, 10), stream_bar.decorate(stream_id, $stream_header_colorblock);
); const stream = stream_data.get_sub_by_id(stream_id);
stream_bar.decorate(stream_name, $stream_header_colorblock);
const stream = stream_data.get_sub_by_name(stream_name);
if (stream === undefined) { if (stream === undefined) {
$("#move_topic_to_stream_widget .dropdown_widget_value").text( $("#move_topic_to_stream_widget .dropdown_widget_value").text(
$t({defaultMessage: "Select a stream"}), $t({defaultMessage: "Select a stream"}),

View File

@@ -13,6 +13,7 @@ import * as blueslip from "./blueslip";
import * as browser_history from "./browser_history"; import * as browser_history from "./browser_history";
import * as channel from "./channel"; import * as channel from "./channel";
import * as components from "./components"; import * as components from "./components";
import * as compose_recipient from "./compose_recipient";
import * as compose_state from "./compose_state"; import * as compose_state from "./compose_state";
import * as confirm_dialog from "./confirm_dialog"; import * as confirm_dialog from "./confirm_dialog";
import * as dropdown_widget from "./dropdown_widget"; import * as dropdown_widget from "./dropdown_widget";
@@ -167,8 +168,6 @@ export function is_subscribed_stream_tab_active() {
} }
export function update_stream_name(sub, new_name) { export function update_stream_name(sub, new_name) {
const old_name = sub.name;
// Rename the stream internally. // Rename the stream internally.
stream_data.rename_sub(sub, new_name); stream_data.rename_sub(sub, new_name);
const stream_id = sub.stream_id; const stream_id = sub.stream_id;
@@ -186,9 +185,9 @@ export function update_stream_name(sub, new_name) {
// Update the message feed. // Update the message feed.
message_live_update.update_stream_name(stream_id, new_name); message_live_update.update_stream_name(stream_id, new_name);
// Update compose_state if needed // Update compose UI if needed
if (compose_state.stream_name() === old_name) { if (compose_state.stream_id() === stream_id) {
compose_state.set_stream_name(new_name); compose_recipient.on_compose_select_recipient_update();
} }
// Update navbar if needed // Update navbar if needed

View File

@@ -233,26 +233,29 @@ export function compare_people_for_relevance(
return tertiary_compare(person_a, person_b); return tertiary_compare(person_a, person_b);
} }
export function sort_people_for_relevance(objs, current_stream_name, current_topic) { export function sort_people_for_relevance(objs, current_stream_id, current_topic) {
// If sorting for recipientbox typeahead and not viewing a stream / topic, then current_stream = "" // If sorting for recipientbox typeahead and not viewing a stream / topic, then current_stream = ""
let current_stream = false; let current_stream = null;
if (current_stream_name) { if (current_stream_id) {
current_stream = stream_data.get_sub(current_stream_name); current_stream = stream_data.get_sub_by_id(current_stream_id);
} }
if (!current_stream) { if (!current_stream) {
objs.sort((person_a, person_b) => objs.sort((person_a, person_b) =>
compare_people_for_relevance(person_a, person_b, compare_by_pms), compare_people_for_relevance(person_a, person_b, compare_by_pms),
); );
} else { } else {
const stream_id = current_stream.stream_id;
objs.sort((person_a, person_b) => objs.sort((person_a, person_b) =>
compare_people_for_relevance( compare_people_for_relevance(
person_a, person_a,
person_b, person_b,
(user_a, user_b) => (user_a, user_b) =>
recent_senders.compare_by_recency(user_a, user_b, stream_id, current_topic), recent_senders.compare_by_recency(
current_stream.stream_id, user_a,
user_b,
current_stream_id,
current_topic,
),
current_stream_id,
), ),
); );
} }
@@ -348,13 +351,13 @@ export function sort_languages(matches, query) {
export function sort_recipients({ export function sort_recipients({
users, users,
query, query,
current_stream, current_stream_id,
current_topic, current_topic,
groups = [], groups = [],
max_num_items = 20, max_num_items = 20,
}) { }) {
function sort_relevance(items) { function sort_relevance(items) {
return sort_people_for_relevance(items, current_stream, current_topic); return sort_people_for_relevance(items, current_stream_id, current_topic);
} }
const users_name_results = typeahead.triage(query, users, (p) => p.full_name); const users_name_results = typeahead.triage(query, users, (p) => p.full_name);

View File

@@ -9,7 +9,6 @@ const {mock_banners} = require("./lib/compose_banner");
const {$t} = require("./lib/i18n"); const {$t} = require("./lib/i18n");
const {mock_esm, set_global, zrequire} = require("./lib/namespace"); const {mock_esm, set_global, zrequire} = require("./lib/namespace");
const {run_test} = require("./lib/test"); const {run_test} = require("./lib/test");
const blueslip = require("./lib/zblueslip");
const $ = require("./lib/zjquery"); const $ = require("./lib/zjquery");
const {page_params, user_settings} = require("./lib/zpage_params"); const {page_params, user_settings} = require("./lib/zpage_params");
@@ -318,7 +317,7 @@ test_ui("enter_with_preview_open", ({override, override_rewire}) => {
// Test sending a message with content. // Test sending a message with content.
compose_state.set_message_type("stream"); compose_state.set_message_type("stream");
compose_state.set_stream_name("social"); compose_state.set_stream_id(social.stream_id);
$("#compose-textarea").val("message me"); $("#compose-textarea").val("message me");
$("#compose-textarea").hide(); $("#compose-textarea").hide();
@@ -727,7 +726,7 @@ test_ui("create_message_object", ({override, override_rewire}) => {
mock_banners(); mock_banners();
override_rewire(compose_recipient, "on_compose_select_recipient_update", noop); override_rewire(compose_recipient, "on_compose_select_recipient_update", noop);
compose_state.set_stream_name("social"); compose_state.set_stream_id(social.stream_id);
$("#stream_message_recipient_topic").val("lunch"); $("#stream_message_recipient_topic").val("lunch");
$("#compose-textarea").val("burrito"); $("#compose-textarea").val("burrito");

View File

@@ -127,7 +127,7 @@ test("start", ({override, override_rewire, mock_template}) => {
// Start stream message // Start stream message
compose_defaults = { compose_defaults = {
stream: "", stream_id: "",
topic: "topic1", topic: "topic1",
}; };
@@ -177,7 +177,7 @@ test("start", ({override, override_rewire, mock_template}) => {
}; };
stream_data.add_sub(social); stream_data.add_sub(social);
compose_state.set_stream_name(""); compose_state.set_stream_id("");
// More than 1 subscription, do not autofill // More than 1 subscription, do not autofill
opts = {}; opts = {};
start("stream", opts); start("stream", opts);
@@ -270,12 +270,6 @@ test("respond_to_message", ({override, override_rewire, mock_template}) => {
assert.equal(compose_state.private_message_recipient(), "alice@example.com"); assert.equal(compose_state.private_message_recipient(), "alice@example.com");
// Test stream // Test stream
msg = {
type: "stream",
stream: "Denmark",
topic: "python",
};
const denmark = { const denmark = {
subscribed: true, subscribed: true,
color: "blue", color: "blue",
@@ -283,6 +277,14 @@ test("respond_to_message", ({override, override_rewire, mock_template}) => {
stream_id: 1, stream_id: 1,
}; };
stream_data.add_sub(denmark); stream_data.add_sub(denmark);
msg = {
type: "stream",
stream: denmark.name,
stream_id: denmark.stream_id,
topic: "python",
};
opts = {}; opts = {};
respond_to_message(opts); respond_to_message(opts);
@@ -310,7 +312,8 @@ test("reply_with_mention", ({override, override_rewire, mock_template}) => {
const msg = { const msg = {
type: "stream", type: "stream",
stream: "Denmark", stream: denmark.name,
stream_id: denmark.stream_id,
topic: "python", topic: "python",
sender_full_name: "Bob Roberts", sender_full_name: "Bob Roberts",
sender_id: 40, sender_id: 40,

View File

@@ -71,7 +71,7 @@ run_test("set_focused_recipient", ({override_rewire}) => {
assert.equal(compose_fade_helper.would_receive_message(bob.user_id), true); assert.equal(compose_fade_helper.would_receive_message(bob.user_id), true);
stream_data.add_sub(sub); stream_data.add_sub(sub);
compose_state.set_stream_name("social"); compose_state.set_stream_id(sub.stream_id);
peer_data.set_subscribers(sub.stream_id, [me.user_id, alice.user_id]); peer_data.set_subscribers(sub.stream_id, [me.user_id, alice.user_id]);
compose_fade.set_focused_recipient("stream"); compose_fade.set_focused_recipient("stream");

View File

@@ -41,7 +41,7 @@ run_test("has_full_recipient", ({override, override_rewire}) => {
override(compose_pm_pill, "get_emails", () => emails); override(compose_pm_pill, "get_emails", () => emails);
compose_state.set_message_type("stream"); compose_state.set_message_type("stream");
compose_state.set_stream_name(""); compose_state.set_stream_id("");
compose_state.topic(""); compose_state.topic("");
assert.equal(compose_state.has_full_recipient(), false); assert.equal(compose_state.has_full_recipient(), false);
@@ -49,7 +49,7 @@ run_test("has_full_recipient", ({override, override_rewire}) => {
assert.equal(compose_state.has_full_recipient(), false); assert.equal(compose_state.has_full_recipient(), false);
stream_data.add_sub({name: "bar", stream_id: 99}); stream_data.add_sub({name: "bar", stream_id: 99});
compose_state.set_stream_name("bar"); compose_state.set_stream_id(99);
assert.equal(compose_state.has_full_recipient(), true); assert.equal(compose_state.has_full_recipient(), true);
compose_state.set_message_type("private"); compose_state.set_message_type("private");

View File

@@ -20,6 +20,7 @@ mock_esm("../src/message_lists", {
}); });
const compose_ui = zrequire("compose_ui"); const compose_ui = zrequire("compose_ui");
const stream_data = zrequire("stream_data");
const people = zrequire("people"); const people = zrequire("people");
const user_status = zrequire("user_status"); const user_status = zrequire("user_status");
const hash_util = mock_esm("../src/hash_util"); const hash_util = mock_esm("../src/hash_util");
@@ -184,7 +185,7 @@ run_test("replace_syntax", ({override}) => {
run_test("compute_placeholder_text", () => { run_test("compute_placeholder_text", () => {
let opts = { let opts = {
message_type: "stream", message_type: "stream",
stream: "", stream_id: "",
topic: "", topic: "",
private_message_recipient: "", private_message_recipient: "",
}; };
@@ -195,7 +196,13 @@ run_test("compute_placeholder_text", () => {
$t({defaultMessage: "Compose your message here"}), $t({defaultMessage: "Compose your message here"}),
); );
opts.stream = "all"; const stream_all = {
subscribed: true,
name: "all",
stream_id: 2,
};
stream_data.add_sub(stream_all);
opts.stream_id = stream_all.stream_id;
assert.equal(compose_ui.compute_placeholder_text(opts), $t({defaultMessage: "Message #all"})); assert.equal(compose_ui.compute_placeholder_text(opts), $t({defaultMessage: "Message #all"}));
opts.topic = "Test"; opts.topic = "Test";
@@ -207,7 +214,7 @@ run_test("compute_placeholder_text", () => {
// direct message narrows // direct message narrows
opts = { opts = {
message_type: "private", message_type: "private",
stream: "", stream_id: "",
topic: "", topic: "",
private_message_recipient: "", private_message_recipient: "",
}; };
@@ -748,10 +755,20 @@ run_test("get_focus_area", () => {
"#compose-textarea", "#compose-textarea",
); );
assert.equal(get_focus_area("stream", {}), "#compose_select_recipient_widget_wrapper"); assert.equal(get_focus_area("stream", {}), "#compose_select_recipient_widget_wrapper");
assert.equal(get_focus_area("stream", {stream: "fun"}), "#stream_message_recipient_topic");
assert.equal(get_focus_area("stream", {stream: "fun", topic: "more"}), "#compose-textarea");
assert.equal( assert.equal(
get_focus_area("stream", {stream: "fun", topic: "more", trigger: "new topic button"}), get_focus_area("stream", {stream_name: "fun", stream_id: 4}),
"#stream_message_recipient_topic",
);
assert.equal(
get_focus_area("stream", {stream_name: "fun", stream_id: 4, topic: "more"}),
"#compose-textarea",
);
assert.equal(
get_focus_area("stream", {
stream_id: 4,
topic: "more",
trigger: "new topic button",
}),
"#stream_message_recipient_topic", "#stream_message_recipient_topic",
); );
}); });

View File

@@ -42,6 +42,13 @@ const bob = {
full_name: "Bob", full_name: "Bob",
}; };
const social_sub = {
stream_id: 101,
name: "social",
subscribed: true,
};
stream_data.add_sub(social_sub);
people.add_active_user(me); people.add_active_user(me);
people.initialize_current_user(me.user_id); people.initialize_current_user(me.user_id);
@@ -77,16 +84,17 @@ function stub_message_row($textarea) {
test_ui("validate_stream_message_address_info", ({mock_template}) => { test_ui("validate_stream_message_address_info", ({mock_template}) => {
mock_banners(); mock_banners();
const sub = {
const party_sub = {
stream_id: 101, stream_id: 101,
name: "social", name: "party",
subscribed: true, subscribed: true,
}; };
stream_data.add_sub(sub); stream_data.add_sub(party_sub);
assert.ok(compose_validate.validate_stream_message_address_info("social")); assert.ok(compose_validate.validate_stream_message_address_info("social"));
sub.subscribed = false; party_sub.subscribed = false;
stream_data.add_sub(sub); stream_data.add_sub(party_sub);
$("#compose_banners .user_not_subscribed").length = 0; $("#compose_banners .user_not_subscribed").length = 0;
let user_not_subscribed_rendered = false; let user_not_subscribed_rendered = false;
mock_template("compose_banner/compose_banner.hbs", true, (data, html) => { mock_template("compose_banner/compose_banner.hbs", true, (data, html) => {
@@ -105,9 +113,9 @@ test_ui("validate_stream_message_address_info", ({mock_template}) => {
}; };
assert.ok(compose_validate.validate_stream_message_address_info("social")); assert.ok(compose_validate.validate_stream_message_address_info("social"));
sub.name = "Frontend"; party_sub.name = "Frontend";
sub.stream_id = 102; party_sub.stream_id = 102;
stream_data.add_sub(sub); stream_data.add_sub(party_sub);
channel.post = (payload) => { channel.post = (payload) => {
assert.equal(payload.data.stream, "Frontend"); assert.equal(payload.data.stream, "Frontend");
payload.data.subscribed = false; payload.data.subscribed = false;
@@ -262,7 +270,7 @@ test_ui("validate", ({override_rewire, mock_template}) => {
// test validating stream messages // test validating stream messages
compose_state.set_message_type("stream"); compose_state.set_message_type("stream");
compose_state.set_stream_name(""); compose_state.set_stream_id("");
let empty_stream_error_rendered = false; let empty_stream_error_rendered = false;
mock_template("compose_banner/compose_banner.hbs", false, (data) => { mock_template("compose_banner/compose_banner.hbs", false, (data) => {
assert.equal(data.classname, compose_banner.CLASSNAMES.missing_stream); assert.equal(data.classname, compose_banner.CLASSNAMES.missing_stream);
@@ -277,7 +285,7 @@ test_ui("validate", ({override_rewire, mock_template}) => {
name: "Denmark", name: "Denmark",
}; };
stream_data.add_sub(denmark); stream_data.add_sub(denmark);
compose_state.set_stream_name("Denmark"); compose_state.set_stream_id(denmark.stream_id);
page_params.realm_mandatory_topics = true; page_params.realm_mandatory_topics = true;
compose_state.topic(""); compose_state.topic("");
let missing_topic_error_rendered = false; let missing_topic_error_rendered = false;
@@ -379,13 +387,15 @@ test_ui("validate_stream_message", ({override_rewire, mock_template}) => {
override_rewire(compose_recipient, "on_compose_select_recipient_update", () => {}); override_rewire(compose_recipient, "on_compose_select_recipient_update", () => {});
page_params.user_id = me.user_id; page_params.user_id = me.user_id;
page_params.realm_mandatory_topics = false; page_params.realm_mandatory_topics = false;
const sub = {
const special_sub = {
stream_id: 101, stream_id: 101,
name: "social", name: "special",
subscribed: true, subscribed: true,
}; };
stream_data.add_sub(sub); stream_data.add_sub(special_sub);
compose_state.set_stream_name("social");
compose_state.set_stream_id(special_sub.stream_id);
assert.ok(compose_validate.validate()); assert.ok(compose_validate.validate());
assert.ok(!$("#compose-all-everyone").visible()); assert.ok(!$("#compose-all-everyone").visible());
@@ -433,16 +443,16 @@ test_ui(
mock_banners(); mock_banners();
override_rewire(compose_recipient, "on_compose_select_recipient_update", () => {}); override_rewire(compose_recipient, "on_compose_select_recipient_update", () => {});
page_params.is_admin = false; page_params.is_admin = false;
const sub = { const sub_stream_102 = {
stream_id: 102, stream_id: 102,
name: "stream102", name: "stream102",
subscribed: true, subscribed: true,
stream_post_policy: stream_data.stream_post_policy_values.admins.code, stream_post_policy: stream_data.stream_post_policy_values.admins.code,
}; };
stream_data.add_sub(sub); stream_data.add_sub(sub_stream_102);
compose_state.topic("topic102"); compose_state.topic("topic102");
compose_state.set_stream_name("stream102"); compose_state.set_stream_id(sub_stream_102.stream_id);
let banner_rendered = false; let banner_rendered = false;
mock_template("compose_banner/compose_banner.hbs", false, (data) => { mock_template("compose_banner/compose_banner.hbs", false, (data) => {
@@ -459,13 +469,13 @@ test_ui(
assert.ok(banner_rendered); assert.ok(banner_rendered);
// Reset error message. // Reset error message.
compose_state.set_stream_name("social"); compose_state.set_stream_id(social_sub.stream_id);
page_params.is_admin = false; page_params.is_admin = false;
page_params.is_guest = true; page_params.is_guest = true;
compose_state.topic("topic102"); compose_state.topic("topic102");
compose_state.set_stream_name("stream102"); compose_state.set_stream_id(sub_stream_102.stream_id);
banner_rendered = false; banner_rendered = false;
assert.ok(!compose_validate.validate()); assert.ok(!compose_validate.validate());
assert.ok(banner_rendered); assert.ok(banner_rendered);
@@ -491,7 +501,7 @@ test_ui(
stream_data.add_sub(sub); stream_data.add_sub(sub);
compose_state.topic("topic104"); compose_state.topic("topic104");
compose_state.set_stream_name("stream104"); compose_state.set_stream_id(sub.stream_id);
let banner_rendered = false; let banner_rendered = false;
mock_template("compose_banner/compose_banner.hbs", false, (data) => { mock_template("compose_banner/compose_banner.hbs", false, (data) => {
assert.equal(data.classname, compose_banner.CLASSNAMES.no_post_permissions); assert.equal(data.classname, compose_banner.CLASSNAMES.no_post_permissions);
@@ -506,7 +516,7 @@ test_ui(
assert.ok(!compose_validate.validate()); assert.ok(!compose_validate.validate());
assert.ok(banner_rendered); assert.ok(banner_rendered);
// Reset error message. // Reset error message.
compose_state.set_stream_name("social"); compose_state.set_stream_id(social_sub.stream_id);
page_params.is_guest = true; page_params.is_guest = true;
assert.ok(!compose_validate.validate()); assert.ok(!compose_validate.validate());
@@ -530,7 +540,7 @@ test_ui(
stream_data.add_sub(sub); stream_data.add_sub(sub);
compose_state.topic("topic103"); compose_state.topic("topic103");
compose_state.set_stream_name("stream103"); compose_state.set_stream_id(sub.stream_id);
let banner_rendered = false; let banner_rendered = false;
mock_template("compose_banner/compose_banner.hbs", false, (data) => { mock_template("compose_banner/compose_banner.hbs", false, (data) => {
assert.equal(data.classname, compose_banner.CLASSNAMES.no_post_permissions); assert.equal(data.classname, compose_banner.CLASSNAMES.no_post_permissions);
@@ -692,7 +702,7 @@ test_ui("warn_if_mentioning_unsubscribed_user", ({override, override_rewire, moc
override_rewire(compose_recipient, "on_compose_select_recipient_update", () => {}); override_rewire(compose_recipient, "on_compose_select_recipient_update", () => {});
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_name(""); compose_state.set_stream_id("");
override(settings_data, "user_can_subscribe_other_users", () => true); override(settings_data, "user_can_subscribe_other_users", () => true);
let mentioned_details = { let mentioned_details = {
@@ -737,7 +747,7 @@ test_ui("warn_if_mentioning_unsubscribed_user", ({override, override_rewire, moc
name: "random", name: "random",
}; };
stream_data.add_sub(sub); stream_data.add_sub(sub);
compose_state.set_stream_name("random"); compose_state.set_stream_id(sub.stream_id);
// Test with invalid stream in compose box. It should return noop. // Test with invalid stream in compose box. It should return noop.
new_banner_rendered = false; new_banner_rendered = false;
@@ -804,8 +814,7 @@ test_ui("test warn_if_topic_resolved", ({override, override_rewire, mock_templat
stream_data.add_sub(sub); stream_data.add_sub(sub);
compose_state.set_message_type("stream"); compose_state.set_message_type("stream");
blueslip.expect("error", "Unable to select stream: Do not exist"); compose_state.set_stream_id("");
compose_state.set_stream_name("Do not exist");
compose_state.topic(resolved_topic.resolve_name("hello")); compose_state.topic(resolved_topic.resolve_name("hello"));
compose_state.message_content("content"); compose_state.message_content("content");
@@ -813,7 +822,7 @@ test_ui("test warn_if_topic_resolved", ({override, override_rewire, mock_templat
compose_validate.warn_if_topic_resolved(true); compose_validate.warn_if_topic_resolved(true);
assert.ok(!error_shown); assert.ok(!error_shown);
compose_state.set_stream_name("random"); compose_state.set_stream_id(sub.stream_id);
// Show the warning now as stream also exists // Show the warning now as stream also exists
error_shown = false; error_shown = false;

View File

@@ -744,7 +744,7 @@ test("initialize", ({override, override_rewire, mock_template}) => {
return sweden_topics_to_show; return sweden_topics_to_show;
}); });
compose_state.set_stream_name("Sweden"); compose_state.set_stream_id(sweden_stream.stream_id);
let actual_value = options.source(); let actual_value = options.source();
// Topics should be sorted alphabetically, not by addition order. // Topics should be sorted alphabetically, not by addition order.
let expected_value = sweden_topics_to_show; let expected_value = sweden_topics_to_show;
@@ -800,8 +800,8 @@ test("initialize", ({override, override_rewire, mock_template}) => {
topic_typeahead_called = true; topic_typeahead_called = true;
// Unset the stream name. // Unset the stream.
compose_state.set_stream_name(""); compose_state.set_stream_id("");
}; };
let pm_recipient_typeahead_called = false; let pm_recipient_typeahead_called = false;
@@ -881,7 +881,7 @@ test("initialize", ({override, override_rewire, mock_template}) => {
return typeahead_helper.sort_recipients({ return typeahead_helper.sort_recipients({
users: people, users: people,
query, query,
current_stream: compose_state.stream_name(), current_stream_id: compose_state.stream_id(),
current_topic: compose_state.topic(), current_topic: compose_state.topic(),
}); });
} }
@@ -1139,7 +1139,7 @@ test("initialize", ({override, override_rewire, mock_template}) => {
assert.equal($("#private_message_recipient").val(), "othello@zulip.com"); assert.equal($("#private_message_recipient").val(), "othello@zulip.com");
// the UI of selecting a stream is tested in puppeteer tests. // the UI of selecting a stream is tested in puppeteer tests.
compose_state.set_stream_name("Sweden"); compose_state.set_stream_id(sweden_stream.stream_id);
let event = { let event = {
type: "keydown", type: "keydown",
@@ -1199,7 +1199,7 @@ test("initialize", ({override, override_rewire, mock_template}) => {
$("form#send_message_form").trigger(event); $("form#send_message_form").trigger(event);
// the UI of selecting a stream is tested in puppeteer tests. // the UI of selecting a stream is tested in puppeteer tests.
compose_state.set_stream_name("Sweden"); compose_state.set_stream_id(sweden_stream.stream_id);
// handle_keyup() // handle_keyup()
event = { event = {
type: "keydown", type: "keydown",
@@ -1800,12 +1800,12 @@ test("direct message recipients sorted according to stream / topic being viewed"
override_rewire(compose_recipient, "on_compose_select_recipient_update", () => {}); override_rewire(compose_recipient, "on_compose_select_recipient_update", () => {});
// When viewing no stream, sorting is alphabetical // When viewing no stream, sorting is alphabetical
compose_state.set_stream_name(""); compose_state.set_stream_id("");
results = ct.get_pm_people("li"); results = ct.get_pm_people("li");
assert.deepEqual(results, [ali, alice, cordelia]); assert.deepEqual(results, [ali, alice, cordelia]);
// When viewing denmark stream, subscriber cordelia is placed higher // When viewing denmark stream, subscriber cordelia is placed higher
compose_state.set_stream_name("Denmark"); compose_state.set_stream_id(denmark_stream.stream_id);
results = ct.get_pm_people("li"); results = ct.get_pm_people("li");
assert.deepEqual(results, [cordelia, ali, alice]); assert.deepEqual(results, [cordelia, ali, alice]);

View File

@@ -275,7 +275,7 @@ test("stream delete (stream is selected in compose)", ({override, override_rewir
} }
stream_data.subscribe_myself(event.streams[0]); stream_data.subscribe_myself(event.streams[0]);
compose_state.set_stream_name(event.streams[0].name); compose_state.set_stream_id(event.streams[0].stream_id);
override(settings_streams, "update_default_streams_table", noop); override(settings_streams, "update_default_streams_table", noop);

View File

@@ -81,6 +81,7 @@ const draft_2 = {
}; };
const short_msg = { const short_msg = {
stream: "stream", stream: "stream",
stream_id: 30,
topic: "topic", topic: "topic",
type: "stream", type: "stream",
content: "a", content: "a",
@@ -159,11 +160,6 @@ test("snapshot_message", ({override_rewire}) => {
override_rewire(compose_recipient, "on_compose_select_recipient_update", () => {}); override_rewire(compose_recipient, "on_compose_select_recipient_update", () => {});
mock_banners(); mock_banners();
override_rewire(stream_data, "get_sub", (stream_name) => {
assert.equal(stream_name, "stream");
return {stream_id: 30};
});
$(".narrow_to_compose_recipients").toggleClass = noop; $(".narrow_to_compose_recipients").toggleClass = noop;
mock_stream_header_colorblock(); mock_stream_header_colorblock();
@@ -176,7 +172,7 @@ test("snapshot_message", ({override_rewire}) => {
if (curr_draft.type === "private") { if (curr_draft.type === "private") {
compose_state.set_compose_recipient_id(compose_recipient.DIRECT_MESSAGE_ID); compose_state.set_compose_recipient_id(compose_recipient.DIRECT_MESSAGE_ID);
} else { } else {
compose_state.set_stream_name(curr_draft.stream); compose_state.set_stream_id(curr_draft.stream_id);
} }
compose_state.topic(curr_draft.topic); compose_state.topic(curr_draft.topic);
compose_state.private_message_recipient(curr_draft.private_message_recipient); compose_state.private_message_recipient(curr_draft.private_message_recipient);
@@ -187,7 +183,7 @@ test("snapshot_message", ({override_rewire}) => {
name: draft_1.stream, name: draft_1.stream,
}; };
stream_data.add_sub(stream); stream_data.add_sub(stream);
compose_state.set_stream_name("stream"); compose_state.set_stream_id(stream.stream_id);
curr_draft = draft_1; curr_draft = draft_1;
set_compose_state(); set_compose_state();

View File

@@ -662,7 +662,7 @@ run_test("narrow_to_compose_target errors", ({override_rewire, disallow_rewire})
// No-op when empty stream. // No-op when empty stream.
compose_state.set_message_type("stream"); compose_state.set_message_type("stream");
compose_state.set_stream_name(""); compose_state.set_stream_id("");
narrow.to_compose_target(); narrow.to_compose_target();
}); });
@@ -677,7 +677,7 @@ run_test("narrow_to_compose_target streams", ({override_rewire}) => {
compose_state.set_message_type("stream"); compose_state.set_message_type("stream");
stream_data.add_sub({name: "ROME", stream_id: 99}); stream_data.add_sub({name: "ROME", stream_id: 99});
compose_state.set_stream_name("ROME"); compose_state.set_stream_id(99);
// Test with existing topic // Test with existing topic
compose_state.topic("one"); compose_state.topic("one");

View File

@@ -176,13 +176,13 @@ test("set_compose_defaults", () => {
// First try with a stream that doesn't exist. // First try with a stream that doesn't exist.
let stream_and_topic = narrow_state.set_compose_defaults(); let stream_and_topic = narrow_state.set_compose_defaults();
assert.equal(stream_and_topic.stream, undefined); assert.equal(stream_and_topic.stream_id, undefined);
assert.equal(stream_and_topic.topic, "Bar"); assert.equal(stream_and_topic.topic, "Bar");
const test_stream = {name: "Foo", stream_id: 72}; const test_stream = {name: "Foo", stream_id: 72};
stream_data.add_sub(test_stream); stream_data.add_sub(test_stream);
stream_and_topic = narrow_state.set_compose_defaults(); stream_and_topic = narrow_state.set_compose_defaults();
assert.equal(stream_and_topic.stream, "Foo"); assert.equal(stream_and_topic.stream_id, 72);
assert.equal(stream_and_topic.topic, "Bar"); assert.equal(stream_and_topic.topic, "Bar");
set_filter([["dm", "foo@bar.com"]]); set_filter([["dm", "foo@bar.com"]]);
@@ -217,7 +217,7 @@ test("set_compose_defaults", () => {
set_filter([["stream", "rome"]]); set_filter([["stream", "rome"]]);
const stream_test = narrow_state.set_compose_defaults(); const stream_test = narrow_state.set_compose_defaults();
assert.equal(stream_test.stream, "ROME"); assert.equal(stream_test.stream_id, 99);
}); });
test("update_email", () => { test("update_email", () => {

View File

@@ -136,8 +136,8 @@ test("basics", () => {
assert.ok(stream_data.is_invite_only_by_stream_name("social")); assert.ok(stream_data.is_invite_only_by_stream_name("social"));
assert.ok(!stream_data.is_invite_only_by_stream_name("unknown")); assert.ok(!stream_data.is_invite_only_by_stream_name("unknown"));
assert.equal(stream_data.get_color("social"), "red"); assert.equal(stream_data.get_color(social.stream_id), "red");
assert.equal(stream_data.get_color("unknown"), "#c2c2c2"); assert.equal(stream_data.get_color(""), "#c2c2c2");
assert.equal(stream_data.get_name("denMARK"), "Denmark"); assert.equal(stream_data.get_name("denMARK"), "Denmark");
assert.equal(stream_data.get_name("unknown Stream"), "unknown Stream"); assert.equal(stream_data.get_name("unknown Stream"), "unknown Stream");

View File

@@ -95,10 +95,20 @@ for (const person of matches) {
people.add_active_user(person); people.add_active_user(person);
} }
stream_data.create_streams([ const dev_sub = {
{name: "Dev", color: "blue", stream_id: 1}, name: "Dev",
{name: "Linux", color: "red", stream_id: 2}, color: "blue",
]); stream_id: 1,
};
const linux_sub = {
name: "Linux",
color: "red",
stream_id: 2,
};
stream_data.create_streams([dev_sub, linux_sub]);
stream_data.add_sub(dev_sub);
stream_data.add_sub(linux_sub);
function test(label, f) { function test(label, f) {
run_test(label, (helpers) => { run_test(label, (helpers) => {
@@ -312,11 +322,11 @@ test("sort_languages", () => {
assert.deepEqual(test_langs, ["js", "java"]); assert.deepEqual(test_langs, ["js", "java"]);
}); });
function get_typeahead_result(query, current_stream, current_topic) { function get_typeahead_result(query, current_stream_id, current_topic) {
const result = th.sort_recipients({ const result = th.sort_recipients({
users: people.get_realm_users(), users: people.get_realm_users(),
query, query,
current_stream, current_stream_id,
current_topic, current_topic,
}); });
return result.map((person) => person.email); return result.map((person) => person.email);
@@ -378,8 +388,8 @@ test("sort_recipients", () => {
id: (next_id += 1), id: (next_id += 1),
}); });
// Typeahead for stream message [query, stream-name, topic-name] // Typeahead for stream message [query, stream-id, topic-name]
assert.deepEqual(get_typeahead_result("b", "Dev", "Dev topic"), [ assert.deepEqual(get_typeahead_result("b", dev_sub.stream_id, "Dev topic"), [
subscriber_email_3, subscriber_email_3,
subscriber_email_2, subscriber_email_2,
subscriber_email_1, subscriber_email_1,
@@ -403,7 +413,7 @@ test("sort_recipients", () => {
}); });
// No match // No match
assert.deepEqual(get_typeahead_result("h", "Linux", "Linux topic"), [ assert.deepEqual(get_typeahead_result("h", linux_sub.stream_id, "Linux topic"), [
"zman@test.net", "zman@test.net",
"b_user_3@zulip.net", "b_user_3@zulip.net",
"a_user@zulip.org", "a_user@zulip.org",
@@ -427,7 +437,7 @@ test("sort_recipients all mention", () => {
const results = th.sort_recipients({ const results = th.sort_recipients({
users: test_objs, users: test_objs,
query: "a", query: "a",
current_stream: "Linux", current_stream_id: linux_sub.stream_id,
current_topic: "Linux topic", current_topic: "Linux topic",
}); });
@@ -454,10 +464,9 @@ test("sort_recipients pm counts", () => {
]); ]);
// Now prioritize stream membership over pm counts. // Now prioritize stream membership over pm counts.
const linux_sub = stream_data.get_sub("Linux");
peer_data.add_subscriber(linux_sub.stream_id, b_user_3.user_id); peer_data.add_subscriber(linux_sub.stream_id, b_user_3.user_id);
assert.deepEqual(get_typeahead_result("b", "Linux", "Linux topic"), [ assert.deepEqual(get_typeahead_result("b", linux_sub.stream_id, "Linux topic"), [
"b_user_3@zulip.net", "b_user_3@zulip.net",
"b_user_1@zulip.net", "b_user_1@zulip.net",
"b_user_2@zulip.net", "b_user_2@zulip.net",
@@ -489,7 +498,7 @@ test("sort_recipients dup bots", () => {
const recipients = th.sort_recipients({ const recipients = th.sort_recipients({
users: dup_objects, users: dup_objects,
query: "b", query: "b",
current_stream: "", current_stream_id: "",
current_topic: "", current_topic: "",
}); });
const recipients_email = recipients.map((person) => person.email); const recipients_email = recipients.map((person) => person.email);
@@ -516,7 +525,7 @@ test("sort_recipients dup alls", () => {
const recipients = th.sort_recipients({ const recipients = th.sort_recipients({
users: test_objs, users: test_objs,
query: "a", query: "a",
current_stream: "Linux", current_stream_id: linux_sub.stream_id,
current_topic: "Linux topic", current_topic: "Linux topic",
}); });
@@ -546,7 +555,7 @@ test("sort_recipients subscribers", () => {
const recipients = th.sort_recipients({ const recipients = th.sort_recipients({
users: small_matches, users: small_matches,
query: "b", query: "b",
current_stream: "Dev", current_stream_id: dev_sub.stream_id,
current_topic: "Dev topic", current_topic: "Dev topic",
}); });
const recipients_email = recipients.map((person) => person.email); const recipients_email = recipients.map((person) => person.email);
@@ -561,7 +570,7 @@ test("sort_recipients pm partners", () => {
const recipients = th.sort_recipients({ const recipients = th.sort_recipients({
users: small_matches, users: small_matches,
query: "b", query: "b",
current_stream: "Linux", current_stream_id: linux_sub.stream_id,
current_topic: "Linux topic", current_topic: "Linux topic",
}); });
const recipients_email = recipients.map((person) => person.email); const recipients_email = recipients.map((person) => person.email);