2020-08-01 03:43:15 +02:00
|
|
|
"use strict";
|
|
|
|
|
2020-11-30 23:46:45 +01:00
|
|
|
const {strict: assert} = require("assert");
|
|
|
|
|
2023-02-22 23:04:10 +01:00
|
|
|
const {mock_esm, zrequire} = require("./lib/namespace");
|
|
|
|
const {run_test} = require("./lib/test");
|
|
|
|
const blueslip = require("./lib/zblueslip");
|
|
|
|
const $ = require("./lib/zjquery");
|
|
|
|
const {page_params} = require("./lib/zpage_params");
|
2020-12-01 00:02:16 +01:00
|
|
|
|
2021-03-11 05:43:45 +01:00
|
|
|
const hash_util = zrequire("hash_util");
|
2020-12-01 23:21:38 +01:00
|
|
|
const compose_state = zrequire("compose_state");
|
2021-03-26 15:21:47 +01:00
|
|
|
const narrow_banner = zrequire("narrow_banner");
|
2020-12-01 23:21:38 +01:00
|
|
|
const narrow_state = zrequire("narrow_state");
|
|
|
|
const people = zrequire("people");
|
|
|
|
const stream_data = zrequire("stream_data");
|
2023-02-22 23:03:47 +01:00
|
|
|
const {Filter} = zrequire("../src/filter");
|
2021-02-10 04:53:22 +01:00
|
|
|
const narrow = zrequire("narrow");
|
2022-10-31 20:40:22 +01:00
|
|
|
const settings_config = zrequire("settings_config");
|
2023-03-31 06:27:36 +02:00
|
|
|
const compose_recipient = zrequire("compose_recipient");
|
2017-04-25 15:25:31 +02:00
|
|
|
|
2023-02-22 23:04:10 +01:00
|
|
|
const compose_pm_pill = mock_esm("../src/compose_pm_pill");
|
|
|
|
mock_esm("../src/spectators", {
|
2022-11-17 23:33:43 +01:00
|
|
|
login_to_access() {},
|
2022-04-29 12:48:19 +02:00
|
|
|
});
|
2023-02-22 23:04:10 +01:00
|
|
|
const recent_topics_util = mock_esm("../src/recent_topics_util", {
|
2022-12-15 15:22:33 +01:00
|
|
|
is_visible() {},
|
|
|
|
});
|
2022-04-29 12:48:19 +02:00
|
|
|
|
2021-09-01 18:23:28 +02:00
|
|
|
function empty_narrow_html(title, html, search_data) {
|
|
|
|
const opts = {
|
|
|
|
title,
|
|
|
|
html,
|
|
|
|
search_data,
|
|
|
|
};
|
2023-02-22 23:04:10 +01:00
|
|
|
return require("../templates/empty_feed_notice.hbs")(opts);
|
2021-09-01 18:23:28 +02:00
|
|
|
}
|
|
|
|
|
2013-09-18 19:01:21 +02:00
|
|
|
function set_filter(operators) {
|
2020-07-02 01:39:34 +02:00
|
|
|
operators = operators.map((op) => ({
|
js: Convert _.map(a, …) to a.map(…).
And convert the corresponding function expressions to arrow style
while we’re here.
import * as babelParser from "recast/parsers/babel";
import * as recast from "recast";
import * as tsParser from "recast/parsers/typescript";
import { builders as b, namedTypes as n } from "ast-types";
import K from "ast-types/gen/kinds";
import fs from "fs";
import path from "path";
import process from "process";
const checkExpression = (node: n.Node): node is K.ExpressionKind =>
n.Expression.check(node);
for (const file of process.argv.slice(2)) {
console.log("Parsing", file);
const ast = recast.parse(fs.readFileSync(file, { encoding: "utf8" }), {
parser: path.extname(file) === ".ts" ? tsParser : babelParser,
});
let changed = false;
recast.visit(ast, {
visitCallExpression(path) {
const { callee, arguments: args } = path.node;
if (
n.MemberExpression.check(callee) &&
!callee.computed &&
n.Identifier.check(callee.object) &&
callee.object.name === "_" &&
n.Identifier.check(callee.property) &&
callee.property.name === "map" &&
args.length === 2 &&
checkExpression(args[0]) &&
checkExpression(args[1])
) {
const [arr, fn] = args;
path.replace(
b.callExpression(b.memberExpression(arr, b.identifier("map")), [
n.FunctionExpression.check(fn) ||
n.ArrowFunctionExpression.check(fn)
? b.arrowFunctionExpression(
fn.params,
n.BlockStatement.check(fn.body) &&
fn.body.body.length === 1 &&
n.ReturnStatement.check(fn.body.body[0])
? fn.body.body[0].argument || b.identifier("undefined")
: fn.body
)
: fn,
])
);
changed = true;
}
this.traverse(path);
},
});
if (changed) {
console.log("Writing", file);
fs.writeFileSync(file, recast.print(ast).code, { encoding: "utf8" });
}
}
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-02-08 02:43:49 +01:00
|
|
|
operator: op[0],
|
|
|
|
operand: op[1],
|
|
|
|
}));
|
2017-04-25 15:25:31 +02:00
|
|
|
narrow_state.set_current_filter(new Filter(operators));
|
2013-09-18 19:01:21 +02:00
|
|
|
}
|
|
|
|
|
2019-11-02 00:06:25 +01:00
|
|
|
const me = {
|
2020-07-15 01:29:15 +02:00
|
|
|
email: "me@example.com",
|
2018-10-18 19:41:44 +02:00
|
|
|
user_id: 5,
|
2020-07-15 01:29:15 +02:00
|
|
|
full_name: "Me Myself",
|
2018-10-18 19:41:44 +02:00
|
|
|
};
|
|
|
|
|
2019-11-02 00:06:25 +01:00
|
|
|
const alice = {
|
2020-07-15 01:29:15 +02:00
|
|
|
email: "alice@example.com",
|
2018-05-28 14:10:33 +02:00
|
|
|
user_id: 23,
|
2020-07-15 01:29:15 +02:00
|
|
|
full_name: "Alice Smith",
|
2018-05-28 14:10:33 +02:00
|
|
|
};
|
|
|
|
|
2019-11-02 00:06:25 +01:00
|
|
|
const ray = {
|
2020-07-15 01:29:15 +02:00
|
|
|
email: "ray@example.com",
|
2018-05-28 14:10:33 +02:00
|
|
|
user_id: 22,
|
2020-07-15 01:29:15 +02:00
|
|
|
full_name: "Raymond",
|
2018-05-28 14:10:33 +02:00
|
|
|
};
|
|
|
|
|
2022-11-04 14:39:50 +01:00
|
|
|
const bot = {
|
|
|
|
email: "bot@example.com",
|
|
|
|
user_id: 25,
|
|
|
|
full_name: "Example Bot",
|
|
|
|
is_bot: true,
|
|
|
|
};
|
|
|
|
|
2021-09-01 18:23:28 +02:00
|
|
|
run_test("empty_narrow_html", ({mock_template}) => {
|
|
|
|
mock_template("empty_feed_notice.hbs", true, (data, html) => html);
|
|
|
|
|
|
|
|
let actual_html = empty_narrow_html("This is a title", "<h1> This is the html </h1>");
|
|
|
|
assert.equal(
|
|
|
|
actual_html,
|
|
|
|
`<div class="empty_feed_notice">
|
|
|
|
<h4> This is a title </h4>
|
|
|
|
<h1> This is the html </h1>
|
|
|
|
</div>
|
|
|
|
`,
|
|
|
|
);
|
|
|
|
|
|
|
|
const search_data_with_all_search_types = {
|
|
|
|
topic_query: "test",
|
|
|
|
stream_query: "new",
|
|
|
|
has_stop_word: true,
|
|
|
|
query_words: [
|
|
|
|
{query_word: "search", is_stop_word: false},
|
|
|
|
{query_word: "a", is_stop_word: true},
|
|
|
|
],
|
|
|
|
};
|
|
|
|
actual_html = empty_narrow_html(
|
|
|
|
"This is a title",
|
|
|
|
undefined,
|
|
|
|
search_data_with_all_search_types,
|
|
|
|
);
|
|
|
|
assert.equal(
|
|
|
|
actual_html,
|
|
|
|
`<div class="empty_feed_notice">
|
|
|
|
<h4> This is a title </h4>
|
|
|
|
<div>
|
|
|
|
Some common words were excluded from your search. <br/>You searched for:
|
|
|
|
<span>stream: new</span>
|
|
|
|
<span>topic: test</span>
|
|
|
|
<span>search</span>
|
|
|
|
<del>a</del>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
`,
|
|
|
|
);
|
|
|
|
|
|
|
|
const search_data_with_stream_without_stop_words = {
|
|
|
|
has_stop_word: false,
|
|
|
|
stream_query: "hello world",
|
|
|
|
query_words: [{query_word: "searchA", is_stop_word: false}],
|
|
|
|
};
|
|
|
|
actual_html = empty_narrow_html(
|
|
|
|
"This is a title",
|
|
|
|
undefined,
|
|
|
|
search_data_with_stream_without_stop_words,
|
|
|
|
);
|
|
|
|
assert.equal(
|
|
|
|
actual_html,
|
|
|
|
`<div class="empty_feed_notice">
|
|
|
|
<h4> This is a title </h4>
|
|
|
|
<div>
|
|
|
|
You searched for:
|
|
|
|
<span>stream: hello world</span>
|
|
|
|
<span>searchA</span>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
`,
|
|
|
|
);
|
|
|
|
|
|
|
|
const search_data_with_topic_without_stop_words = {
|
|
|
|
has_stop_word: false,
|
|
|
|
topic_query: "hello",
|
|
|
|
query_words: [{query_word: "searchB", is_stop_word: false}],
|
|
|
|
};
|
|
|
|
actual_html = empty_narrow_html(
|
|
|
|
"This is a title",
|
|
|
|
undefined,
|
|
|
|
search_data_with_topic_without_stop_words,
|
|
|
|
);
|
|
|
|
assert.equal(
|
|
|
|
actual_html,
|
|
|
|
`<div class="empty_feed_notice">
|
|
|
|
<h4> This is a title </h4>
|
|
|
|
<div>
|
|
|
|
You searched for:
|
|
|
|
<span>topic: hello</span>
|
|
|
|
<span>searchB</span>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
`,
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
2023-04-07 11:23:26 +02:00
|
|
|
run_test("urls", () => {
|
2020-05-26 22:34:15 +02:00
|
|
|
people.add_active_user(ray);
|
|
|
|
people.add_active_user(alice);
|
|
|
|
people.add_active_user(me);
|
2018-10-18 19:41:44 +02:00
|
|
|
people.initialize_current_user(me.user_id);
|
2017-01-06 14:42:52 +01:00
|
|
|
|
2022-03-01 19:14:26 +01:00
|
|
|
let url = hash_util.pm_with_url(ray.email);
|
2023-04-11 21:04:33 +02:00
|
|
|
assert.equal(url, "#narrow/dm/22-Raymond");
|
2017-01-06 14:42:52 +01:00
|
|
|
|
2022-03-01 19:14:26 +01:00
|
|
|
url = hash_util.huddle_with_url("22,23");
|
2023-04-11 21:04:33 +02:00
|
|
|
assert.equal(url, "#narrow/dm/22,23-group");
|
2017-01-06 14:42:52 +01:00
|
|
|
|
2022-03-01 19:14:26 +01:00
|
|
|
url = hash_util.by_sender_url(ray.email);
|
2022-10-25 14:38:45 +02:00
|
|
|
assert.equal(url, "#narrow/sender/22-Raymond");
|
2017-01-19 03:53:50 +01:00
|
|
|
|
2023-04-11 21:04:33 +02:00
|
|
|
let emails = hash_util.decode_operand("dm", "22,23-group");
|
|
|
|
assert.equal(emails, "alice@example.com,ray@example.com");
|
|
|
|
|
|
|
|
emails = hash_util.decode_operand("dm", "5,22,23-group");
|
|
|
|
assert.equal(emails, "alice@example.com,ray@example.com");
|
|
|
|
|
|
|
|
emails = hash_util.decode_operand("dm", "5-group");
|
|
|
|
assert.equal(emails, "me@example.com");
|
|
|
|
|
|
|
|
// Even though we renamed "pm-with" to "dm", preexisting
|
|
|
|
// links/URLs with "pm-with" operator are decoded correctly.
|
|
|
|
emails = hash_util.decode_operand("pm-with", "22,23-group");
|
2020-07-15 01:29:15 +02:00
|
|
|
assert.equal(emails, "alice@example.com,ray@example.com");
|
2018-10-18 19:41:44 +02:00
|
|
|
|
2020-12-01 00:57:57 +01:00
|
|
|
emails = hash_util.decode_operand("pm-with", "5,22,23-group");
|
2020-07-15 01:29:15 +02:00
|
|
|
assert.equal(emails, "alice@example.com,ray@example.com");
|
2018-10-18 19:41:44 +02:00
|
|
|
|
2020-12-01 00:57:57 +01:00
|
|
|
emails = hash_util.decode_operand("pm-with", "5-group");
|
2020-07-15 01:29:15 +02:00
|
|
|
assert.equal(emails, "me@example.com");
|
2018-05-15 12:40:07 +02:00
|
|
|
});
|
2017-01-25 19:13:10 +01:00
|
|
|
|
2021-09-01 18:23:28 +02:00
|
|
|
run_test("show_empty_narrow_message", ({mock_template}) => {
|
2021-04-03 19:07:13 +02:00
|
|
|
page_params.stop_words = [];
|
|
|
|
|
2021-09-01 18:23:28 +02:00
|
|
|
mock_template("empty_feed_notice.hbs", true, (data, html) => html);
|
|
|
|
|
2017-04-25 15:25:31 +02:00
|
|
|
narrow_state.reset_current_filter();
|
2021-03-26 15:21:47 +01:00
|
|
|
narrow_banner.show_empty_narrow_message();
|
2021-09-01 18:23:28 +02:00
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
|
|
|
empty_narrow_html(
|
2022-12-08 12:35:49 +01:00
|
|
|
"translated: There are no messages here.",
|
2021-09-01 18:23:28 +02:00
|
|
|
'translated HTML: Why not <a href="#" class="empty_feed_compose_stream">start the conversation</a>?',
|
|
|
|
),
|
|
|
|
);
|
2017-01-25 19:13:10 +01:00
|
|
|
|
|
|
|
// for non-existent or private stream
|
2020-07-15 01:29:15 +02:00
|
|
|
set_filter([["stream", "Foo"]]);
|
2021-03-26 15:21:47 +01:00
|
|
|
narrow_banner.show_empty_narrow_message();
|
2021-09-01 18:23:28 +02:00
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
|
|
|
empty_narrow_html("translated: This stream does not exist or is private."),
|
|
|
|
);
|
2017-01-25 19:13:10 +01:00
|
|
|
|
2022-04-28 05:15:11 +02:00
|
|
|
// for non-subbed public stream
|
2020-07-15 01:29:15 +02:00
|
|
|
stream_data.add_sub({name: "ROME", stream_id: 99});
|
|
|
|
set_filter([["stream", "Rome"]]);
|
2021-03-26 15:21:47 +01:00
|
|
|
narrow_banner.show_empty_narrow_message();
|
2021-09-01 18:23:28 +02:00
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
|
|
|
empty_narrow_html(
|
|
|
|
"translated: You aren't subscribed to this stream and nobody has talked about that yet!",
|
|
|
|
'translated HTML: <button class="button white rounded stream_sub_unsub_button sea-green" type="button" name="subscription">Subscribe</button>',
|
|
|
|
),
|
|
|
|
);
|
2017-01-25 19:13:10 +01:00
|
|
|
|
2022-04-28 05:15:11 +02:00
|
|
|
// for non-web-public stream for spectator
|
2022-02-15 12:25:11 +01:00
|
|
|
page_params.is_spectator = true;
|
|
|
|
set_filter([["stream", "Rome"]]);
|
|
|
|
narrow_banner.show_empty_narrow_message();
|
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
|
|
|
empty_narrow_html(
|
|
|
|
"",
|
2022-04-29 12:50:45 +02:00
|
|
|
'translated HTML: This is not a <a href="/help/public-access-option">publicly accessible</a> conversation.',
|
2022-02-15 12:25:11 +01:00
|
|
|
),
|
|
|
|
);
|
|
|
|
|
|
|
|
set_filter([
|
|
|
|
["stream", "Rome"],
|
|
|
|
["topic", "foo"],
|
|
|
|
]);
|
|
|
|
narrow_banner.show_empty_narrow_message();
|
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
|
|
|
empty_narrow_html(
|
|
|
|
"",
|
2022-04-29 12:50:45 +02:00
|
|
|
'translated HTML: This is not a <a href="/help/public-access-option">publicly accessible</a> conversation.',
|
2022-02-15 12:25:11 +01:00
|
|
|
),
|
|
|
|
);
|
2022-04-29 12:50:45 +02:00
|
|
|
|
|
|
|
// for web-public stream for spectator
|
|
|
|
stream_data.add_sub({name: "web-public-stream", stream_id: 1231, is_web_public: true});
|
|
|
|
set_filter([
|
|
|
|
["stream", "web-public-stream"],
|
|
|
|
["topic", "foo"],
|
|
|
|
]);
|
|
|
|
narrow_banner.show_empty_narrow_message();
|
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
2023-03-16 14:56:35 +01:00
|
|
|
empty_narrow_html("translated: No search results.", ""),
|
2022-04-29 12:50:45 +02:00
|
|
|
);
|
2022-02-15 12:25:11 +01:00
|
|
|
page_params.is_spectator = false;
|
|
|
|
|
2020-07-15 01:29:15 +02:00
|
|
|
set_filter([["is", "starred"]]);
|
2021-03-26 15:21:47 +01:00
|
|
|
narrow_banner.show_empty_narrow_message();
|
2021-09-01 18:23:28 +02:00
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
|
|
|
empty_narrow_html(
|
2023-04-20 16:05:21 +02:00
|
|
|
"translated: You have no starred messages.",
|
2021-09-01 18:23:28 +02:00
|
|
|
'translated HTML: Learn more about starring messages <a href="/help/star-a-message">here</a>.',
|
|
|
|
),
|
|
|
|
);
|
2017-01-25 19:13:10 +01:00
|
|
|
|
2020-07-15 01:29:15 +02:00
|
|
|
set_filter([["is", "mentioned"]]);
|
2021-03-26 15:21:47 +01:00
|
|
|
narrow_banner.show_empty_narrow_message();
|
2021-09-01 18:23:28 +02:00
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
|
|
|
empty_narrow_html(
|
|
|
|
"translated: You haven't been mentioned yet!",
|
|
|
|
'translated HTML: Learn more about mentions <a href="/help/mention-a-user-or-group">here</a>.',
|
|
|
|
),
|
|
|
|
);
|
2017-01-25 19:13:10 +01:00
|
|
|
|
2023-04-07 14:03:34 +02:00
|
|
|
// organization has disabled sending direct messages
|
2022-10-31 20:40:22 +01:00
|
|
|
page_params.realm_private_message_policy =
|
|
|
|
settings_config.private_message_policy_values.disabled.code;
|
2023-04-07 14:03:34 +02:00
|
|
|
set_filter([["is", "dm"]]);
|
2022-10-31 20:40:22 +01:00
|
|
|
narrow_banner.show_empty_narrow_message();
|
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
|
|
|
empty_narrow_html(
|
2023-01-24 19:49:56 +01:00
|
|
|
"translated: You are not allowed to send direct messages in this organization.",
|
2022-10-31 20:40:22 +01:00
|
|
|
),
|
|
|
|
);
|
|
|
|
|
2023-04-07 14:03:34 +02:00
|
|
|
// sending direct messages enabled
|
2022-10-31 20:40:22 +01:00
|
|
|
page_params.realm_private_message_policy =
|
|
|
|
settings_config.private_message_policy_values.by_anyone.code;
|
2023-04-07 14:03:34 +02:00
|
|
|
set_filter([["is", "dm"]]);
|
2021-03-26 15:21:47 +01:00
|
|
|
narrow_banner.show_empty_narrow_message();
|
2021-09-01 18:23:28 +02:00
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
|
|
|
empty_narrow_html(
|
2023-01-24 19:49:56 +01:00
|
|
|
"translated: You have no direct messages yet!",
|
2021-09-01 18:23:28 +02:00
|
|
|
'translated HTML: Why not <a href="#" class="empty_feed_compose_private">start the conversation</a>?',
|
|
|
|
),
|
|
|
|
);
|
2017-01-25 19:13:10 +01:00
|
|
|
|
2020-07-15 01:29:15 +02:00
|
|
|
set_filter([["is", "unread"]]);
|
2021-03-26 15:21:47 +01:00
|
|
|
narrow_banner.show_empty_narrow_message();
|
2021-09-01 18:23:28 +02:00
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
|
|
|
empty_narrow_html("translated: You have no unread messages!"),
|
|
|
|
);
|
2017-06-18 23:50:00 +02:00
|
|
|
|
2021-07-13 10:11:51 +02:00
|
|
|
set_filter([["is", "resolved"]]);
|
|
|
|
narrow_banner.show_empty_narrow_message();
|
2021-09-01 18:23:28 +02:00
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
|
|
|
empty_narrow_html("translated: No topics are marked as resolved."),
|
|
|
|
);
|
2021-07-13 10:11:51 +02:00
|
|
|
|
2023-04-07 14:03:34 +02:00
|
|
|
// organization has disabled sending direct messages
|
2022-10-31 20:40:22 +01:00
|
|
|
page_params.realm_private_message_policy =
|
|
|
|
settings_config.private_message_policy_values.disabled.code;
|
|
|
|
|
|
|
|
// prioritize information about invalid user(s) in narrow/search
|
2023-04-11 21:04:33 +02:00
|
|
|
set_filter([["dm", ["Yo"]]]);
|
2021-03-26 15:21:47 +01:00
|
|
|
narrow_banner.show_empty_narrow_message();
|
2021-09-01 18:23:28 +02:00
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
|
|
|
empty_narrow_html("translated: This user does not exist!"),
|
|
|
|
);
|
2018-05-28 14:10:33 +02:00
|
|
|
|
2020-05-26 22:34:15 +02:00
|
|
|
people.add_active_user(alice);
|
2023-04-11 21:04:33 +02:00
|
|
|
set_filter([["dm", ["alice@example.com", "Yo"]]]);
|
2021-03-26 15:21:47 +01:00
|
|
|
narrow_banner.show_empty_narrow_message();
|
2021-09-01 18:23:28 +02:00
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
|
|
|
empty_narrow_html("translated: One or more of these users do not exist!"),
|
|
|
|
);
|
2017-01-25 19:13:10 +01:00
|
|
|
|
2023-04-11 21:04:33 +02:00
|
|
|
set_filter([["dm", "alice@example.com"]]);
|
2022-10-31 20:40:22 +01:00
|
|
|
narrow_banner.show_empty_narrow_message();
|
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
|
|
|
empty_narrow_html(
|
2023-01-24 19:49:56 +01:00
|
|
|
"translated: You are not allowed to send direct messages in this organization.",
|
2022-10-31 20:40:22 +01:00
|
|
|
),
|
|
|
|
);
|
|
|
|
|
2023-04-07 14:03:34 +02:00
|
|
|
// direct messages with a bot are possible even though
|
|
|
|
// the organization has disabled sending direct messages
|
2022-11-04 14:39:50 +01:00
|
|
|
people.add_active_user(bot);
|
2023-04-11 21:04:33 +02:00
|
|
|
set_filter([["dm", "bot@example.com"]]);
|
2022-11-04 14:39:50 +01:00
|
|
|
narrow_banner.show_empty_narrow_message();
|
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
|
|
|
empty_narrow_html(
|
2023-01-24 19:49:56 +01:00
|
|
|
"translated: You have no direct messages with Example Bot yet.",
|
2022-11-04 14:39:50 +01:00
|
|
|
'translated HTML: Why not <a href="#" class="empty_feed_compose_private">start the conversation</a>?',
|
|
|
|
),
|
|
|
|
);
|
|
|
|
|
2023-04-07 14:03:34 +02:00
|
|
|
// group direct messages with bots are not possible when
|
|
|
|
// sending direct messages is disabled
|
2023-04-11 21:04:33 +02:00
|
|
|
set_filter([["dm", bot.email + "," + alice.email]]);
|
2022-11-04 14:39:50 +01:00
|
|
|
narrow_banner.show_empty_narrow_message();
|
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
|
|
|
empty_narrow_html(
|
2023-01-24 19:49:56 +01:00
|
|
|
"translated: You are not allowed to send direct messages in this organization.",
|
2022-11-04 14:39:50 +01:00
|
|
|
),
|
|
|
|
);
|
|
|
|
|
2023-04-07 14:03:34 +02:00
|
|
|
// sending direct messages enabled
|
2022-10-31 20:40:22 +01:00
|
|
|
page_params.realm_private_message_policy =
|
|
|
|
settings_config.private_message_policy_values.by_anyone.code;
|
2023-04-11 21:04:33 +02:00
|
|
|
set_filter([["dm", "alice@example.com"]]);
|
2021-03-26 15:21:47 +01:00
|
|
|
narrow_banner.show_empty_narrow_message();
|
2021-09-01 18:23:28 +02:00
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
|
|
|
empty_narrow_html(
|
2023-01-24 19:49:56 +01:00
|
|
|
"translated: You have no direct messages with Alice Smith yet.",
|
2021-09-01 18:23:28 +02:00
|
|
|
'translated HTML: Why not <a href="#" class="empty_feed_compose_private">start the conversation</a>?',
|
|
|
|
),
|
|
|
|
);
|
2017-01-25 19:13:10 +01:00
|
|
|
|
2021-03-31 19:19:02 +02:00
|
|
|
people.add_active_user(me);
|
|
|
|
people.initialize_current_user(me.user_id);
|
2023-04-11 21:04:33 +02:00
|
|
|
set_filter([["dm", me.email]]);
|
2021-03-31 19:19:02 +02:00
|
|
|
narrow_banner.show_empty_narrow_message();
|
2021-09-01 18:23:28 +02:00
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
|
|
|
empty_narrow_html(
|
2023-01-24 19:49:56 +01:00
|
|
|
"translated: You have not sent any direct messages to yourself yet!",
|
2021-09-01 18:23:28 +02:00
|
|
|
'translated HTML: Why not <a href="#" class="empty_feed_compose_private">start a conversation with yourself</a>?',
|
|
|
|
),
|
|
|
|
);
|
2021-03-31 19:19:02 +02:00
|
|
|
|
2023-04-11 21:04:33 +02:00
|
|
|
set_filter([["dm", me.email + "," + alice.email]]);
|
2021-03-31 20:26:13 +02:00
|
|
|
narrow_banner.show_empty_narrow_message();
|
2021-09-01 18:23:28 +02:00
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
|
|
|
empty_narrow_html(
|
2023-01-24 19:49:56 +01:00
|
|
|
"translated: You have no direct messages with these users yet.",
|
2021-09-01 18:23:28 +02:00
|
|
|
'translated HTML: Why not <a href="#" class="empty_feed_compose_private">start the conversation</a>?',
|
|
|
|
),
|
|
|
|
);
|
2021-03-31 20:26:13 +02:00
|
|
|
|
2023-04-19 17:35:32 +02:00
|
|
|
// organization has disabled sending direct messages
|
|
|
|
page_params.realm_private_message_policy =
|
|
|
|
settings_config.private_message_policy_values.disabled.code;
|
|
|
|
|
|
|
|
// prioritize information about invalid user in narrow/search
|
|
|
|
set_filter([["dm-including", ["Yo"]]]);
|
|
|
|
narrow_banner.show_empty_narrow_message();
|
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
|
|
|
empty_narrow_html("translated: This user does not exist!"),
|
|
|
|
);
|
|
|
|
|
|
|
|
set_filter([["dm-including", "alice@example.com"]]);
|
|
|
|
narrow_banner.show_empty_narrow_message();
|
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
|
|
|
empty_narrow_html(
|
|
|
|
"translated: You are not allowed to send direct messages in this organization.",
|
|
|
|
),
|
|
|
|
);
|
|
|
|
|
|
|
|
// direct messages with a bot are possible even though
|
|
|
|
// the organization has disabled sending direct messages
|
|
|
|
set_filter([["dm-including", "bot@example.com"]]);
|
|
|
|
narrow_banner.show_empty_narrow_message();
|
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
|
|
|
empty_narrow_html(
|
|
|
|
"translated: You have no direct messages including Example Bot yet.",
|
|
|
|
'translated HTML: Why not <a href="#" class="empty_feed_compose_private">start the conversation</a>?',
|
|
|
|
),
|
|
|
|
);
|
|
|
|
|
|
|
|
// sending direct messages enabled
|
|
|
|
page_params.realm_private_message_policy =
|
|
|
|
settings_config.private_message_policy_values.by_anyone.code;
|
|
|
|
set_filter([["dm-including", "alice@example.com"]]);
|
|
|
|
narrow_banner.show_empty_narrow_message();
|
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
|
|
|
empty_narrow_html(
|
|
|
|
"translated: You have no direct messages including Alice Smith yet.",
|
|
|
|
'translated HTML: Why not <a href="#" class="empty_feed_compose_private">start the conversation</a>?',
|
|
|
|
),
|
|
|
|
);
|
|
|
|
|
|
|
|
set_filter([["dm-including", me.email]]);
|
|
|
|
narrow_banner.show_empty_narrow_message();
|
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
|
|
|
empty_narrow_html("translated: You don't have any direct message conversations yet."),
|
|
|
|
);
|
|
|
|
|
2020-07-15 01:29:15 +02:00
|
|
|
set_filter([["sender", "ray@example.com"]]);
|
2021-03-26 15:21:47 +01:00
|
|
|
narrow_banner.show_empty_narrow_message();
|
2021-09-01 18:23:28 +02:00
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
2022-11-22 14:03:12 +01:00
|
|
|
empty_narrow_html("translated: You haven't received any messages sent by Raymond yet."),
|
2021-09-01 18:23:28 +02:00
|
|
|
);
|
2017-01-25 19:13:10 +01:00
|
|
|
|
2020-07-15 01:29:15 +02:00
|
|
|
set_filter([["sender", "sinwar@example.com"]]);
|
2021-03-26 15:21:47 +01:00
|
|
|
narrow_banner.show_empty_narrow_message();
|
2021-09-01 18:23:28 +02:00
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
|
|
|
empty_narrow_html("translated: This user does not exist!"),
|
|
|
|
);
|
2021-03-31 18:31:49 +02:00
|
|
|
|
|
|
|
set_filter([
|
|
|
|
["sender", "alice@example.com"],
|
|
|
|
["stream", "Rome"],
|
|
|
|
]);
|
|
|
|
narrow_banner.show_empty_narrow_message();
|
2021-09-01 18:23:28 +02:00
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
2023-03-16 14:56:35 +01:00
|
|
|
empty_narrow_html("translated: No search results."),
|
2021-09-01 18:23:28 +02:00
|
|
|
);
|
2021-03-31 18:44:00 +02:00
|
|
|
|
|
|
|
set_filter([["is", "invalid"]]);
|
|
|
|
narrow_banner.show_empty_narrow_message();
|
2021-09-01 18:23:28 +02:00
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
|
|
|
empty_narrow_html(
|
2022-12-08 12:35:49 +01:00
|
|
|
"translated: There are no messages here.",
|
2021-09-01 18:23:28 +02:00
|
|
|
'translated HTML: Why not <a href="#" class="empty_feed_compose_stream">start the conversation</a>?',
|
|
|
|
),
|
|
|
|
);
|
2021-03-31 18:51:39 +02:00
|
|
|
|
2021-03-31 19:04:05 +02:00
|
|
|
const my_stream = {
|
|
|
|
name: "my stream",
|
|
|
|
stream_id: 103,
|
|
|
|
};
|
|
|
|
stream_data.add_sub(my_stream);
|
|
|
|
stream_data.subscribe_myself(my_stream);
|
|
|
|
|
|
|
|
set_filter([["stream", "my stream"]]);
|
|
|
|
narrow_banner.show_empty_narrow_message();
|
2021-09-01 18:23:28 +02:00
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
|
|
|
empty_narrow_html(
|
2022-12-08 12:35:49 +01:00
|
|
|
"translated: There are no messages here.",
|
2021-09-01 18:23:28 +02:00
|
|
|
'translated HTML: Why not <a href="#" class="empty_feed_compose_stream">start the conversation</a>?',
|
|
|
|
),
|
|
|
|
);
|
2021-03-31 19:04:05 +02:00
|
|
|
|
2021-03-31 18:51:39 +02:00
|
|
|
set_filter([["stream", ""]]);
|
|
|
|
narrow_banner.show_empty_narrow_message();
|
2021-09-01 18:23:28 +02:00
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
|
|
|
empty_narrow_html("translated: This stream does not exist or is private."),
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
run_test("show_empty_narrow_message_with_search", ({mock_template}) => {
|
|
|
|
page_params.stop_words = [];
|
|
|
|
|
|
|
|
mock_template("empty_feed_notice.hbs", true, (data, html) => html);
|
|
|
|
|
|
|
|
narrow_state.reset_current_filter();
|
|
|
|
set_filter([["search", "grail"]]);
|
|
|
|
narrow_banner.show_empty_narrow_message();
|
|
|
|
assert.match($(".empty_feed_notice_main").html(), /<span>grail<\/span>/);
|
2019-03-07 09:27:45 +01:00
|
|
|
});
|
|
|
|
|
2021-03-31 18:06:29 +02:00
|
|
|
run_test("hide_empty_narrow_message", () => {
|
|
|
|
narrow_banner.hide_empty_narrow_message();
|
2021-09-01 18:23:28 +02:00
|
|
|
assert.equal($(".empty_feed_notice").text(), "never-been-set");
|
2021-03-31 18:06:29 +02:00
|
|
|
});
|
|
|
|
|
2021-09-01 18:23:28 +02:00
|
|
|
run_test("show_search_stopwords", ({mock_template}) => {
|
2021-04-03 19:07:13 +02:00
|
|
|
page_params.stop_words = ["what", "about"];
|
|
|
|
|
2021-09-01 18:23:28 +02:00
|
|
|
mock_template("empty_feed_notice.hbs", true, (data, html) => html);
|
2019-01-28 17:44:48 +01:00
|
|
|
|
2021-09-01 18:23:28 +02:00
|
|
|
const expected_search_data = {
|
|
|
|
has_stop_word: true,
|
|
|
|
query_words: [
|
|
|
|
{query_word: "what", is_stop_word: true},
|
|
|
|
{query_word: "about", is_stop_word: true},
|
|
|
|
{query_word: "grail", is_stop_word: false},
|
|
|
|
],
|
2019-01-28 17:44:48 +01:00
|
|
|
};
|
2021-09-01 18:23:28 +02:00
|
|
|
narrow_state.reset_current_filter();
|
2020-07-15 01:29:15 +02:00
|
|
|
set_filter([["search", "what about grail"]]);
|
2021-03-26 15:21:47 +01:00
|
|
|
narrow_banner.show_empty_narrow_message();
|
2021-09-01 18:23:28 +02:00
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
2023-03-16 14:56:35 +01:00
|
|
|
empty_narrow_html("translated: No search results.", undefined, expected_search_data),
|
2021-09-01 18:23:28 +02:00
|
|
|
);
|
2019-03-07 09:27:45 +01:00
|
|
|
|
2021-09-01 18:23:28 +02:00
|
|
|
const expected_stream_search_data = {
|
|
|
|
has_stop_word: true,
|
|
|
|
stream_query: "streamA",
|
|
|
|
query_words: [
|
|
|
|
{query_word: "what", is_stop_word: true},
|
|
|
|
{query_word: "about", is_stop_word: true},
|
|
|
|
{query_word: "grail", is_stop_word: false},
|
|
|
|
],
|
|
|
|
};
|
2020-07-15 00:34:28 +02:00
|
|
|
set_filter([
|
|
|
|
["stream", "streamA"],
|
|
|
|
["search", "what about grail"],
|
|
|
|
]);
|
2021-03-26 15:21:47 +01:00
|
|
|
narrow_banner.show_empty_narrow_message();
|
2021-09-01 18:23:28 +02:00
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
2023-03-16 14:56:35 +01:00
|
|
|
empty_narrow_html("translated: No search results.", undefined, expected_stream_search_data),
|
2021-09-01 18:23:28 +02:00
|
|
|
);
|
2019-03-07 09:27:45 +01:00
|
|
|
|
2021-09-01 18:23:28 +02:00
|
|
|
const expected_stream_topic_search_data = {
|
|
|
|
has_stop_word: true,
|
|
|
|
stream_query: "streamA",
|
|
|
|
topic_query: "topicA",
|
|
|
|
query_words: [
|
|
|
|
{query_word: "what", is_stop_word: true},
|
|
|
|
{query_word: "about", is_stop_word: true},
|
|
|
|
{query_word: "grail", is_stop_word: false},
|
|
|
|
],
|
|
|
|
};
|
2020-07-15 00:34:28 +02:00
|
|
|
set_filter([
|
|
|
|
["stream", "streamA"],
|
|
|
|
["topic", "topicA"],
|
|
|
|
["search", "what about grail"],
|
|
|
|
]);
|
2021-03-26 15:21:47 +01:00
|
|
|
narrow_banner.show_empty_narrow_message();
|
2021-09-01 18:23:28 +02:00
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
|
|
|
empty_narrow_html(
|
2023-03-16 14:56:35 +01:00
|
|
|
"translated: No search results.",
|
2021-09-01 18:23:28 +02:00
|
|
|
undefined,
|
|
|
|
expected_stream_topic_search_data,
|
|
|
|
),
|
|
|
|
);
|
2018-05-15 12:40:07 +02:00
|
|
|
});
|
2018-11-30 00:20:10 +01:00
|
|
|
|
2021-09-01 18:23:28 +02:00
|
|
|
run_test("show_invalid_narrow_message", ({mock_template}) => {
|
2019-03-07 09:12:00 +01:00
|
|
|
narrow_state.reset_current_filter();
|
2021-09-01 18:23:28 +02:00
|
|
|
mock_template("empty_feed_notice.hbs", true, (data, html) => html);
|
2019-03-07 09:12:00 +01:00
|
|
|
|
2020-07-15 01:29:15 +02:00
|
|
|
stream_data.add_sub({name: "streamA", stream_id: 88});
|
|
|
|
stream_data.add_sub({name: "streamB", stream_id: 77});
|
2019-03-07 09:12:00 +01:00
|
|
|
|
2020-07-15 00:34:28 +02:00
|
|
|
set_filter([
|
|
|
|
["stream", "streamA"],
|
|
|
|
["stream", "streamB"],
|
|
|
|
]);
|
2021-03-26 15:21:47 +01:00
|
|
|
narrow_banner.show_empty_narrow_message();
|
2020-07-15 00:34:28 +02:00
|
|
|
assert.equal(
|
2021-09-01 18:23:28 +02:00
|
|
|
$(".empty_feed_notice_main").html(),
|
|
|
|
empty_narrow_html(
|
2023-03-16 14:56:35 +01:00
|
|
|
"translated: No search results.",
|
2021-09-01 18:23:28 +02:00
|
|
|
"translated HTML: <p>You are searching for messages that belong to more than one stream, which is not possible.</p>",
|
|
|
|
),
|
2020-07-15 00:34:28 +02:00
|
|
|
);
|
2019-03-07 09:12:00 +01:00
|
|
|
|
2020-07-15 00:34:28 +02:00
|
|
|
set_filter([
|
|
|
|
["topic", "topicA"],
|
|
|
|
["topic", "topicB"],
|
|
|
|
]);
|
2021-03-26 15:21:47 +01:00
|
|
|
narrow_banner.show_empty_narrow_message();
|
2020-07-15 00:34:28 +02:00
|
|
|
assert.equal(
|
2021-09-01 18:23:28 +02:00
|
|
|
$(".empty_feed_notice_main").html(),
|
|
|
|
empty_narrow_html(
|
2023-03-16 14:56:35 +01:00
|
|
|
"translated: No search results.",
|
2021-09-01 18:23:28 +02:00
|
|
|
"translated HTML: <p>You are searching for messages that belong to more than one topic, which is not possible.</p>",
|
|
|
|
),
|
2020-07-15 00:34:28 +02:00
|
|
|
);
|
2019-03-07 09:12:00 +01:00
|
|
|
|
2020-05-26 22:34:15 +02:00
|
|
|
people.add_active_user(ray);
|
|
|
|
people.add_active_user(alice);
|
2019-03-07 09:12:00 +01:00
|
|
|
|
2020-07-15 00:34:28 +02:00
|
|
|
set_filter([
|
|
|
|
["sender", "alice@example.com"],
|
|
|
|
["sender", "ray@example.com"],
|
|
|
|
]);
|
2021-03-26 15:21:47 +01:00
|
|
|
narrow_banner.show_empty_narrow_message();
|
2020-07-15 00:34:28 +02:00
|
|
|
assert.equal(
|
2021-09-01 18:23:28 +02:00
|
|
|
$(".empty_feed_notice_main").html(),
|
|
|
|
empty_narrow_html(
|
2023-03-16 14:56:35 +01:00
|
|
|
"translated: No search results.",
|
2021-09-01 18:23:28 +02:00
|
|
|
"translated HTML: <p>You are searching for messages that are sent by more than one person, which is not possible.</p>",
|
|
|
|
),
|
2020-07-15 00:34:28 +02:00
|
|
|
);
|
2019-03-07 09:12:00 +01:00
|
|
|
});
|
|
|
|
|
2023-05-07 14:45:04 +02:00
|
|
|
run_test("narrow_to_compose_target errors", ({override_rewire, disallow_rewire}) => {
|
|
|
|
override_rewire(compose_recipient, "on_compose_select_recipient_update", () => {});
|
2022-07-09 23:25:05 +02:00
|
|
|
disallow_rewire(narrow, "activate");
|
2018-11-30 00:20:10 +01:00
|
|
|
|
|
|
|
// No-op when not composing.
|
2021-02-24 15:39:43 +01:00
|
|
|
compose_state.set_message_type(false);
|
2022-07-09 23:25:05 +02:00
|
|
|
narrow.to_compose_target();
|
2018-11-30 00:20:10 +01:00
|
|
|
|
|
|
|
// No-op when empty stream.
|
2021-02-24 15:39:43 +01:00
|
|
|
compose_state.set_message_type("stream");
|
2022-10-27 00:22:29 +02:00
|
|
|
compose_state.set_stream_name("");
|
2022-07-09 23:25:05 +02:00
|
|
|
narrow.to_compose_target();
|
2021-02-24 15:39:43 +01:00
|
|
|
});
|
|
|
|
|
2022-01-08 10:27:06 +01:00
|
|
|
run_test("narrow_to_compose_target streams", ({override_rewire}) => {
|
2023-05-07 14:45:04 +02:00
|
|
|
override_rewire(compose_recipient, "on_compose_select_recipient_update", () => {});
|
2021-02-24 15:39:43 +01:00
|
|
|
const args = {called: false};
|
2022-01-08 10:27:06 +01:00
|
|
|
override_rewire(narrow, "activate", (operators, opts) => {
|
2021-02-24 15:39:43 +01:00
|
|
|
args.operators = operators;
|
|
|
|
args.opts = opts;
|
|
|
|
args.called = true;
|
|
|
|
});
|
2018-11-30 00:20:10 +01:00
|
|
|
|
2021-02-24 15:39:43 +01:00
|
|
|
compose_state.set_message_type("stream");
|
2020-07-15 01:29:15 +02:00
|
|
|
stream_data.add_sub({name: "ROME", stream_id: 99});
|
2022-10-27 00:22:29 +02:00
|
|
|
compose_state.set_stream_name("ROME");
|
2018-11-30 00:20:10 +01:00
|
|
|
|
|
|
|
// Test with existing topic
|
2021-02-24 15:39:43 +01:00
|
|
|
compose_state.topic("one");
|
2018-11-30 00:20:10 +01:00
|
|
|
args.called = false;
|
|
|
|
narrow.to_compose_target();
|
|
|
|
assert.equal(args.called, true);
|
2020-07-15 01:29:15 +02:00
|
|
|
assert.equal(args.opts.trigger, "narrow_to_compose_target");
|
2018-11-30 00:20:10 +01:00
|
|
|
assert.deepEqual(args.operators, [
|
2020-07-15 01:29:15 +02:00
|
|
|
{operator: "stream", operand: "ROME"},
|
|
|
|
{operator: "topic", operand: "one"},
|
2018-11-30 00:20:10 +01:00
|
|
|
]);
|
|
|
|
|
|
|
|
// Test with new topic
|
2021-02-24 15:39:43 +01:00
|
|
|
compose_state.topic("four");
|
2018-11-30 00:20:10 +01:00
|
|
|
args.called = false;
|
|
|
|
narrow.to_compose_target();
|
|
|
|
assert.equal(args.called, true);
|
2021-07-05 18:48:06 +02:00
|
|
|
assert.deepEqual(args.operators, [
|
|
|
|
{operator: "stream", operand: "ROME"},
|
|
|
|
{operator: "topic", operand: "four"},
|
|
|
|
]);
|
2018-11-30 00:20:10 +01:00
|
|
|
|
|
|
|
// Test with blank topic
|
2021-02-24 15:39:43 +01:00
|
|
|
compose_state.topic("");
|
2018-11-30 00:20:10 +01:00
|
|
|
args.called = false;
|
|
|
|
narrow.to_compose_target();
|
|
|
|
assert.equal(args.called, true);
|
2020-07-15 00:34:28 +02:00
|
|
|
assert.deepEqual(args.operators, [{operator: "stream", operand: "ROME"}]);
|
2018-11-30 00:20:10 +01:00
|
|
|
|
|
|
|
// Test with no topic
|
2021-02-24 15:39:43 +01:00
|
|
|
compose_state.topic(undefined);
|
2018-11-30 00:20:10 +01:00
|
|
|
args.called = false;
|
|
|
|
narrow.to_compose_target();
|
|
|
|
assert.equal(args.called, true);
|
2020-07-15 00:34:28 +02:00
|
|
|
assert.deepEqual(args.operators, [{operator: "stream", operand: "ROME"}]);
|
2021-02-24 15:39:43 +01:00
|
|
|
});
|
2018-11-30 00:20:10 +01:00
|
|
|
|
2023-04-11 21:04:33 +02:00
|
|
|
run_test("narrow_to_compose_target direct messages", ({override, override_rewire}) => {
|
2021-02-24 15:39:43 +01:00
|
|
|
const args = {called: false};
|
2022-01-08 10:27:06 +01:00
|
|
|
override_rewire(narrow, "activate", (operators, opts) => {
|
2021-02-24 15:39:43 +01:00
|
|
|
args.operators = operators;
|
|
|
|
args.opts = opts;
|
|
|
|
args.called = true;
|
|
|
|
});
|
|
|
|
|
|
|
|
let emails;
|
2022-07-10 01:06:33 +02:00
|
|
|
override(compose_pm_pill, "get_emails", () => emails);
|
2021-02-24 15:39:43 +01:00
|
|
|
|
|
|
|
compose_state.set_message_type("private");
|
2020-05-26 22:34:15 +02:00
|
|
|
people.add_active_user(ray);
|
|
|
|
people.add_active_user(alice);
|
|
|
|
people.add_active_user(me);
|
2018-11-30 00:20:10 +01:00
|
|
|
|
|
|
|
// Test with valid person
|
2021-02-24 15:39:43 +01:00
|
|
|
emails = "alice@example.com";
|
2018-11-30 00:20:10 +01:00
|
|
|
args.called = false;
|
|
|
|
narrow.to_compose_target();
|
|
|
|
assert.equal(args.called, true);
|
2023-04-11 21:04:33 +02:00
|
|
|
assert.deepEqual(args.operators, [{operator: "dm", operand: "alice@example.com"}]);
|
2018-11-30 00:20:10 +01:00
|
|
|
|
|
|
|
// Test with valid persons
|
2021-02-24 15:39:43 +01:00
|
|
|
emails = "alice@example.com,ray@example.com";
|
2018-11-30 00:20:10 +01:00
|
|
|
args.called = false;
|
|
|
|
narrow.to_compose_target();
|
|
|
|
assert.equal(args.called, true);
|
|
|
|
assert.deepEqual(args.operators, [
|
2023-04-11 21:04:33 +02:00
|
|
|
{operator: "dm", operand: "alice@example.com,ray@example.com"},
|
2018-11-30 00:20:10 +01:00
|
|
|
]);
|
|
|
|
|
2020-03-28 01:25:56 +01:00
|
|
|
// Test with some invalid persons
|
2021-02-24 15:39:43 +01:00
|
|
|
emails = "alice@example.com,random,ray@example.com";
|
2018-11-30 00:20:10 +01:00
|
|
|
args.called = false;
|
|
|
|
narrow.to_compose_target();
|
|
|
|
assert.equal(args.called, true);
|
2023-04-07 14:03:34 +02:00
|
|
|
assert.deepEqual(args.operators, [{operator: "is", operand: "dm"}]);
|
2018-11-30 00:20:10 +01:00
|
|
|
|
2020-03-28 01:25:56 +01:00
|
|
|
// Test with all invalid persons
|
2021-02-24 15:39:43 +01:00
|
|
|
emails = "alice,random,ray";
|
2018-11-30 00:20:10 +01:00
|
|
|
args.called = false;
|
|
|
|
narrow.to_compose_target();
|
|
|
|
assert.equal(args.called, true);
|
2023-04-07 14:03:34 +02:00
|
|
|
assert.deepEqual(args.operators, [{operator: "is", operand: "dm"}]);
|
2018-11-30 00:20:10 +01:00
|
|
|
|
|
|
|
// Test with no persons
|
2021-02-24 15:39:43 +01:00
|
|
|
emails = "";
|
2018-11-30 00:20:10 +01:00
|
|
|
args.called = false;
|
|
|
|
narrow.to_compose_target();
|
|
|
|
assert.equal(args.called, true);
|
2023-04-07 14:03:34 +02:00
|
|
|
assert.deepEqual(args.operators, [{operator: "is", operand: "dm"}]);
|
2018-11-30 00:20:10 +01:00
|
|
|
});
|
2022-12-15 15:03:56 +01:00
|
|
|
|
2022-12-15 15:22:33 +01:00
|
|
|
run_test("narrow_compute_title", ({override}) => {
|
2022-12-15 15:03:56 +01:00
|
|
|
// Only tests cases where the narrow title is different from the filter title.
|
|
|
|
let filter;
|
|
|
|
|
2022-12-15 15:22:33 +01:00
|
|
|
// Recent conversations & All messages have `undefined` filter.
|
|
|
|
filter = undefined;
|
|
|
|
override(recent_topics_util, "is_visible", () => true);
|
|
|
|
assert.equal(narrow.compute_narrow_title(filter), "translated: Recent conversations");
|
|
|
|
|
|
|
|
override(recent_topics_util, "is_visible", () => false);
|
|
|
|
assert.equal(narrow.compute_narrow_title(filter), "translated: All messages");
|
|
|
|
|
2022-12-15 15:03:56 +01:00
|
|
|
// Search & uncommon narrows
|
|
|
|
filter = new Filter([{operator: "search", operand: "potato"}]);
|
|
|
|
assert.equal(narrow.compute_narrow_title(filter), "translated: Search results");
|
|
|
|
|
|
|
|
filter = new Filter([{operator: "sender", operand: "me"}]);
|
|
|
|
assert.equal(narrow.compute_narrow_title(filter), "translated: Search results");
|
|
|
|
|
|
|
|
// Stream narrows
|
|
|
|
const sub = {
|
|
|
|
name: "Foo",
|
|
|
|
stream_id: 43,
|
|
|
|
};
|
|
|
|
stream_data.add_sub(sub);
|
|
|
|
|
|
|
|
filter = new Filter([
|
|
|
|
{operator: "stream", operand: "foo"},
|
|
|
|
{operator: "topic", operand: "bar"},
|
|
|
|
]);
|
|
|
|
assert.equal(narrow.compute_narrow_title(filter), "#Foo > bar");
|
|
|
|
|
|
|
|
filter = new Filter([{operator: "stream", operand: "foo"}]);
|
|
|
|
assert.equal(narrow.compute_narrow_title(filter), "#Foo");
|
|
|
|
|
|
|
|
filter = new Filter([{operator: "stream", operand: "Elephant"}]);
|
|
|
|
assert.equal(narrow.compute_narrow_title(filter), "translated: Unknown stream #Elephant");
|
|
|
|
|
2023-04-11 21:04:33 +02:00
|
|
|
// Direct messages with narrows
|
2022-12-15 15:03:56 +01:00
|
|
|
const joe = {
|
|
|
|
email: "joe@example.com",
|
|
|
|
user_id: 31,
|
|
|
|
full_name: "joe",
|
|
|
|
};
|
|
|
|
people.add_active_user(joe);
|
|
|
|
|
2023-04-11 21:04:33 +02:00
|
|
|
filter = new Filter([{operator: "dm", operand: "joe@example.com"}]);
|
2022-12-15 15:03:56 +01:00
|
|
|
assert.equal(narrow.compute_narrow_title(filter), "joe");
|
|
|
|
|
2023-04-11 21:04:33 +02:00
|
|
|
filter = new Filter([{operator: "dm", operand: "joe@example.com,sally@doesnotexist.com"}]);
|
2022-12-15 15:03:56 +01:00
|
|
|
blueslip.expect("warn", "Unknown emails: joe@example.com,sally@doesnotexist.com");
|
|
|
|
assert.equal(narrow.compute_narrow_title(filter), "translated: Invalid users");
|
|
|
|
|
2023-04-11 21:04:33 +02:00
|
|
|
filter = new Filter([{operator: "dm", operand: "sally@doesnotexist.com"}]);
|
2022-12-15 15:03:56 +01:00
|
|
|
blueslip.expect("warn", "Unknown emails: sally@doesnotexist.com");
|
|
|
|
assert.equal(narrow.compute_narrow_title(filter), "translated: Invalid user");
|
|
|
|
});
|