mirror of
https://github.com/zulip/zulip.git
synced 2025-11-22 23:43:38 +00:00
committed by
Tim Abbott
parent
771db7fb90
commit
b650b6b38c
@@ -896,20 +896,14 @@ user_pill.get_user_ids = function () {
|
||||
assert.deepEqual(returned, reference);
|
||||
}
|
||||
|
||||
var all_items = [
|
||||
{
|
||||
special_item_text: 'translated: all (Notify stream)',
|
||||
email: 'all',
|
||||
var all_items = _.map(['all', 'everyone', 'stream'], function (mention) {
|
||||
return {
|
||||
special_item_text: 'translated: ' + mention +" (Notify stream)",
|
||||
email: mention,
|
||||
pm_recipient_count: Infinity,
|
||||
full_name: 'all',
|
||||
},
|
||||
{
|
||||
special_item_text: 'translated: everyone (Notify stream)',
|
||||
email: 'everyone',
|
||||
pm_recipient_count: Infinity,
|
||||
full_name: 'everyone',
|
||||
},
|
||||
];
|
||||
full_name: mention,
|
||||
};
|
||||
});
|
||||
|
||||
var people_with_all = global.people.get_realm_persons().concat(all_items);
|
||||
var all_mentions = people_with_all.concat(global.user_groups.get_realm_user_groups());
|
||||
@@ -1094,20 +1088,14 @@ user_pill.get_user_ids = function () {
|
||||
}());
|
||||
|
||||
(function test_typeahead_results() {
|
||||
var all_items = [
|
||||
{
|
||||
special_item_text: 'all (translated: Notify stream)',
|
||||
email: 'all',
|
||||
var all_items = _.map(['all', 'everyone', 'stream'], function (mention) {
|
||||
return {
|
||||
special_item_text: 'translated: ' + mention +" (Notify stream)",
|
||||
email: mention,
|
||||
pm_recipient_count: Infinity,
|
||||
full_name: 'all',
|
||||
},
|
||||
{
|
||||
special_item_text: 'everyone (translated: Notify stream)',
|
||||
email: 'everyone',
|
||||
pm_recipient_count: Infinity,
|
||||
full_name: 'everyone',
|
||||
},
|
||||
];
|
||||
full_name: mention,
|
||||
};
|
||||
});
|
||||
var people_with_all = global.people.get_realm_persons().concat(all_items);
|
||||
var all_mentions = people_with_all.concat(global.user_groups.get_realm_user_groups());
|
||||
var stream_list = [denmark_stream, sweden_stream, netherland_stream];
|
||||
|
||||
@@ -386,6 +386,20 @@ var bugdown_data = JSON.parse(fs.readFileSync(path.join(__dirname, '../../zerver
|
||||
assert.equal(message.mentioned, true);
|
||||
assert.equal(message.mentioned_me_directly, true);
|
||||
|
||||
input = "test @**everyone**";
|
||||
message = {subject: "No links here", raw_content: input};
|
||||
markdown.apply_markdown(message);
|
||||
assert.equal(message.is_me_message, false);
|
||||
assert.equal(message.mentioned, true);
|
||||
assert.equal(message.mentioned_me_directly, false);
|
||||
|
||||
input = "test @**stream**";
|
||||
message = {subject: "No links here", raw_content: input};
|
||||
markdown.apply_markdown(message);
|
||||
assert.equal(message.is_me_message, false);
|
||||
assert.equal(message.mentioned, true);
|
||||
assert.equal(message.mentioned_me_directly, false);
|
||||
|
||||
input = "test @all";
|
||||
message = {subject: "No links here", raw_content: input};
|
||||
markdown.apply_markdown(message);
|
||||
|
||||
@@ -166,6 +166,13 @@ zrequire('util');
|
||||
'some text before only @**everyone**',
|
||||
];
|
||||
|
||||
var messages_with_stream_mentions = [
|
||||
'@**stream**',
|
||||
'some text before @**stream** some text after',
|
||||
'@**stream** some text after only',
|
||||
'some text before only @**stream**',
|
||||
];
|
||||
|
||||
var messages_without_all_mentions = [
|
||||
'@all',
|
||||
'some text before @all some text after',
|
||||
@@ -183,6 +190,16 @@ zrequire('util');
|
||||
'`@**everyone**`',
|
||||
'some_email@**everyone**.com',
|
||||
];
|
||||
|
||||
var messages_without_stream_mentions = [
|
||||
'some text before @stream some text after',
|
||||
'@stream',
|
||||
'`@stream`',
|
||||
'some_email@stream.com',
|
||||
'`@**stream**`',
|
||||
'some_email@**stream**.com',
|
||||
];
|
||||
|
||||
var i;
|
||||
for (i=0; i<messages_with_all_mentions.length; i += 1) {
|
||||
assert(util.is_all_or_everyone_mentioned(messages_with_all_mentions[i]));
|
||||
@@ -192,6 +209,10 @@ zrequire('util');
|
||||
assert(util.is_all_or_everyone_mentioned(messages_with_everyone_mentions[i]));
|
||||
}
|
||||
|
||||
for (i=0; i<messages_with_stream_mentions.length; i += 1) {
|
||||
assert(util.is_all_or_everyone_mentioned(messages_with_stream_mentions[i]));
|
||||
}
|
||||
|
||||
for (i=0; i<messages_without_all_mentions.length; i += 1) {
|
||||
assert(!util.is_all_or_everyone_mentioned(messages_without_everyone_mentions[i]));
|
||||
}
|
||||
@@ -199,6 +220,10 @@ zrequire('util');
|
||||
for (i=0; i<messages_without_everyone_mentions.length; i += 1) {
|
||||
assert(!util.is_all_or_everyone_mentioned(messages_without_everyone_mentions[i]));
|
||||
}
|
||||
|
||||
for (i=0; i<messages_without_stream_mentions.length; i += 1) {
|
||||
assert(!util.is_all_or_everyone_mentioned(messages_without_stream_mentions[i]));
|
||||
}
|
||||
}());
|
||||
|
||||
(function test_move_array_elements_to_front() {
|
||||
|
||||
@@ -735,8 +735,8 @@ exports.initialize = function () {
|
||||
if (data !== undefined && data.mentioned !== undefined) {
|
||||
var email = data.mentioned.email;
|
||||
|
||||
// warn if @all or @everyone is mentioned
|
||||
if (data.mentioned.full_name === 'all' || data.mentioned.full_name === 'everyone') {
|
||||
// warn if @all, @everyone or @stream is mentioned
|
||||
if (data.mentioned.full_name === 'all' || data.mentioned.full_name === 'everyone' || data.mentioned.full_name === 'stream') {
|
||||
return; // don't check if @all or @everyone is subscribed to a stream
|
||||
}
|
||||
|
||||
|
||||
@@ -374,7 +374,7 @@ exports.compose_content_begins_typeahead = function (query) {
|
||||
|
||||
this.completing = 'mention';
|
||||
this.token = current_token;
|
||||
var all_items = _.map(['all', 'everyone'], function (mention) {
|
||||
var all_items = _.map(['all', 'everyone', 'stream'], function (mention) {
|
||||
return {
|
||||
special_item_text: i18n.t("__wildcard_mention_token__ (Notify stream)",
|
||||
{wildcard_mention_token: mention}),
|
||||
|
||||
@@ -57,7 +57,7 @@ exports.apply_markdown = function (message) {
|
||||
return '<span class="user-mention" data-user-id="' + person.user_id + '">' +
|
||||
'@' + person.full_name +
|
||||
'</span>';
|
||||
} else if (name === 'all' || name === 'everyone') {
|
||||
} else if (name === 'all' || name === 'everyone' || name === 'stream') {
|
||||
message.mentioned = true;
|
||||
return '<span class="user-mention" data-user-id="*">' +
|
||||
'@' + name +
|
||||
|
||||
@@ -185,10 +185,10 @@ exports.compare_by_pms = function (user_a, user_b) {
|
||||
};
|
||||
|
||||
function compare_for_at_mentioning(person_a, person_b, tertiary_compare, current_stream) {
|
||||
// give preference to "all" or "everyone"
|
||||
if (person_a.email === "all" || person_a.email === "everyone") {
|
||||
// give preference to "all", "everyone" or "stream"
|
||||
if (person_a.email === "all" || person_a.email === "everyone" || person_a.email === "stream") {
|
||||
return -1;
|
||||
} else if (person_b.email === "all" || person_b.email === "everyone") {
|
||||
} else if (person_b.email === "all" || person_b.email === "everyone" || person_b.email === "stream") {
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
@@ -198,7 +198,7 @@ exports.CachedValue.prototype = {
|
||||
};
|
||||
|
||||
exports.is_all_or_everyone_mentioned = function (message_content) {
|
||||
var all_everyone_re = /(^|\s)(@\*{2}(all|everyone)\*{2})($|\s)/;
|
||||
var all_everyone_re = /(^|\s)(@\*{2}(all|everyone|stream)\*{2})($|\s)/;
|
||||
return all_everyone_re.test(message_content);
|
||||
};
|
||||
|
||||
|
||||
@@ -5,10 +5,10 @@ import re
|
||||
|
||||
# Match multi-word string between @** ** or match any one-word
|
||||
# sequences after @
|
||||
find_mentions = r'(?<![^\s\'\"\(,:<])@(\*\*[^\*]+\*\*|all|everyone)'
|
||||
find_mentions = r'(?<![^\s\'\"\(,:<])@(\*\*[^\*]+\*\*|all|everyone|stream)'
|
||||
user_group_mentions = r'(?<![^\s\'\"\(,:<])@(\*[^\*]+\*)'
|
||||
|
||||
wildcards = ['all', 'everyone']
|
||||
wildcards = ['all', 'everyone', 'stream']
|
||||
|
||||
def user_mention_matches_wildcard(mention: Text) -> bool:
|
||||
return mention in wildcards
|
||||
@@ -20,7 +20,7 @@ def extract_name(s: Text) -> Optional[Text]:
|
||||
return None
|
||||
return name
|
||||
|
||||
# We don't care about @all or @everyone
|
||||
# We don't care about @all, @everyone or @stream
|
||||
return None
|
||||
|
||||
def possible_mentions(content: Text) -> Set[Text]:
|
||||
|
||||
@@ -833,6 +833,17 @@ class BugdownTest(ZulipTestCase):
|
||||
'</span> test</p>')
|
||||
self.assertTrue(msg.mentions_wildcard)
|
||||
|
||||
def test_mention_stream(self) -> None:
|
||||
user_profile = self.example_user('othello')
|
||||
msg = Message(sender=user_profile, sending_client=get_client("test"))
|
||||
|
||||
content = "@**stream** test"
|
||||
self.assertEqual(render_markdown(msg, content),
|
||||
'<p><span class="user-mention" data-user-id="*">'
|
||||
'@stream'
|
||||
'</span> test</p>')
|
||||
self.assertTrue(msg.mentions_wildcard)
|
||||
|
||||
def test_mention_at_wildcard(self) -> None:
|
||||
user_profile = self.example_user('othello')
|
||||
msg = Message(sender=user_profile, sending_client=get_client("test"))
|
||||
|
||||
@@ -2929,6 +2929,15 @@ class SoftDeactivationMessageTest(ZulipTestCase):
|
||||
assert_um_count(cordelia, general_user_msg_count + 1)
|
||||
assert_last_um_content(cordelia, message)
|
||||
|
||||
general_user_msg_count = len(get_user_messages(cordelia))
|
||||
soft_deactivated_user_msg_count = len(get_user_messages(long_term_idle_user))
|
||||
message = 'Test @**stream** mention'
|
||||
send_stream_message(message)
|
||||
assert_last_um_content(long_term_idle_user, message)
|
||||
assert_um_count(long_term_idle_user, soft_deactivated_user_msg_count + 1)
|
||||
assert_um_count(cordelia, general_user_msg_count + 1)
|
||||
assert_last_um_content(cordelia, message)
|
||||
|
||||
# Test UserMessage row is not created while user is deactivated if there
|
||||
# is a alert word in message.
|
||||
do_add_alert_words(long_term_idle_user, ['test_alert_word'])
|
||||
|
||||
Reference in New Issue
Block a user