2017-05-25 01:49:29 +02:00
|
|
|
set_global('$', global.make_zjquery());
|
2014-01-30 22:42:19 +01:00
|
|
|
|
2016-10-30 20:46:57 +01:00
|
|
|
set_global('page_params', {
|
2017-04-24 21:59:07 +02:00
|
|
|
realm_users: [],
|
2017-10-05 06:06:42 +02:00
|
|
|
user_id: 999,
|
2016-10-30 20:46:57 +01:00
|
|
|
});
|
|
|
|
|
2017-08-02 16:51:37 +02:00
|
|
|
set_global('ui', {
|
|
|
|
set_up_scrollbar: function () {},
|
|
|
|
});
|
|
|
|
|
2017-01-09 18:20:31 +01:00
|
|
|
set_global('feature_flags', {});
|
|
|
|
|
|
|
|
set_global('document', {
|
|
|
|
hasFocus: function () {
|
|
|
|
return true;
|
|
|
|
},
|
|
|
|
});
|
|
|
|
|
2017-06-24 15:15:37 +02:00
|
|
|
set_global('blueslip', function () {});
|
|
|
|
set_global('channel', {});
|
|
|
|
set_global('compose_actions', {});
|
2017-05-12 20:16:39 +02:00
|
|
|
|
2017-09-27 20:41:19 +02:00
|
|
|
set_global('ui', {
|
|
|
|
set_up_scrollbar: function () {},
|
|
|
|
update_scrollbar: function () {},
|
|
|
|
});
|
|
|
|
|
2017-08-09 18:34:41 +02:00
|
|
|
zrequire('compose_fade');
|
|
|
|
zrequire('Handlebars', 'handlebars');
|
|
|
|
zrequire('templates');
|
|
|
|
zrequire('unread');
|
|
|
|
zrequire('hash_util');
|
|
|
|
zrequire('hashchange');
|
|
|
|
zrequire('narrow');
|
|
|
|
zrequire('util');
|
|
|
|
zrequire('presence');
|
|
|
|
zrequire('people');
|
2018-04-19 14:17:22 +02:00
|
|
|
zrequire('buddy_list');
|
2017-08-09 18:34:41 +02:00
|
|
|
zrequire('activity');
|
2018-02-12 23:31:17 +01:00
|
|
|
zrequire('stream_list');
|
2017-03-30 20:04:01 +02:00
|
|
|
|
2017-10-12 05:31:32 +02:00
|
|
|
set_global('blueslip', {
|
2018-04-12 23:54:13 +02:00
|
|
|
log: () => {},
|
2017-10-12 05:31:32 +02:00
|
|
|
});
|
|
|
|
|
2017-10-12 05:07:12 +02:00
|
|
|
set_global('popovers', {
|
|
|
|
hide_all: function () {},
|
|
|
|
show_userlist_sidebar: function () {
|
|
|
|
$('.column-right').addClass('expanded');
|
|
|
|
},
|
|
|
|
});
|
|
|
|
|
|
|
|
set_global('stream_popover', {
|
|
|
|
show_streamlist_sidebar: function () {
|
|
|
|
$('.column-left').addClass('expanded');
|
|
|
|
},
|
|
|
|
});
|
|
|
|
|
|
|
|
|
2017-10-12 05:31:32 +02:00
|
|
|
set_global('reload', {
|
2018-04-12 23:54:13 +02:00
|
|
|
is_in_progress: () => false,
|
2017-10-12 05:31:32 +02:00
|
|
|
});
|
2016-11-11 19:30:04 +01:00
|
|
|
set_global('resize', {
|
2018-04-12 23:54:13 +02:00
|
|
|
resize_page_components: () => {},
|
2016-11-11 19:30:04 +01:00
|
|
|
});
|
2017-07-08 15:16:19 +02:00
|
|
|
set_global('window', 'window-stub');
|
2016-11-11 19:30:04 +01:00
|
|
|
|
2018-04-12 23:40:03 +02:00
|
|
|
const me = {
|
2017-02-05 00:22:16 +01:00
|
|
|
email: 'me@zulip.com',
|
|
|
|
user_id: 999,
|
|
|
|
full_name: 'Me Myself',
|
|
|
|
};
|
|
|
|
|
2018-04-12 23:40:03 +02:00
|
|
|
const alice = {
|
2016-10-30 20:46:57 +01:00
|
|
|
email: 'alice@zulip.com',
|
|
|
|
user_id: 1,
|
2016-12-03 23:17:57 +01:00
|
|
|
full_name: 'Alice Smith',
|
2016-11-17 21:43:12 +01:00
|
|
|
};
|
2018-04-12 23:40:03 +02:00
|
|
|
const fred = {
|
2016-10-30 20:46:57 +01:00
|
|
|
email: 'fred@zulip.com',
|
|
|
|
user_id: 2,
|
2016-12-03 23:17:57 +01:00
|
|
|
full_name: "Fred Flintstone",
|
2016-11-17 21:43:12 +01:00
|
|
|
};
|
2018-04-12 23:40:03 +02:00
|
|
|
const jill = {
|
2016-10-30 20:46:57 +01:00
|
|
|
email: 'jill@zulip.com',
|
|
|
|
user_id: 3,
|
2016-12-03 23:17:57 +01:00
|
|
|
full_name: 'Jill Hill',
|
2016-11-17 21:43:12 +01:00
|
|
|
};
|
2018-04-12 23:40:03 +02:00
|
|
|
const mark = {
|
2016-10-30 20:46:57 +01:00
|
|
|
email: 'mark@zulip.com',
|
|
|
|
user_id: 4,
|
2016-12-03 23:17:57 +01:00
|
|
|
full_name: 'Marky Mark',
|
2016-11-17 21:43:12 +01:00
|
|
|
};
|
2018-04-12 23:40:03 +02:00
|
|
|
const norbert = {
|
2016-10-30 20:46:57 +01:00
|
|
|
email: 'norbert@zulip.com',
|
|
|
|
user_id: 5,
|
2016-12-03 23:17:57 +01:00
|
|
|
full_name: 'Norbert Oswald',
|
2016-11-17 21:43:12 +01:00
|
|
|
};
|
|
|
|
|
2018-04-12 23:40:03 +02:00
|
|
|
const zoe = {
|
2017-03-31 00:18:04 +02:00
|
|
|
email: 'zoe@example.com',
|
|
|
|
user_id: 6,
|
|
|
|
full_name: 'Zoe Yang',
|
|
|
|
};
|
2016-11-17 21:43:12 +01:00
|
|
|
|
2018-04-12 23:40:03 +02:00
|
|
|
const people = global.people;
|
2016-11-17 23:16:29 +01:00
|
|
|
|
2017-03-31 00:18:04 +02:00
|
|
|
people.add_in_realm(alice);
|
|
|
|
people.add_in_realm(fred);
|
|
|
|
people.add_in_realm(jill);
|
|
|
|
people.add_in_realm(mark);
|
|
|
|
people.add_in_realm(norbert);
|
|
|
|
people.add_in_realm(zoe);
|
|
|
|
people.add_in_realm(me);
|
|
|
|
people.initialize_current_user(me.user_id);
|
|
|
|
|
2018-04-12 23:54:13 +02:00
|
|
|
compose_fade.update_faded_users = () => {};
|
2017-05-25 01:49:39 +02:00
|
|
|
|
2018-04-12 23:40:03 +02:00
|
|
|
const real_update_huddles = activity.update_huddles;
|
2018-04-12 23:54:13 +02:00
|
|
|
activity.update_huddles = () => {};
|
2016-11-11 18:00:09 +01:00
|
|
|
|
2017-01-09 18:20:31 +01:00
|
|
|
global.compile_template('user_presence_row');
|
|
|
|
global.compile_template('user_presence_rows');
|
2017-06-24 15:15:37 +02:00
|
|
|
global.compile_template('group_pms');
|
2017-01-09 18:20:31 +01:00
|
|
|
|
2018-04-12 23:40:03 +02:00
|
|
|
const presence_info = {};
|
2017-04-13 04:28:15 +02:00
|
|
|
presence_info[alice.user_id] = { status: 'inactive' };
|
|
|
|
presence_info[fred.user_id] = { status: 'active' };
|
|
|
|
presence_info[jill.user_id] = { status: 'active' };
|
|
|
|
|
|
|
|
presence.presence_info = presence_info;
|
|
|
|
|
|
|
|
(function test_get_status() {
|
|
|
|
assert.equal(presence.get_status(page_params.user_id), "active");
|
|
|
|
assert.equal(presence.get_status(alice.user_id), "inactive");
|
|
|
|
assert.equal(presence.get_status(fred.user_id), "active");
|
2017-10-12 18:08:42 +02:00
|
|
|
assert.equal(presence.get_status(zoe.user_id), "offline");
|
2017-04-13 04:28:15 +02:00
|
|
|
}());
|
|
|
|
|
2017-10-07 19:55:44 +02:00
|
|
|
(function test_reload_defaults() {
|
2018-04-18 22:51:40 +02:00
|
|
|
let warned;
|
2017-10-07 19:55:44 +02:00
|
|
|
|
|
|
|
blueslip.warn = function (msg) {
|
|
|
|
assert.equal(msg, 'get_filter_text() is called before initialization');
|
|
|
|
warned = true;
|
|
|
|
};
|
|
|
|
assert.equal(activity.get_filter_text(), '');
|
|
|
|
assert(warned);
|
|
|
|
}());
|
|
|
|
|
2013-08-09 14:42:49 +02:00
|
|
|
(function test_sort_users() {
|
2018-04-12 23:40:03 +02:00
|
|
|
const user_ids = [alice.user_id, fred.user_id, jill.user_id];
|
2013-08-09 14:42:49 +02:00
|
|
|
|
2017-03-06 16:14:52 +01:00
|
|
|
activity._sort_users(user_ids);
|
2013-08-09 14:42:49 +02:00
|
|
|
|
2016-11-17 21:43:12 +01:00
|
|
|
assert.deepEqual(user_ids, [
|
|
|
|
fred.user_id,
|
|
|
|
jill.user_id,
|
2016-12-03 23:17:57 +01:00
|
|
|
alice.user_id,
|
2013-08-09 14:42:49 +02:00
|
|
|
]);
|
|
|
|
}());
|
2013-10-23 20:44:31 +02:00
|
|
|
|
|
|
|
(function test_process_loaded_messages() {
|
|
|
|
|
2018-04-12 23:40:03 +02:00
|
|
|
const huddle1 = 'jill@zulip.com,norbert@zulip.com';
|
|
|
|
const timestamp1 = 1382479029; // older
|
2013-10-23 20:44:31 +02:00
|
|
|
|
2018-04-12 23:40:03 +02:00
|
|
|
const huddle2 = 'alice@zulip.com,fred@zulip.com';
|
|
|
|
const timestamp2 = 1382479033; // newer
|
2013-10-23 20:44:31 +02:00
|
|
|
|
2018-04-12 23:40:03 +02:00
|
|
|
const old_timestamp = 1382479000;
|
2013-10-23 20:44:31 +02:00
|
|
|
|
2018-04-12 23:40:03 +02:00
|
|
|
const messages = [
|
2017-02-05 00:22:16 +01:00
|
|
|
{
|
2013-10-23 20:44:31 +02:00
|
|
|
type: 'private',
|
2017-02-05 00:22:16 +01:00
|
|
|
display_recipient: [{id: jill.user_id}, {id: norbert.user_id}],
|
2016-12-03 23:17:57 +01:00
|
|
|
timestamp: timestamp1,
|
2013-10-23 20:44:31 +02:00
|
|
|
},
|
|
|
|
{
|
2016-12-03 23:17:57 +01:00
|
|
|
type: 'stream',
|
2013-10-23 20:44:31 +02:00
|
|
|
},
|
|
|
|
{
|
|
|
|
type: 'private',
|
2017-02-05 00:22:16 +01:00
|
|
|
display_recipient: [{id: me.user_id}], // PM to myself
|
2013-10-23 20:44:31 +02:00
|
|
|
},
|
|
|
|
{
|
|
|
|
type: 'private',
|
2017-02-05 00:22:16 +01:00
|
|
|
display_recipient: [{id: alice.user_id}, {id: fred.user_id}],
|
2016-12-03 23:17:57 +01:00
|
|
|
timestamp: timestamp2,
|
2013-10-23 20:44:31 +02:00
|
|
|
},
|
|
|
|
{
|
|
|
|
type: 'private',
|
2017-02-05 00:22:16 +01:00
|
|
|
display_recipient: [{id: fred.user_id}, {id: alice.user_id}],
|
2016-12-03 23:17:57 +01:00
|
|
|
timestamp: old_timestamp,
|
|
|
|
},
|
2013-10-23 20:44:31 +02:00
|
|
|
];
|
|
|
|
|
|
|
|
activity.process_loaded_messages(messages);
|
|
|
|
|
2018-04-12 23:40:03 +02:00
|
|
|
const user_ids_string1 = people.emails_strings_to_user_ids_string(huddle1);
|
|
|
|
const user_ids_string2 = people.emails_strings_to_user_ids_string(huddle2);
|
2016-11-17 23:16:29 +01:00
|
|
|
assert.deepEqual(activity.get_huddles(), [user_ids_string2, user_ids_string1]);
|
2013-10-23 20:44:31 +02:00
|
|
|
}());
|
|
|
|
|
2013-10-23 22:22:34 +02:00
|
|
|
(function test_full_huddle_name() {
|
2016-11-17 23:16:29 +01:00
|
|
|
function full_name(emails_string) {
|
2018-04-18 22:51:40 +02:00
|
|
|
const user_ids_string = people.emails_strings_to_user_ids_string(emails_string);
|
2016-11-17 23:16:29 +01:00
|
|
|
return activity.full_huddle_name(user_ids_string);
|
|
|
|
}
|
|
|
|
|
2013-10-23 22:22:34 +02:00
|
|
|
assert.equal(
|
2016-11-17 23:16:29 +01:00
|
|
|
full_name('alice@zulip.com,jill@zulip.com'),
|
2016-12-03 23:17:57 +01:00
|
|
|
'Alice Smith, Jill Hill');
|
2013-10-23 22:22:34 +02:00
|
|
|
|
|
|
|
assert.equal(
|
2016-11-17 23:16:29 +01:00
|
|
|
full_name('alice@zulip.com,fred@zulip.com,jill@zulip.com'),
|
2016-12-03 23:17:57 +01:00
|
|
|
'Alice Smith, Fred Flintstone, Jill Hill');
|
2013-10-23 22:22:34 +02:00
|
|
|
}());
|
2013-11-04 21:56:56 +01:00
|
|
|
|
2013-11-04 22:59:03 +01:00
|
|
|
(function test_short_huddle_name() {
|
2016-11-17 23:16:29 +01:00
|
|
|
function short_name(emails_string) {
|
2018-04-18 22:51:40 +02:00
|
|
|
const user_ids_string = people.emails_strings_to_user_ids_string(emails_string);
|
2016-11-17 23:16:29 +01:00
|
|
|
return activity.short_huddle_name(user_ids_string);
|
|
|
|
}
|
|
|
|
|
2013-11-04 22:59:03 +01:00
|
|
|
assert.equal(
|
2016-11-17 23:16:29 +01:00
|
|
|
short_name('alice@zulip.com'),
|
2016-12-03 23:17:57 +01:00
|
|
|
'Alice Smith');
|
2013-11-04 22:59:03 +01:00
|
|
|
|
|
|
|
assert.equal(
|
2016-11-17 23:16:29 +01:00
|
|
|
short_name('alice@zulip.com,jill@zulip.com'),
|
2016-12-03 23:17:57 +01:00
|
|
|
'Alice Smith, Jill Hill');
|
2013-11-04 22:59:03 +01:00
|
|
|
|
|
|
|
assert.equal(
|
2016-11-17 23:16:29 +01:00
|
|
|
short_name('alice@zulip.com,fred@zulip.com,jill@zulip.com'),
|
2016-12-03 23:17:57 +01:00
|
|
|
'Alice Smith, Fred Flintstone, Jill Hill');
|
2013-11-04 22:59:03 +01:00
|
|
|
|
|
|
|
assert.equal(
|
2016-11-17 23:16:29 +01:00
|
|
|
short_name('alice@zulip.com,fred@zulip.com,jill@zulip.com,mark@zulip.com'),
|
2016-12-03 23:17:57 +01:00
|
|
|
'Alice Smith, Fred Flintstone, Jill Hill, + 1 other');
|
2013-12-05 22:20:20 +01:00
|
|
|
|
|
|
|
assert.equal(
|
2016-11-17 23:16:29 +01:00
|
|
|
short_name('alice@zulip.com,fred@zulip.com,jill@zulip.com,mark@zulip.com,norbert@zulip.com'),
|
2016-12-03 23:17:57 +01:00
|
|
|
'Alice Smith, Fred Flintstone, Jill Hill, + 2 others');
|
2013-12-05 22:20:20 +01:00
|
|
|
|
2013-11-04 22:59:03 +01:00
|
|
|
}());
|
|
|
|
|
2013-11-04 21:56:56 +01:00
|
|
|
(function test_huddle_fraction_present() {
|
2018-04-18 22:51:40 +02:00
|
|
|
let huddle = 'alice@zulip.com,fred@zulip.com,jill@zulip.com,mark@zulip.com';
|
2016-11-17 23:16:29 +01:00
|
|
|
huddle = people.emails_strings_to_user_ids_string(huddle);
|
2013-11-04 21:56:56 +01:00
|
|
|
|
2018-04-12 23:40:03 +02:00
|
|
|
const presence_info = {};
|
2017-03-06 16:14:52 +01:00
|
|
|
presence_info[alice.user_id] = { status: 'active' };
|
|
|
|
presence_info[fred.user_id] = { status: 'idle' }; // counts as present
|
2016-11-17 21:43:12 +01:00
|
|
|
// jill not in list
|
2017-03-06 16:14:52 +01:00
|
|
|
presence_info[mark.user_id] = { status: 'offline' }; // does not count
|
2017-03-30 20:04:01 +02:00
|
|
|
presence.presence_info = presence_info;
|
2013-11-04 21:56:56 +01:00
|
|
|
|
|
|
|
assert.equal(
|
2017-03-06 16:14:52 +01:00
|
|
|
activity.huddle_fraction_present(huddle),
|
2016-12-03 23:17:57 +01:00
|
|
|
'0.50');
|
2013-11-04 21:56:56 +01:00
|
|
|
}());
|
|
|
|
|
2017-03-30 20:04:01 +02:00
|
|
|
presence.presence_info = {};
|
|
|
|
presence.presence_info[alice.user_id] = { status: activity.IDLE };
|
|
|
|
presence.presence_info[fred.user_id] = { status: activity.ACTIVE };
|
|
|
|
presence.presence_info[jill.user_id] = { status: activity.ACTIVE };
|
|
|
|
presence.presence_info[mark.user_id] = { status: activity.IDLE };
|
|
|
|
presence.presence_info[norbert.user_id] = { status: activity.ACTIVE };
|
2017-10-05 06:06:42 +02:00
|
|
|
presence.presence_info[zoe.user_id] = { status: activity.ACTIVE };
|
2017-10-07 20:45:13 +02:00
|
|
|
presence.presence_info[me.user_id] = { status: activity.ACTIVE };
|
2017-01-09 18:20:31 +01:00
|
|
|
|
2017-10-07 18:57:44 +02:00
|
|
|
activity.set_user_list_filter();
|
|
|
|
|
2018-04-12 23:40:03 +02:00
|
|
|
const user_order = [fred.user_id, jill.user_id, norbert.user_id,
|
2018-02-12 23:31:17 +01:00
|
|
|
zoe.user_id, alice.user_id, mark.user_id];
|
2018-04-12 23:40:03 +02:00
|
|
|
const user_count = 6;
|
2018-02-12 23:31:17 +01:00
|
|
|
|
|
|
|
// Mock the jquery is func
|
|
|
|
$('.user-list-filter').is = function (sel) {
|
|
|
|
if (sel === ':focus') {
|
|
|
|
return $('.user-list-filter').is_focused();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
// Mock the jquery first func
|
|
|
|
$('#user_presences li.user_sidebar_entry.narrow-filter').first = function () {
|
|
|
|
return $('li.user_sidebar_entry[data-user-id="' + user_order[0] + '"]');
|
|
|
|
};
|
|
|
|
$('#user_presences li.user_sidebar_entry.narrow-filter').last = function () {
|
|
|
|
return $('li.user_sidebar_entry[data-user-id="' + user_order[user_count - 1] + '"]');
|
|
|
|
};
|
|
|
|
|
2017-01-09 18:20:31 +01:00
|
|
|
(function test_presence_list_full_update() {
|
2018-02-12 23:31:17 +01:00
|
|
|
// No element is selected
|
|
|
|
$('#user_presences li.user_sidebar_entry.narrow-filter.highlighted_user').length = 0;
|
|
|
|
$('.user-list-filter').focus();
|
|
|
|
|
|
|
|
$('#user_presences li.user_sidebar_entry.narrow-filter');
|
2018-04-12 23:40:03 +02:00
|
|
|
const users = activity.build_user_sidebar();
|
2017-01-09 18:20:31 +01:00
|
|
|
assert.deepEqual(users, [{
|
|
|
|
name: 'Fred Flintstone',
|
Make nicer slugs for "pm-with" narrows.
The slugs for PM-with narrows now have user ids in them, so they
are more resilient to email changes, and they have less escaping
characters and are generally prettier.
Examples:
narrow/pm-with/3-cordelia
narrow/pm-with/3,5-group
The part of the URL that is actionable is the comma-delimited
list of one or more userids.
When we decode the slugs, we only use the part before the dash; the
stuff after the dash is just for humans. If we don't see a number
before the dash, we fall back to the old decoding (which should only
matter during a transition period where folks may have old links).
For group PMS, we always say "group" after the dash. For single PMs,
we use the person's email userid, since it's usually fairly concise
and not noisy for a URL. We may tinker with this later.
Basically, the heart of this change is these two new methods:
people.emails_to_slug
people.slug_to_emails
And then we unify the encode codepath as follows:
narrow.pm_with_uri ->
hashchange.operators_to_hash ->
hashchange.encode_operand ->
people.emails_to_slug
The decode path didn't really require much modication in this commit,
other than to have hashchange.decode_operand call people.slug_to_emails
for the pm-with case.
2017-01-06 02:00:03 +01:00
|
|
|
href: '#narrow/pm-with/2-fred',
|
2017-01-09 18:20:31 +01:00
|
|
|
user_id: fred.user_id,
|
|
|
|
num_unread: 0,
|
|
|
|
type: 'active',
|
|
|
|
type_desc: 'is active',
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: 'Jill Hill',
|
Make nicer slugs for "pm-with" narrows.
The slugs for PM-with narrows now have user ids in them, so they
are more resilient to email changes, and they have less escaping
characters and are generally prettier.
Examples:
narrow/pm-with/3-cordelia
narrow/pm-with/3,5-group
The part of the URL that is actionable is the comma-delimited
list of one or more userids.
When we decode the slugs, we only use the part before the dash; the
stuff after the dash is just for humans. If we don't see a number
before the dash, we fall back to the old decoding (which should only
matter during a transition period where folks may have old links).
For group PMS, we always say "group" after the dash. For single PMs,
we use the person's email userid, since it's usually fairly concise
and not noisy for a URL. We may tinker with this later.
Basically, the heart of this change is these two new methods:
people.emails_to_slug
people.slug_to_emails
And then we unify the encode codepath as follows:
narrow.pm_with_uri ->
hashchange.operators_to_hash ->
hashchange.encode_operand ->
people.emails_to_slug
The decode path didn't really require much modication in this commit,
other than to have hashchange.decode_operand call people.slug_to_emails
for the pm-with case.
2017-01-06 02:00:03 +01:00
|
|
|
href: '#narrow/pm-with/3-jill',
|
2017-01-09 18:20:31 +01:00
|
|
|
user_id: jill.user_id,
|
|
|
|
num_unread: 0,
|
|
|
|
type: 'active',
|
|
|
|
type_desc: 'is active',
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: 'Norbert Oswald',
|
Make nicer slugs for "pm-with" narrows.
The slugs for PM-with narrows now have user ids in them, so they
are more resilient to email changes, and they have less escaping
characters and are generally prettier.
Examples:
narrow/pm-with/3-cordelia
narrow/pm-with/3,5-group
The part of the URL that is actionable is the comma-delimited
list of one or more userids.
When we decode the slugs, we only use the part before the dash; the
stuff after the dash is just for humans. If we don't see a number
before the dash, we fall back to the old decoding (which should only
matter during a transition period where folks may have old links).
For group PMS, we always say "group" after the dash. For single PMs,
we use the person's email userid, since it's usually fairly concise
and not noisy for a URL. We may tinker with this later.
Basically, the heart of this change is these two new methods:
people.emails_to_slug
people.slug_to_emails
And then we unify the encode codepath as follows:
narrow.pm_with_uri ->
hashchange.operators_to_hash ->
hashchange.encode_operand ->
people.emails_to_slug
The decode path didn't really require much modication in this commit,
other than to have hashchange.decode_operand call people.slug_to_emails
for the pm-with case.
2017-01-06 02:00:03 +01:00
|
|
|
href: '#narrow/pm-with/5-norbert',
|
2017-01-09 18:20:31 +01:00
|
|
|
user_id: norbert.user_id,
|
|
|
|
num_unread: 0,
|
|
|
|
type: 'active',
|
|
|
|
type_desc: 'is active',
|
|
|
|
},
|
2017-10-05 06:06:42 +02:00
|
|
|
{
|
|
|
|
name: 'Zoe Yang',
|
|
|
|
href: '#narrow/pm-with/6-zoe',
|
|
|
|
user_id: zoe.user_id,
|
|
|
|
num_unread: 0,
|
|
|
|
type: 'active',
|
|
|
|
type_desc: 'is active',
|
|
|
|
},
|
2017-01-09 18:20:31 +01:00
|
|
|
{
|
|
|
|
name: 'Alice Smith',
|
Make nicer slugs for "pm-with" narrows.
The slugs for PM-with narrows now have user ids in them, so they
are more resilient to email changes, and they have less escaping
characters and are generally prettier.
Examples:
narrow/pm-with/3-cordelia
narrow/pm-with/3,5-group
The part of the URL that is actionable is the comma-delimited
list of one or more userids.
When we decode the slugs, we only use the part before the dash; the
stuff after the dash is just for humans. If we don't see a number
before the dash, we fall back to the old decoding (which should only
matter during a transition period where folks may have old links).
For group PMS, we always say "group" after the dash. For single PMs,
we use the person's email userid, since it's usually fairly concise
and not noisy for a URL. We may tinker with this later.
Basically, the heart of this change is these two new methods:
people.emails_to_slug
people.slug_to_emails
And then we unify the encode codepath as follows:
narrow.pm_with_uri ->
hashchange.operators_to_hash ->
hashchange.encode_operand ->
people.emails_to_slug
The decode path didn't really require much modication in this commit,
other than to have hashchange.decode_operand call people.slug_to_emails
for the pm-with case.
2017-01-06 02:00:03 +01:00
|
|
|
href: '#narrow/pm-with/1-alice',
|
2017-01-09 18:20:31 +01:00
|
|
|
user_id: alice.user_id,
|
|
|
|
num_unread: 0,
|
|
|
|
type: 'idle',
|
|
|
|
type_desc: 'is not active',
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: 'Marky Mark',
|
Make nicer slugs for "pm-with" narrows.
The slugs for PM-with narrows now have user ids in them, so they
are more resilient to email changes, and they have less escaping
characters and are generally prettier.
Examples:
narrow/pm-with/3-cordelia
narrow/pm-with/3,5-group
The part of the URL that is actionable is the comma-delimited
list of one or more userids.
When we decode the slugs, we only use the part before the dash; the
stuff after the dash is just for humans. If we don't see a number
before the dash, we fall back to the old decoding (which should only
matter during a transition period where folks may have old links).
For group PMS, we always say "group" after the dash. For single PMs,
we use the person's email userid, since it's usually fairly concise
and not noisy for a URL. We may tinker with this later.
Basically, the heart of this change is these two new methods:
people.emails_to_slug
people.slug_to_emails
And then we unify the encode codepath as follows:
narrow.pm_with_uri ->
hashchange.operators_to_hash ->
hashchange.encode_operand ->
people.emails_to_slug
The decode path didn't really require much modication in this commit,
other than to have hashchange.decode_operand call people.slug_to_emails
for the pm-with case.
2017-01-06 02:00:03 +01:00
|
|
|
href: '#narrow/pm-with/4-mark',
|
2017-01-09 18:20:31 +01:00
|
|
|
user_id: mark.user_id,
|
|
|
|
num_unread: 0,
|
|
|
|
type: 'idle',
|
|
|
|
type_desc: 'is not active',
|
|
|
|
},
|
|
|
|
]);
|
|
|
|
}());
|
2017-05-24 19:46:15 +02:00
|
|
|
|
|
|
|
(function test_PM_update_dom_counts() {
|
2018-04-12 23:40:03 +02:00
|
|
|
const value = $.create('alice-value');
|
|
|
|
const count = $.create('alice-count');
|
|
|
|
const pm_key = alice.user_id.toString();
|
|
|
|
const li = $("li.user_sidebar_entry[data-user-id='" + pm_key + "']");
|
2017-07-08 14:31:18 +02:00
|
|
|
count.set_find_results('.value', value);
|
|
|
|
li.set_find_results('.count', count);
|
2017-07-08 14:05:49 +02:00
|
|
|
count.set_parent(li);
|
2017-05-24 19:46:15 +02:00
|
|
|
|
2018-04-12 23:40:03 +02:00
|
|
|
const counts = new Dict();
|
2017-05-24 19:46:15 +02:00
|
|
|
counts.set(pm_key, 5);
|
|
|
|
li.addClass('user_sidebar_entry');
|
|
|
|
|
|
|
|
activity.update_dom_with_unread_counts({pm_count: counts});
|
|
|
|
assert(li.hasClass('user-with-count'));
|
|
|
|
assert.equal(value.text(), 5);
|
|
|
|
|
|
|
|
counts.set(pm_key, 0);
|
|
|
|
|
|
|
|
activity.update_dom_with_unread_counts({pm_count: counts});
|
|
|
|
assert(!li.hasClass('user-with-count'));
|
|
|
|
assert.equal(value.text(), '');
|
|
|
|
}());
|
|
|
|
|
|
|
|
(function test_group_update_dom_counts() {
|
2018-04-12 23:40:03 +02:00
|
|
|
const value = $.create('alice-fred-value');
|
|
|
|
const count = $.create('alice-fred-count');
|
|
|
|
const pm_key = alice.user_id.toString() + "," + fred.user_id.toString();
|
|
|
|
const li_selector = "li.group-pms-sidebar-entry[data-user-ids='" + pm_key + "']";
|
|
|
|
const li = $(li_selector);
|
2017-07-08 14:31:18 +02:00
|
|
|
count.set_find_results('.value', value);
|
|
|
|
li.set_find_results('.count', count);
|
2017-07-08 14:05:49 +02:00
|
|
|
count.set_parent(li);
|
2017-05-24 19:46:15 +02:00
|
|
|
|
2018-04-12 23:40:03 +02:00
|
|
|
const counts = new Dict();
|
2017-05-24 19:46:15 +02:00
|
|
|
counts.set(pm_key, 5);
|
|
|
|
li.addClass('group-pms-sidebar-entry');
|
|
|
|
|
|
|
|
activity.update_dom_with_unread_counts({pm_count: counts});
|
|
|
|
assert(li.hasClass('group-with-count'));
|
|
|
|
assert.equal(value.text(), 5);
|
|
|
|
|
|
|
|
counts.set(pm_key, 0);
|
|
|
|
|
|
|
|
activity.update_dom_with_unread_counts({pm_count: counts});
|
|
|
|
assert(!li.hasClass('group-with-count'));
|
|
|
|
assert.equal(value.text(), '');
|
|
|
|
}());
|
2017-05-24 23:28:18 +02:00
|
|
|
|
2018-02-12 23:31:17 +01:00
|
|
|
(function test_key_input() {
|
2018-04-18 22:51:40 +02:00
|
|
|
let sel_index = 0;
|
2018-02-12 23:31:17 +01:00
|
|
|
// Returns which element is selected
|
|
|
|
$('#user_presences li.user_sidebar_entry.narrow-filter.highlighted_user')
|
|
|
|
.expectOne().attr = function () {
|
|
|
|
return user_order[sel_index];
|
|
|
|
};
|
|
|
|
|
|
|
|
// Returns element before selected one
|
|
|
|
$('#user_presences li.user_sidebar_entry.narrow-filter.highlighted_user')
|
|
|
|
.expectOne().prev = function () {
|
|
|
|
if (sel_index === 0) {
|
|
|
|
// Top, no prev element
|
|
|
|
return $('div.no_user');
|
|
|
|
}
|
|
|
|
return $('li.user_sidebar_entry[data-user-id="' + user_order[sel_index-1] + '"]');
|
|
|
|
};
|
|
|
|
|
|
|
|
// Returns element after selected one
|
|
|
|
$('#user_presences li.user_sidebar_entry.narrow-filter.highlighted_user')
|
|
|
|
.expectOne().next = function () {
|
|
|
|
if (sel_index === user_count - 1) {
|
|
|
|
// Bottom, no next element
|
|
|
|
return $('div.no_user');
|
|
|
|
}
|
|
|
|
return $('li.user_sidebar_entry[data-user-id="' + user_order[sel_index + 1] + '"]');
|
|
|
|
};
|
|
|
|
|
|
|
|
$('li.user_sidebar_entry[data-user-id="' + fred.user_id + '"]').is = function () {
|
|
|
|
return true;
|
|
|
|
};
|
|
|
|
$('li.user_sidebar_entry[data-user-id="' + mark.user_id + '"]').is = function () {
|
|
|
|
return true;
|
|
|
|
};
|
|
|
|
$('li.user_sidebar_entry[data-user-id="' + alice.user_id + '"]').is = function () {
|
|
|
|
return true;
|
|
|
|
};
|
|
|
|
$('div.no_user').is = function () {
|
|
|
|
return false;
|
|
|
|
};
|
2017-06-24 15:15:37 +02:00
|
|
|
|
2018-02-12 23:31:17 +01:00
|
|
|
$('#user_presences li.user_sidebar_entry.narrow-filter').length = user_count;
|
|
|
|
|
|
|
|
activity.set_user_list_filter_handlers();
|
|
|
|
|
|
|
|
// Disable scrolling into place
|
|
|
|
stream_list.scroll_element_into_container = function () {};
|
|
|
|
// up
|
2018-04-12 23:40:03 +02:00
|
|
|
const e = {
|
2018-02-12 23:31:17 +01:00
|
|
|
keyCode: 38,
|
2017-06-24 15:15:37 +02:00
|
|
|
stopPropagation: function () {},
|
|
|
|
preventDefault: function () {},
|
|
|
|
};
|
2018-04-12 23:40:03 +02:00
|
|
|
const keydown_handler = $('.user-list-filter').get_on_handler('keydown');
|
2018-02-12 23:31:17 +01:00
|
|
|
keydown_handler(e);
|
|
|
|
// Now the last element is selected
|
|
|
|
sel_index = user_count - 1;
|
|
|
|
keydown_handler(e);
|
|
|
|
sel_index = sel_index - 1;
|
|
|
|
|
|
|
|
// down
|
2018-04-12 23:40:03 +02:00
|
|
|
e.keyCode = 40;
|
2018-02-12 23:31:17 +01:00
|
|
|
keydown_handler(e);
|
|
|
|
sel_index = sel_index + 1;
|
|
|
|
keydown_handler(e);
|
|
|
|
|
2018-04-12 23:40:03 +02:00
|
|
|
e.keyCode = 13;
|
2018-02-12 23:31:17 +01:00
|
|
|
|
|
|
|
// Enter text and narrow users
|
2017-06-24 15:15:37 +02:00
|
|
|
$(".user-list-filter").expectOne().val('ali');
|
|
|
|
narrow.by = function (method, email) {
|
|
|
|
assert.equal(email, 'alice@zulip.com');
|
|
|
|
};
|
|
|
|
compose_actions.start = function () {};
|
2018-02-12 23:31:17 +01:00
|
|
|
sel_index = 4;
|
2017-06-24 15:15:37 +02:00
|
|
|
|
2017-07-06 14:44:33 +02:00
|
|
|
keydown_handler(e);
|
2017-06-24 15:15:37 +02:00
|
|
|
}());
|
|
|
|
|
|
|
|
(function test_focus_user_filter() {
|
2018-04-12 23:40:03 +02:00
|
|
|
const e = {
|
2018-04-12 23:54:13 +02:00
|
|
|
stopPropagation: () => {},
|
2017-06-24 15:15:37 +02:00
|
|
|
};
|
2018-04-18 22:51:40 +02:00
|
|
|
const click_handler = $('.user-list-filter').get_on_handler('click');
|
2017-07-06 14:44:33 +02:00
|
|
|
click_handler(e);
|
2017-06-24 15:15:37 +02:00
|
|
|
}());
|
|
|
|
|
2018-02-12 23:31:17 +01:00
|
|
|
(function test_focusout_user_filter() {
|
2018-04-12 23:40:03 +02:00
|
|
|
const e = { };
|
|
|
|
const click_handler = $('.user-list-filter').get_on_handler('blur');
|
2018-02-12 23:31:17 +01:00
|
|
|
click_handler(e);
|
|
|
|
}());
|
|
|
|
|
2017-05-25 01:49:39 +02:00
|
|
|
presence.presence_info = {};
|
|
|
|
presence.presence_info[alice.user_id] = { status: activity.ACTIVE };
|
|
|
|
presence.presence_info[fred.user_id] = { status: activity.ACTIVE };
|
|
|
|
presence.presence_info[jill.user_id] = { status: activity.ACTIVE };
|
2017-10-05 06:06:42 +02:00
|
|
|
presence.presence_info[mark.user_id] = { status: activity.IDLE };
|
|
|
|
presence.presence_info[norbert.user_id] = { status: activity.ACTIVE };
|
|
|
|
presence.presence_info[zoe.user_id] = { status: activity.ACTIVE };
|
2017-05-24 23:28:18 +02:00
|
|
|
|
2017-05-25 01:49:39 +02:00
|
|
|
(function test_filter_user_ids() {
|
2018-04-12 23:40:03 +02:00
|
|
|
const user_filter = $('.user-list-filter');
|
2017-05-24 23:28:18 +02:00
|
|
|
user_filter.val(''); // no search filter
|
|
|
|
|
2017-10-07 20:45:13 +02:00
|
|
|
activity.set_user_list_filter();
|
|
|
|
|
2018-04-18 22:51:40 +02:00
|
|
|
let user_ids = activity.get_filtered_and_sorted_user_ids();
|
2017-10-07 20:45:13 +02:00
|
|
|
assert.deepEqual(user_ids, [
|
|
|
|
alice.user_id,
|
|
|
|
fred.user_id,
|
|
|
|
jill.user_id,
|
|
|
|
norbert.user_id,
|
|
|
|
zoe.user_id,
|
|
|
|
mark.user_id,
|
|
|
|
]);
|
2017-05-24 23:28:18 +02:00
|
|
|
|
|
|
|
user_filter.val('abc'); // no match
|
2017-10-07 20:45:13 +02:00
|
|
|
user_ids = activity.get_filtered_and_sorted_user_ids();
|
2017-05-24 23:28:18 +02:00
|
|
|
assert.deepEqual(user_ids, []);
|
|
|
|
|
|
|
|
user_filter.val('fred'); // match fred
|
2017-10-07 20:45:13 +02:00
|
|
|
user_ids = activity.get_filtered_and_sorted_user_ids();
|
2017-05-24 23:28:18 +02:00
|
|
|
assert.deepEqual(user_ids, [fred.user_id]);
|
|
|
|
|
|
|
|
user_filter.val('fred,alice'); // match fred and alice
|
2017-10-07 20:45:13 +02:00
|
|
|
user_ids = activity.get_filtered_and_sorted_user_ids();
|
2017-05-24 23:28:18 +02:00
|
|
|
assert.deepEqual(user_ids, [alice.user_id, fred.user_id]);
|
|
|
|
|
|
|
|
user_filter.val('fr,al'); // match fred and alice partials
|
2017-10-07 20:45:13 +02:00
|
|
|
user_ids = activity.get_filtered_and_sorted_user_ids();
|
2017-05-24 23:28:18 +02:00
|
|
|
assert.deepEqual(user_ids, [alice.user_id, fred.user_id]);
|
|
|
|
|
|
|
|
presence.presence_info[alice.user_id] = { status: activity.IDLE };
|
|
|
|
user_filter.val('fr,al'); // match fred and alice partials and idle user
|
2017-10-07 20:45:13 +02:00
|
|
|
user_ids = activity.get_filtered_and_sorted_user_ids();
|
2017-05-24 23:28:18 +02:00
|
|
|
assert.deepEqual(user_ids, [fred.user_id, alice.user_id]);
|
|
|
|
|
|
|
|
$.stub_selector('.user-list-filter', []);
|
|
|
|
presence.presence_info[alice.user_id] = { status: activity.ACTIVE };
|
2017-10-07 20:45:13 +02:00
|
|
|
user_ids = activity.get_filtered_and_sorted_user_ids();
|
2017-05-24 23:28:18 +02:00
|
|
|
assert.deepEqual(user_ids, [alice.user_id, fred.user_id]);
|
|
|
|
}());
|
2017-05-25 01:49:39 +02:00
|
|
|
|
|
|
|
(function test_insert_one_user_into_empty_list() {
|
2018-04-12 23:40:03 +02:00
|
|
|
const alice_li = $.create('alice list item');
|
2017-05-25 01:49:39 +02:00
|
|
|
|
|
|
|
// These selectors are here to avoid some short-circuit logic.
|
2017-07-08 14:31:18 +02:00
|
|
|
$('#user_presences').set_find_results('[data-user-id="1"]', alice_li);
|
2017-05-25 01:49:39 +02:00
|
|
|
|
2018-04-18 22:51:40 +02:00
|
|
|
let appended_html;
|
2017-05-25 01:49:39 +02:00
|
|
|
$('#user_presences').append = function (html) {
|
|
|
|
appended_html = html;
|
|
|
|
};
|
|
|
|
|
|
|
|
$.stub_selector('#user_presences li', {
|
2018-04-12 23:54:13 +02:00
|
|
|
toArray: () => [],
|
2017-05-25 01:49:39 +02:00
|
|
|
});
|
|
|
|
activity.insert_user_into_list(alice.user_id);
|
|
|
|
assert(appended_html.indexOf('data-user-id="1"') > 0);
|
|
|
|
assert(appended_html.indexOf('user_active') > 0);
|
|
|
|
}());
|
|
|
|
|
|
|
|
(function test_insert_fred_after_alice() {
|
2018-04-12 23:40:03 +02:00
|
|
|
const fred_li = $.create('fred list item');
|
2017-05-25 01:49:39 +02:00
|
|
|
|
|
|
|
// These selectors are here to avoid some short-circuit logic.
|
2017-07-08 14:31:18 +02:00
|
|
|
$('#user_presences').set_find_results('[data-user-id="2"]', fred_li);
|
2017-05-25 01:49:39 +02:00
|
|
|
|
2018-04-18 22:51:40 +02:00
|
|
|
let appended_html;
|
2017-05-25 01:49:39 +02:00
|
|
|
$('#user_presences').append = function (html) {
|
|
|
|
appended_html = html;
|
|
|
|
};
|
|
|
|
|
2017-07-08 15:16:19 +02:00
|
|
|
$('<fake html for alice>').attr = function (attr_name) {
|
2017-05-25 01:49:39 +02:00
|
|
|
assert.equal(attr_name, 'data-user-id');
|
|
|
|
return alice.user_id;
|
|
|
|
};
|
|
|
|
|
|
|
|
$.stub_selector('#user_presences li', {
|
|
|
|
toArray: function () {
|
|
|
|
return [
|
2017-07-08 15:16:19 +02:00
|
|
|
'<fake html for alice>',
|
2017-05-25 01:49:39 +02:00
|
|
|
];
|
|
|
|
},
|
|
|
|
});
|
|
|
|
activity.insert_user_into_list(fred.user_id);
|
|
|
|
|
|
|
|
assert(appended_html.indexOf('data-user-id="2"') > 0);
|
|
|
|
assert(appended_html.indexOf('user_active') > 0);
|
|
|
|
}());
|
|
|
|
|
|
|
|
(function test_insert_fred_before_jill() {
|
2018-04-12 23:40:03 +02:00
|
|
|
const fred_li = $.create('fred-li');
|
2017-05-25 01:49:39 +02:00
|
|
|
|
|
|
|
// These selectors are here to avoid some short-circuit logic.
|
2017-07-08 14:31:18 +02:00
|
|
|
$('#user_presences').set_find_results('[data-user-id="2"]', fred_li);
|
2017-05-25 01:49:39 +02:00
|
|
|
|
2017-07-08 15:16:19 +02:00
|
|
|
$('<fake-dom-for-jill').attr = function (attr_name) {
|
2017-05-25 01:49:39 +02:00
|
|
|
assert.equal(attr_name, 'data-user-id');
|
|
|
|
return jill.user_id;
|
|
|
|
};
|
|
|
|
|
|
|
|
$.stub_selector('#user_presences li', {
|
|
|
|
toArray: function () {
|
|
|
|
return [
|
2017-07-08 15:16:19 +02:00
|
|
|
'<fake-dom-for-jill',
|
2017-05-25 01:49:39 +02:00
|
|
|
];
|
|
|
|
},
|
|
|
|
});
|
|
|
|
|
2018-04-18 22:51:40 +02:00
|
|
|
let before_html;
|
2017-07-08 15:16:19 +02:00
|
|
|
$('<fake-dom-for-jill').before = function (html) {
|
2017-05-25 01:49:39 +02:00
|
|
|
before_html = html;
|
|
|
|
};
|
|
|
|
activity.insert_user_into_list(fred.user_id);
|
|
|
|
|
|
|
|
assert(before_html.indexOf('data-user-id="2"') > 0);
|
|
|
|
assert(before_html.indexOf('user_active') > 0);
|
|
|
|
}());
|
|
|
|
|
|
|
|
// Reset jquery here.
|
|
|
|
set_global('$', global.make_zjquery());
|
2017-10-07 18:57:44 +02:00
|
|
|
activity.set_user_list_filter();
|
2017-05-25 01:49:39 +02:00
|
|
|
|
|
|
|
(function test_insert_unfiltered_user_with_filter() {
|
|
|
|
// This test only tests that we do not explode when
|
|
|
|
// try to insert Fred into a list where he does not
|
|
|
|
// match the search filter.
|
2018-04-12 23:40:03 +02:00
|
|
|
const user_filter = $('.user-list-filter');
|
2017-05-25 01:49:39 +02:00
|
|
|
user_filter.val('do-not-match-filter');
|
|
|
|
activity.insert_user_into_list(fred.user_id);
|
|
|
|
}());
|
|
|
|
|
|
|
|
(function test_realm_presence_disabled() {
|
|
|
|
page_params.realm_presence_disabled = true;
|
2017-06-24 15:15:37 +02:00
|
|
|
unread.suppress_unread_counts = false;
|
2017-05-25 01:49:39 +02:00
|
|
|
|
|
|
|
activity.insert_user_into_list();
|
|
|
|
activity.build_user_sidebar();
|
|
|
|
|
|
|
|
real_update_huddles();
|
|
|
|
}());
|
|
|
|
|
2017-06-24 15:15:37 +02:00
|
|
|
// Mock the jquery is func
|
|
|
|
$('.user-list-filter').is = function (sel) {
|
|
|
|
if (sel === ':focus') {
|
|
|
|
return $('.user-list-filter').is_focused();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2018-01-04 18:15:42 +01:00
|
|
|
$('.user-list-filter').parent = function () {
|
|
|
|
return $('#user-list .input-append');
|
|
|
|
};
|
|
|
|
|
2017-06-24 15:15:37 +02:00
|
|
|
(function test_clear_search() {
|
|
|
|
$('.user-list-filter').val('somevalue');
|
|
|
|
activity.clear_search();
|
|
|
|
assert.equal($('.user-list-filter').val(), '');
|
2018-01-04 18:15:42 +01:00
|
|
|
activity.clear_search();
|
|
|
|
assert($('#user-list .input-append').hasClass('notdisplayed'));
|
2017-06-24 15:15:37 +02:00
|
|
|
}());
|
|
|
|
|
2018-01-04 18:15:42 +01:00
|
|
|
(function test_escape_search() {
|
2017-06-24 15:15:37 +02:00
|
|
|
$('.user-list-filter').val('somevalue');
|
2018-01-04 18:15:42 +01:00
|
|
|
activity.escape_search();
|
|
|
|
assert.equal($('.user-list-filter').val(), '');
|
|
|
|
activity.escape_search();
|
|
|
|
assert($('#user-list .input-append').hasClass('notdisplayed'));
|
2017-06-24 15:15:37 +02:00
|
|
|
}());
|
|
|
|
|
|
|
|
(function test_initiate_search() {
|
|
|
|
$('.user-list-filter').blur();
|
2017-10-12 05:07:12 +02:00
|
|
|
$('.user-list-filter').closest = function (selector) {
|
|
|
|
assert.equal(selector, ".app-main [class^='column-']");
|
|
|
|
return $.create('right-sidebar').addClass('column-right');
|
|
|
|
};
|
|
|
|
activity.initiate_search();
|
|
|
|
assert.equal($('.column-right').hasClass('expanded'), true);
|
|
|
|
assert.equal($('.user-list-filter').is_focused(), true);
|
|
|
|
$('.user-list-filter').closest = function (selector) {
|
|
|
|
assert.equal(selector, ".app-main [class^='column-']");
|
|
|
|
return $.create('left-sidebar').addClass('column-left');
|
|
|
|
};
|
2017-06-24 15:15:37 +02:00
|
|
|
activity.initiate_search();
|
2017-10-12 05:07:12 +02:00
|
|
|
assert.equal($('.column-left').hasClass('expanded'), true);
|
2017-06-24 15:15:37 +02:00
|
|
|
assert.equal($('.user-list-filter').is_focused(), true);
|
|
|
|
}());
|
|
|
|
|
2018-01-04 18:15:42 +01:00
|
|
|
(function test_toggle_filter_display() {
|
|
|
|
activity.toggle_filter_displayed();
|
|
|
|
assert($('#user-list .input-append').hasClass('notdisplayed'));
|
|
|
|
$('.user-list-filter').closest = function (selector) {
|
|
|
|
assert.equal(selector, ".app-main [class^='column-']");
|
|
|
|
return $.create('sidebar').addClass('column-right');
|
|
|
|
};
|
|
|
|
activity.toggle_filter_displayed();
|
|
|
|
assert.equal($('#user-list .input-append').hasClass('notdisplayed'), false);
|
2017-06-24 15:15:37 +02:00
|
|
|
}());
|
|
|
|
|
|
|
|
(function test_searching() {
|
|
|
|
$('.user-list-filter').focus();
|
|
|
|
assert.equal(activity.searching(), true);
|
|
|
|
$('.user-list-filter').blur();
|
|
|
|
assert.equal(activity.searching(), false);
|
|
|
|
}());
|
|
|
|
|
|
|
|
(function test_update_huddles_and_redraw() {
|
2018-04-12 23:40:03 +02:00
|
|
|
const value = $.create('alice-fred-value');
|
|
|
|
const count = $.create('alice-fred-count');
|
|
|
|
const pm_key = alice.user_id.toString() + "," + fred.user_id.toString();
|
|
|
|
const li_selector = "li.group-pms-sidebar-entry[data-user-ids='" + pm_key + "']";
|
|
|
|
const li = $(li_selector);
|
2017-07-08 14:31:18 +02:00
|
|
|
count.set_find_results('.value', value);
|
|
|
|
li.set_find_results('.count', count);
|
2017-07-08 14:05:49 +02:00
|
|
|
count.set_parent(li);
|
|
|
|
|
2018-04-12 23:40:03 +02:00
|
|
|
const real_get_huddles = activity.get_huddles;
|
2018-04-12 23:54:13 +02:00
|
|
|
activity.get_huddles = () => ['1,2'];
|
2017-06-24 15:15:37 +02:00
|
|
|
activity.update_huddles = real_update_huddles;
|
|
|
|
activity.redraw();
|
|
|
|
assert.equal($('#group-pm-list').hasClass('show'), false);
|
|
|
|
page_params.realm_presence_disabled = false;
|
|
|
|
activity.redraw();
|
|
|
|
assert.equal($('#group-pm-list').hasClass('show'), true);
|
2018-04-12 23:54:13 +02:00
|
|
|
activity.get_huddles = () => [];
|
2017-06-24 15:15:37 +02:00
|
|
|
activity.redraw();
|
|
|
|
assert.equal($('#group-pm-list').hasClass('show'), false);
|
|
|
|
activity.get_huddles = real_get_huddles;
|
|
|
|
activity.update_huddles = function () {};
|
|
|
|
}());
|
|
|
|
|
|
|
|
(function test_set_user_status() {
|
2018-04-12 23:40:03 +02:00
|
|
|
const server_time = 500;
|
|
|
|
const info = {
|
2017-06-24 15:15:37 +02:00
|
|
|
website: {
|
|
|
|
status: "active",
|
|
|
|
timestamp: server_time,
|
|
|
|
},
|
|
|
|
};
|
2018-04-12 23:40:03 +02:00
|
|
|
const alice_li = $.create('alice-li');
|
2017-06-24 15:15:37 +02:00
|
|
|
|
2017-07-08 14:31:18 +02:00
|
|
|
$('#user_presences').set_find_results('[data-user-id="1"]', alice_li);
|
2017-06-24 15:15:37 +02:00
|
|
|
|
|
|
|
$('#user_presences').append = function () {};
|
|
|
|
|
|
|
|
$.stub_selector('#user_presences li', {
|
2018-04-12 23:54:13 +02:00
|
|
|
toArray: () => [],
|
2017-06-24 15:15:37 +02:00
|
|
|
});
|
|
|
|
presence.presence_info[alice.user_id] = undefined;
|
|
|
|
activity.set_user_status(me.email, info, server_time);
|
|
|
|
assert.equal(presence.presence_info[alice.user_id], undefined);
|
|
|
|
activity.set_user_status(alice.email, info, server_time);
|
2018-04-12 23:40:03 +02:00
|
|
|
const expected = { status: 'active', mobile: false, last_active: 500 };
|
2017-06-24 15:15:37 +02:00
|
|
|
assert.deepEqual(presence.presence_info[alice.user_id], expected);
|
|
|
|
activity.set_user_status(alice.email, info, server_time);
|
|
|
|
blueslip.warn = function (msg) {
|
|
|
|
assert.equal(msg, 'unknown email: foo@bar.com');
|
|
|
|
};
|
2018-04-12 23:54:13 +02:00
|
|
|
blueslip.error = () => {};
|
2017-06-24 15:15:37 +02:00
|
|
|
activity.set_user_status('foo@bar.com', info, server_time);
|
|
|
|
}());
|
|
|
|
|
|
|
|
(function test_initialize() {
|
|
|
|
$.stub_selector('html', {
|
|
|
|
on: function (name, func) {
|
|
|
|
func();
|
|
|
|
},
|
|
|
|
});
|
2018-04-12 23:54:13 +02:00
|
|
|
$(window).focus = func => func();
|
|
|
|
$(window).idle = () => {};
|
2017-06-24 15:15:37 +02:00
|
|
|
|
|
|
|
channel.post = function (payload) {
|
|
|
|
payload.success({});
|
|
|
|
};
|
|
|
|
global.server_events = {
|
|
|
|
check_for_unsuspend: function () {},
|
|
|
|
};
|
|
|
|
activity.has_focus = false;
|
|
|
|
activity.initialize();
|
|
|
|
assert(!activity.new_user_input);
|
|
|
|
assert(!$('#zephyr-mirror-error').hasClass('show'));
|
|
|
|
assert.equal(page_params.presences, undefined);
|
|
|
|
assert(activity.has_focus);
|
|
|
|
$(window).idle = function (params) {
|
|
|
|
params.onIdle();
|
|
|
|
};
|
|
|
|
channel.post = function (payload) {
|
|
|
|
payload.success({
|
|
|
|
zephyr_mirror_active: false,
|
|
|
|
});
|
|
|
|
};
|
2018-04-12 23:54:13 +02:00
|
|
|
global.setInterval = (func) => func();
|
|
|
|
|
2017-06-24 15:15:37 +02:00
|
|
|
activity.initialize();
|
|
|
|
assert($('#zephyr-mirror-error').hasClass('show'));
|
|
|
|
assert(!activity.new_user_input);
|
|
|
|
assert(!activity.has_focus);
|
2017-10-12 05:31:32 +02:00
|
|
|
|
|
|
|
// Now execute the reload-in-progress code path
|
|
|
|
reload.is_in_progress = function () {
|
|
|
|
return true;
|
|
|
|
};
|
|
|
|
activity.initialize();
|
|
|
|
|
2017-06-24 15:15:37 +02:00
|
|
|
}());
|