mirror of
https://github.com/zulip/zulip.git
synced 2025-10-30 19:43:47 +00:00
compose: Transform stream/topic urls on paste.
Transforming valid stream/topic urls to the #**stream>topic** syntax. - A valid url contains a stream and optionally a topic but nothing else, and in that order. It must belong to the same origin as the Zulip server. The stream id present in the pasted url should correspond to an actual stream in the current server. - `near` links are not transformed. - Use-mention distinction is respected by not transforming a valid url if pasted using `Ctrl+Shift+V`. - No transformation occurs inside a code block. - On pressing `Ctrl+Z` after pasting, the actual pasted link is restored. - No transformation occurs if the url is pasted over an existing url in a markdown link syntax. - No transformation occurs if the stream or topic name contained in the pasted url is known to produce broken stream/topic syntax links (as per #30071). Fixes #29136
This commit is contained in:
@@ -6,6 +6,54 @@ const {zrequire} = require("./lib/namespace");
|
||||
const {run_test} = require("./lib/test");
|
||||
|
||||
const copy_and_paste = zrequire("copy_and_paste");
|
||||
const stream_data = zrequire("stream_data");
|
||||
|
||||
stream_data.add_sub({
|
||||
stream_id: 4,
|
||||
name: "Rome",
|
||||
});
|
||||
|
||||
run_test("try_stream_topic_syntax_text", () => {
|
||||
const test_cases = [
|
||||
[
|
||||
"http://zulip.zulipdev.com/#narrow/stream/4-Rome/topic/old.20FAILED.20EXPORT",
|
||||
"#**Rome>old FAILED EXPORT**",
|
||||
],
|
||||
[
|
||||
"http://zulip.zulipdev.com/#narrow/stream/4-Rome/topic/100.25.20profits",
|
||||
"#**Rome>100% profits**",
|
||||
],
|
||||
[
|
||||
"http://zulip.zulipdev.com/#narrow/stream/4-Rome/topic/old.20API.20wasn't.20compiling.20erratically",
|
||||
"#**Rome>old API wasn't compiling erratically**",
|
||||
],
|
||||
|
||||
["http://different.origin.com/#narrow/stream/4-Rome/topic/old.20FAILED.20EXPORT"],
|
||||
|
||||
// malformed urls
|
||||
["http://zulip.zulipdev.com/narrow/stream/4-Rome/topic/old.20FAILED.20EXPORT"],
|
||||
["http://zulip.zulipdev.com/#not_narrow/stream/4-Rome/topic/old.20FAILED.20EXPORT"],
|
||||
["http://zulip.zulipdev.com/#narrow/not_stream/4-Rome/topic/old.20FAILED.20EXPORT"],
|
||||
["http://zulip.zulipdev.com/#narrow/stream/4-Rome/not_topic/old.20FAILED.20EXPORT"],
|
||||
["http://zulip.zulipdev.com/#narrow/stream/4-Rome/topic/old.20FAILED.20EXPORT/near/100"],
|
||||
["http://zulip.zulipdev.com/#narrow/stream/4-Rome/", "#**Rome**"],
|
||||
["http://zulip.zulipdev.com/#narrow/stream/4-Rome/topic"],
|
||||
["http://zulip.zulipdev.com/#narrow/topic/cheese"],
|
||||
["http://zulip.zulipdev.com/#narrow/topic/pizza/stream/Rome"],
|
||||
|
||||
// characters which are known to produce broken #**stream>topic** urls.
|
||||
["http://zulip.zulipdev.com/#narrow/stream/4-Rome/topic/100.25.20profits.60"],
|
||||
["http://zulip.zulipdev.com/#narrow/stream/4-Rome/topic/100.25.20*profits"],
|
||||
["http://zulip.zulipdev.com/#narrow/stream/4-Rome/topic/.24.24 100.25.20profits"],
|
||||
["http://zulip.zulipdev.com/#narrow/stream/4-Rome/topic/>100.25.20profits"],
|
||||
];
|
||||
|
||||
for (const test_case of test_cases) {
|
||||
const result = copy_and_paste.try_stream_topic_syntax_text(test_case[0]);
|
||||
const expected = test_case[1] ?? null;
|
||||
assert.equal(result, expected, "Failed for url: " + test_case[0]);
|
||||
}
|
||||
});
|
||||
|
||||
run_test("maybe_transform_html", () => {
|
||||
// Copied HTML from VS Code
|
||||
|
||||
Reference in New Issue
Block a user