2020-08-01 03:43:15 +02:00
|
|
|
"use strict";
|
|
|
|
|
2020-11-30 23:46:45 +01:00
|
|
|
const {strict: assert} = require("assert");
|
|
|
|
|
2022-07-09 23:25:05 +02:00
|
|
|
const {mock_esm, zrequire} = require("../zjsunit/namespace");
|
2020-12-01 00:39:47 +01:00
|
|
|
const {run_test} = require("../zjsunit/test");
|
2022-12-15 15:03:56 +01:00
|
|
|
const blueslip = require("../zjsunit/zblueslip");
|
2021-02-21 15:38:51 +01:00
|
|
|
const $ = require("../zjsunit/zjquery");
|
2021-03-25 22:35:45 +01:00
|
|
|
const {page_params} = require("../zjsunit/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");
|
zjsunit: Remove rewiremock dependency.
We now just use a module._load hook to inject
stubs into our code.
For conversion purposes I temporarily maintain
the API of rewiremock, apart from the enable/disable
pieces, but I will make a better wrapper in an
upcoming commit.
We can detect when rewiremock is called after
zrequire now, and I fix all the violations in
this commit, mostly by using override.
We can also detect when a mock is needlessly
created, and I fix all the violations in this
commit.
The one minor nuisance that this commit introduces
is that you can only stub out modules in the Zulip
source tree, which is now static/js. This should
not really be a problem--there are usually better
techniques to deal with third party depenencies.
In the prior commit I show a typical workaround,
which is to create a one-line wrapper in your
test code. It's often the case that you can simply
use override(), as well.
In passing I kill off `reset_modules`, and I
eliminated the second argument to zrequire,
which dates back to pre-es6 days.
2021-03-06 12:47:54 +01:00
|
|
|
const {Filter} = zrequire("../js/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");
|
2017-04-25 15:25:31 +02:00
|
|
|
|
2022-07-10 01:06:33 +02:00
|
|
|
const compose_pm_pill = mock_esm("../../static/js/compose_pm_pill");
|
2022-04-29 12:48:19 +02:00
|
|
|
mock_esm("../../static/js/spectators", {
|
2022-11-17 23:33:43 +01:00
|
|
|
login_to_access() {},
|
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,
|
|
|
|
};
|
|
|
|
return require("../../static/templates/empty_feed_notice.hbs")(opts);
|
|
|
|
}
|
|
|
|
|
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-04-01 10:43:45 +02:00
|
|
|
function hide_all_empty_narrow_messages() {
|
|
|
|
const all_empty_narrow_messages = [
|
|
|
|
".empty_feed_notice",
|
|
|
|
"#empty_narrow_message",
|
|
|
|
"#nonsubbed_private_nonexistent_stream_narrow_message",
|
|
|
|
"#nonsubbed_stream_narrow_message",
|
|
|
|
"#empty_star_narrow_message",
|
|
|
|
"#empty_narrow_all_mentioned",
|
|
|
|
"#empty_narrow_all_private_message",
|
|
|
|
"#no_unread_narrow_message",
|
|
|
|
"#non_existing_user",
|
|
|
|
"#non_existing_users",
|
|
|
|
"#empty_narrow_private_message",
|
|
|
|
"#empty_narrow_self_private_message",
|
|
|
|
"#empty_narrow_multi_private_message",
|
|
|
|
"#empty_narrow_group_private_message",
|
|
|
|
"#silent_user",
|
|
|
|
"#empty_search_narrow_message",
|
2021-07-13 10:11:51 +02:00
|
|
|
"#empty_narrow_resolved_topics",
|
2021-04-01 10:43:45 +02:00
|
|
|
];
|
|
|
|
for (const selector of all_empty_narrow_messages) {
|
|
|
|
$(selector).hide();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
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>
|
|
|
|
`,
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
2020-07-15 01:29:15 +02:00
|
|
|
run_test("uris", () => {
|
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);
|
2022-10-25 14:38:45 +02:00
|
|
|
assert.equal(url, "#narrow/pm-with/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");
|
|
|
|
assert.equal(url, "#narrow/pm-with/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
|
|
|
|
2020-12-01 00:57:57 +01:00
|
|
|
let 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-04-01 10:43:45 +02:00
|
|
|
hide_all_empty_narrow_messages();
|
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-04-01 10:43:45 +02:00
|
|
|
hide_all_empty_narrow_messages();
|
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-04-01 10:43:45 +02:00
|
|
|
hide_all_empty_narrow_messages();
|
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"]]);
|
|
|
|
hide_all_empty_narrow_messages();
|
|
|
|
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"],
|
|
|
|
]);
|
|
|
|
hide_all_empty_narrow_messages();
|
|
|
|
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"],
|
|
|
|
]);
|
|
|
|
hide_all_empty_narrow_messages();
|
|
|
|
narrow_banner.show_empty_narrow_message();
|
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
2022-12-08 12:35:49 +01:00
|
|
|
empty_narrow_html("translated: There are no messages here.", ""),
|
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-04-01 10:43:45 +02:00
|
|
|
hide_all_empty_narrow_messages();
|
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 starred anything yet!",
|
|
|
|
'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-04-01 10:43:45 +02:00
|
|
|
hide_all_empty_narrow_messages();
|
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
|
|
|
|
2022-10-31 20:40:22 +01:00
|
|
|
// organization has disabled sending private messages
|
|
|
|
page_params.realm_private_message_policy =
|
|
|
|
settings_config.private_message_policy_values.disabled.code;
|
|
|
|
set_filter([["is", "private"]]);
|
|
|
|
hide_all_empty_narrow_messages();
|
|
|
|
narrow_banner.show_empty_narrow_message();
|
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
|
|
|
empty_narrow_html(
|
|
|
|
"translated: You are not allowed to send private messages in this organization.",
|
|
|
|
),
|
|
|
|
);
|
|
|
|
|
|
|
|
// sending private messages enabled
|
|
|
|
page_params.realm_private_message_policy =
|
|
|
|
settings_config.private_message_policy_values.by_anyone.code;
|
2020-07-15 01:29:15 +02:00
|
|
|
set_filter([["is", "private"]]);
|
2021-04-01 10:43:45 +02:00
|
|
|
hide_all_empty_narrow_messages();
|
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 private messages yet!",
|
|
|
|
'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-04-01 10:43:45 +02:00
|
|
|
hide_all_empty_narrow_messages();
|
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"]]);
|
|
|
|
hide_all_empty_narrow_messages();
|
|
|
|
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
|
|
|
|
2022-10-31 20:40:22 +01:00
|
|
|
// organization has disabled sending private messages
|
|
|
|
page_params.realm_private_message_policy =
|
|
|
|
settings_config.private_message_policy_values.disabled.code;
|
|
|
|
|
|
|
|
// prioritize information about invalid user(s) in narrow/search
|
2020-07-15 01:29:15 +02:00
|
|
|
set_filter([["pm-with", ["Yo"]]]);
|
2021-04-01 10:43:45 +02:00
|
|
|
hide_all_empty_narrow_messages();
|
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);
|
2020-07-15 01:29:15 +02:00
|
|
|
set_filter([["pm-with", ["alice@example.com", "Yo"]]]);
|
2021-04-01 10:43:45 +02:00
|
|
|
hide_all_empty_narrow_messages();
|
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
|
|
|
|
2022-10-31 20:40:22 +01:00
|
|
|
set_filter([["pm-with", "alice@example.com"]]);
|
|
|
|
hide_all_empty_narrow_messages();
|
|
|
|
narrow_banner.show_empty_narrow_message();
|
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
|
|
|
empty_narrow_html(
|
|
|
|
"translated: You are not allowed to send private messages in this organization.",
|
|
|
|
),
|
|
|
|
);
|
|
|
|
|
2022-11-04 14:39:50 +01:00
|
|
|
// private messages with a bot are possible even though
|
|
|
|
// the organization has disabled sending private messages
|
|
|
|
people.add_active_user(bot);
|
|
|
|
set_filter([["pm-with", "bot@example.com"]]);
|
|
|
|
hide_all_empty_narrow_messages();
|
|
|
|
narrow_banner.show_empty_narrow_message();
|
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
|
|
|
empty_narrow_html(
|
2022-11-22 14:03:12 +01:00
|
|
|
"translated: You have no private 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>?',
|
|
|
|
),
|
|
|
|
);
|
|
|
|
|
|
|
|
// group private messages with bots are not possible when
|
|
|
|
// sending private messages is disabled
|
|
|
|
set_filter([["pm-with", bot.email + "," + alice.email]]);
|
|
|
|
hide_all_empty_narrow_messages();
|
|
|
|
narrow_banner.show_empty_narrow_message();
|
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
|
|
|
empty_narrow_html(
|
|
|
|
"translated: You are not allowed to send private messages in this organization.",
|
|
|
|
),
|
|
|
|
);
|
|
|
|
|
2022-10-31 20:40:22 +01:00
|
|
|
// sending private messages enabled
|
|
|
|
page_params.realm_private_message_policy =
|
|
|
|
settings_config.private_message_policy_values.by_anyone.code;
|
2020-07-15 01:29:15 +02:00
|
|
|
set_filter([["pm-with", "alice@example.com"]]);
|
2021-04-01 10:43:45 +02:00
|
|
|
hide_all_empty_narrow_messages();
|
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-11-22 14:03:12 +01:00
|
|
|
"translated: You have no private 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);
|
|
|
|
set_filter([["pm-with", me.email]]);
|
|
|
|
hide_all_empty_narrow_messages();
|
|
|
|
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 not sent any private messages to yourself yet!",
|
|
|
|
'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
|
|
|
|
2021-03-31 20:26:13 +02:00
|
|
|
set_filter([["pm-with", me.email + "," + alice.email]]);
|
|
|
|
hide_all_empty_narrow_messages();
|
|
|
|
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-11-08 12:56:56 +01:00
|
|
|
"translated: You have no private 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
|
|
|
|
2022-10-31 20:40:22 +01:00
|
|
|
// organization has disabled sending private 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([["group-pm-with", ["Yo"]]]);
|
|
|
|
hide_all_empty_narrow_messages();
|
|
|
|
narrow_banner.show_empty_narrow_message();
|
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
|
|
|
empty_narrow_html("translated: This user does not exist!"),
|
|
|
|
);
|
|
|
|
|
2020-07-15 01:29:15 +02:00
|
|
|
set_filter([["group-pm-with", "alice@example.com"]]);
|
2021-04-01 10:43:45 +02:00
|
|
|
hide_all_empty_narrow_messages();
|
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-10-31 20:40:22 +01:00
|
|
|
"translated: You are not allowed to send group private messages in this organization.",
|
2021-09-01 18:23:28 +02:00
|
|
|
),
|
|
|
|
);
|
2017-09-24 19:26:51 +02:00
|
|
|
|
2022-11-04 14:39:50 +01:00
|
|
|
// group private messages with bots are not possible when
|
|
|
|
// sending private messages is disabled
|
|
|
|
set_filter([["group-pm-with", "bot@example.com"]]);
|
|
|
|
hide_all_empty_narrow_messages();
|
|
|
|
narrow_banner.show_empty_narrow_message();
|
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
|
|
|
empty_narrow_html(
|
|
|
|
"translated: You are not allowed to send group private messages in this organization.",
|
|
|
|
),
|
|
|
|
);
|
|
|
|
|
2022-10-31 20:40:22 +01:00
|
|
|
// sending private messages enabled
|
|
|
|
page_params.realm_private_message_policy =
|
|
|
|
settings_config.private_message_policy_values.by_anyone.code;
|
|
|
|
set_filter([["group-pm-with", "alice@example.com"]]);
|
2022-10-31 20:35:54 +01:00
|
|
|
hide_all_empty_narrow_messages();
|
|
|
|
narrow_banner.show_empty_narrow_message();
|
|
|
|
assert.equal(
|
|
|
|
$(".empty_feed_notice_main").html(),
|
2022-10-31 20:40:22 +01:00
|
|
|
empty_narrow_html(
|
2022-11-22 14:03:12 +01:00
|
|
|
"translated: You have no group private messages with Alice Smith yet.",
|
2022-10-31 20:40:22 +01:00
|
|
|
'translated HTML: Why not <a href="#" class="empty_feed_compose_private">start the conversation</a>?',
|
|
|
|
),
|
2022-10-31 20:35:54 +01:00
|
|
|
);
|
|
|
|
|
2020-07-15 01:29:15 +02:00
|
|
|
set_filter([["sender", "ray@example.com"]]);
|
2021-04-01 10:43:45 +02:00
|
|
|
hide_all_empty_narrow_messages();
|
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-04-01 10:43:45 +02:00
|
|
|
hide_all_empty_narrow_messages();
|
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"],
|
|
|
|
]);
|
|
|
|
hide_all_empty_narrow_messages();
|
|
|
|
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:44:00 +02:00
|
|
|
|
|
|
|
set_filter([["is", "invalid"]]);
|
|
|
|
hide_all_empty_narrow_messages();
|
|
|
|
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"]]);
|
|
|
|
hide_all_empty_narrow_messages();
|
|
|
|
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", ""]]);
|
|
|
|
hide_all_empty_narrow_messages();
|
|
|
|
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"]]);
|
|
|
|
hide_all_empty_narrow_messages();
|
|
|
|
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-04-01 10:43:45 +02:00
|
|
|
hide_all_empty_narrow_messages();
|
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: No search results", undefined, expected_search_data),
|
|
|
|
);
|
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-04-01 10:43:45 +02:00
|
|
|
hide_all_empty_narrow_messages();
|
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: No search results", undefined, expected_stream_search_data),
|
|
|
|
);
|
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-04-01 10:43:45 +02:00
|
|
|
hide_all_empty_narrow_messages();
|
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: No search results",
|
|
|
|
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-04-01 10:43:45 +02:00
|
|
|
hide_all_empty_narrow_messages();
|
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(
|
|
|
|
"translated: No search results",
|
|
|
|
"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-04-01 10:43:45 +02:00
|
|
|
hide_all_empty_narrow_messages();
|
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(
|
|
|
|
"translated: No search results",
|
|
|
|
"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-04-01 10:43:45 +02:00
|
|
|
hide_all_empty_narrow_messages();
|
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(
|
|
|
|
"translated: No search results",
|
|
|
|
"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
|
|
|
});
|
|
|
|
|
2022-07-09 23:25:05 +02:00
|
|
|
run_test("narrow_to_compose_target errors", ({disallow_rewire}) => {
|
|
|
|
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");
|
|
|
|
compose_state.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}) => {
|
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});
|
2021-02-24 15:39:43 +01:00
|
|
|
compose_state.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
|
|
|
|
2022-07-10 01:06:33 +02:00
|
|
|
run_test("narrow_to_compose_target PMs", ({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);
|
2020-07-15 00:34:28 +02:00
|
|
|
assert.deepEqual(args.operators, [{operator: "pm-with", 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, [
|
2020-07-15 01:29:15 +02:00
|
|
|
{operator: "pm-with", 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);
|
2020-07-15 00:34:28 +02:00
|
|
|
assert.deepEqual(args.operators, [{operator: "is", operand: "private"}]);
|
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);
|
2020-07-15 00:34:28 +02:00
|
|
|
assert.deepEqual(args.operators, [{operator: "is", operand: "private"}]);
|
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);
|
2020-07-15 00:34:28 +02:00
|
|
|
assert.deepEqual(args.operators, [{operator: "is", operand: "private"}]);
|
2018-11-30 00:20:10 +01:00
|
|
|
});
|
2022-12-15 15:03:56 +01:00
|
|
|
|
|
|
|
run_test("narrow_compute_title", () => {
|
|
|
|
// Only tests cases where the narrow title is different from the filter title.
|
|
|
|
let filter;
|
|
|
|
|
|
|
|
// 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");
|
|
|
|
|
|
|
|
// Private messages with narrows
|
|
|
|
const joe = {
|
|
|
|
email: "joe@example.com",
|
|
|
|
user_id: 31,
|
|
|
|
full_name: "joe",
|
|
|
|
};
|
|
|
|
people.add_active_user(joe);
|
|
|
|
|
|
|
|
filter = new Filter([{operator: "pm-with", operand: "joe@example.com"}]);
|
|
|
|
assert.equal(narrow.compute_narrow_title(filter), "joe");
|
|
|
|
|
|
|
|
filter = new Filter([{operator: "pm-with", operand: "joe@example.com,sally@doesnotexist.com"}]);
|
|
|
|
blueslip.expect("warn", "Unknown emails: joe@example.com,sally@doesnotexist.com");
|
|
|
|
assert.equal(narrow.compute_narrow_title(filter), "translated: Invalid users");
|
|
|
|
|
|
|
|
filter = new Filter([{operator: "pm-with", operand: "sally@doesnotexist.com"}]);
|
|
|
|
blueslip.expect("warn", "Unknown emails: sally@doesnotexist.com");
|
|
|
|
assert.equal(narrow.compute_narrow_title(filter), "translated: Invalid user");
|
|
|
|
});
|