diff --git a/frontend_tests/node_tests/composebox_typeahead.js b/frontend_tests/node_tests/composebox_typeahead.js
index 76ce30dc07..cf10d83c63 100644
--- a/frontend_tests/node_tests/composebox_typeahead.js
+++ b/frontend_tests/node_tests/composebox_typeahead.js
@@ -98,6 +98,23 @@ global.people.add_in_realm(othello);
global.people.add_in_realm(cordelia);
global.people.add(deactivated_user);
+var hamletcharacters = {
+ name: "hamletcharacters",
+ id: 1,
+ description: "Characters of Hamlet",
+ members: [],
+};
+
+var backend = {
+ name: "Backend",
+ id: 2,
+ description: "Backend team",
+ members: [],
+};
+
+global.user_groups.add(hamletcharacters);
+global.user_groups.add(backend);
+
(function test_add_topic() {
ct.add_topic('Denmark', 'civil fears');
ct.add_topic('devel', 'fading');
@@ -185,6 +202,20 @@ global.people.add(deactivated_user);
expected_value = '@**Othello, the Moor of Venice** ';
assert.equal(actual_value, expected_value);
+ // user group mention
+ var document_stub_group_trigger_called = false;
+ $('document-stub').trigger = function (event, params) {
+ assert.equal(event, 'usermention_completed.zulip');
+ assert.deepEqual(params, { user_group: backend });
+ document_stub_group_trigger_called = true;
+ };
+
+ fake_this.query = '@back';
+ fake_this.token = 'back';
+ actual_value = ct.content_typeahead_selected.call(fake_this, backend);
+ expected_value = '@*Backend* ';
+ assert.equal(actual_value, expected_value);
+
// stream
fake_this.completing = 'stream';
var document_stub_trigger2_called = false;
@@ -237,6 +268,7 @@ global.people.add(deactivated_user);
assert(autosize_called);
assert(set_timeout_called);
assert(document_stub_trigger1_called);
+ assert(document_stub_group_trigger_called);
assert(document_stub_trigger2_called);
}());
@@ -481,6 +513,11 @@ global.people.add(deactivated_user);
expected_value = 'Othello, the Moor of Venice \nothello@zulip.com';
assert.equal(actual_value, expected_value);
+ fake_this = { completing: 'mention', token: 'hamletcharacters' };
+ actual_value = options.highlighter.call(fake_this, hamletcharacters);
+ expected_value = 'hamletcharacters \nCharacters of Hamlet';
+ assert.equal(actual_value, expected_value);
+
// options.matcher()
fake_this = { completing: 'emoji', token: 'ta' };
assert.equal(options.matcher.call(fake_this, emoji_tada), true);
@@ -490,6 +527,10 @@ global.people.add(deactivated_user);
assert.equal(options.matcher.call(fake_this, cordelia), true);
assert.equal(options.matcher.call(fake_this, othello), false);
+ fake_this = { completing: 'mention', token: 'hamletchar' };
+ assert.equal(options.matcher.call(fake_this, hamletcharacters), true);
+ assert.equal(options.matcher.call(fake_this, backend), false);
+
fake_this = { completing: 'stream', token: 'swed' };
assert.equal(options.matcher.call(fake_this, sweden_stream), true);
assert.equal(options.matcher.call(fake_this, denmark_stream), false);
@@ -512,6 +553,11 @@ global.people.add(deactivated_user);
expected_value = [cordelia, othello];
assert.deepEqual(actual_value, expected_value);
+ fake_this = { completing: 'mention', token: 'ham' };
+ actual_value = options.sorter.call(fake_this, [backend, hamletcharacters]);
+ expected_value = [hamletcharacters, backend];
+ assert.deepEqual(actual_value, expected_value);
+
fake_this = { completing: 'stream', token: 'de' };
actual_value = options.sorter.call(fake_this, [sweden_stream, denmark_stream]);
expected_value = [denmark_stream, sweden_stream];
@@ -741,6 +787,7 @@ global.people.add(deactivated_user);
];
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 lang_list = Object.keys(pygments_data.langs);
assert_typeahead_equals("test", false);
@@ -751,7 +798,7 @@ global.people.add(deactivated_user);
assert_typeahead_equals("test *", false);
// Make sure that the last token is the one we read.
- assert_typeahead_equals("~~~ @zulip", people_with_all);
+ assert_typeahead_equals("~~~ @zulip", all_mentions);
assert_typeahead_equals("@zulip :ta", emoji_list);
assert_typeahead_equals(":tada: #foo", stream_list);
assert_typeahead_equals("#foo\n~~~py", lang_list);
@@ -761,14 +808,14 @@ global.people.add(deactivated_user);
assert_typeahead_equals("test @**o", false);
assert_typeahead_equals("test @", false);
assert_typeahead_equals("test no@o", false);
- assert_typeahead_equals("@ ", people_with_all);
- assert_typeahead_equals("test\n@i", people_with_all);
- assert_typeahead_equals("test\n @l", people_with_all);
- assert_typeahead_equals("@zuli", people_with_all);
- assert_typeahead_equals("@ zuli", people_with_all);
- assert_typeahead_equals(" @zuli", people_with_all);
- assert_typeahead_equals("test @o", people_with_all);
- assert_typeahead_equals("test @z", people_with_all);
+ assert_typeahead_equals("@ ", all_mentions);
+ assert_typeahead_equals("test\n@i", all_mentions);
+ assert_typeahead_equals("test\n @l", all_mentions);
+ assert_typeahead_equals("@zuli", all_mentions);
+ assert_typeahead_equals("@ zuli", all_mentions);
+ assert_typeahead_equals(" @zuli", all_mentions);
+ assert_typeahead_equals("test @o", all_mentions);
+ assert_typeahead_equals("test @z", all_mentions);
assert_typeahead_equals(":", false);
assert_typeahead_equals(": ", false);
@@ -868,6 +915,13 @@ global.people.add(deactivated_user);
};
ct.content_highlighter.call(fake_this, othello);
+ var th_render_user_group_called = false;
+ typeahead_helper.render_user_group = function (user_group) {
+ assert.deepEqual(user_group, backend);
+ th_render_user_group_called = true;
+ };
+ ct.content_highlighter.call(fake_this, backend);
+
fake_this = { completing: 'stream' };
var th_render_stream_called = false;
typeahead_helper.render_stream = function (stream) {
@@ -890,6 +944,7 @@ global.people.add(deactivated_user);
// Verify that all stub functions have been called.
assert(th_render_typeahead_item_called);
assert(th_render_person_called);
+ assert(th_render_user_group_called);
assert(th_render_stream_called);
assert(th_render_typeahead_item_called);
}());