Files
zulip/frontend_tests/node_tests/pm_list.js
Steve Howell 0c029fa3df left sidebar: Remove broken animation for new PMs.
When new PMs came in, we would do a little
animation to show you the incoming message.
Unfortunately, it was broken and would animate
too many things.  (The code looks at a single
var to see if PM counts changed, but there are
actually mulitple PM counts.  We could fix that,
but we decided that this feature just isn't
worth the complexity.)

We still animate incoming mentions.

Fixes #11868.
2019-03-15 13:33:11 -07:00

294 lines
8.3 KiB
JavaScript

set_global('$', global.make_zjquery());
set_global('narrow_state', {});
set_global('resize', {
resize_stream_filters_container: function () {},
});
set_global('ui', {
set_up_scrollbar: function () {},
});
set_global('stream_popover', {
hide_topic_popover: function () {},
});
set_global('unread', {});
set_global('unread_ui', {});
set_global('blueslip', global.make_zblueslip());
set_global('popovers', {
hide_all: function () {},
});
zrequire('user_status');
zrequire('presence');
zrequire('buddy_data');
zrequire('hash_util');
zrequire('Handlebars', 'handlebars');
zrequire('templates');
zrequire('people');
zrequire('pm_conversations');
zrequire('pm_list');
var alice = {
email: 'alice@zulip.com',
user_id: 101,
full_name: 'Alice',
};
var bob = {
email: 'bob@zulip.com',
user_id: 102,
full_name: 'Bob',
};
var me = {
email: 'me@zulip.com',
user_id: 103,
full_name: 'Me Myself',
};
global.people.add_in_realm(alice);
global.people.add_in_realm(bob);
global.people.add_in_realm(me);
global.people.initialize_current_user(me.user_id);
run_test('get_conversation_li', () => {
var test_conversation = 'foo@example.com,bar@example.com'; // people.js
pm_list.get_conversation_li(test_conversation);
});
run_test('close', () => {
var collapsed;
$('#private-container').remove = function () {
collapsed = true;
};
pm_list.close();
assert(collapsed);
});
run_test('build_private_messages_list', () => {
var active_conversation_1 = "alice@zulip.com,bob@zulip.com";
var active_conversation_2 = 'me@zulip.com,alice@zulip.com';
var max_conversations = 5;
var user_ids_string = '101,102';
var timestamp = 0;
pm_conversations.recent.insert(user_ids_string, timestamp);
global.unread.num_unread_for_person = function () {
return 1;
};
var template_data;
global.templates.render = function (template_name, data) {
assert.equal(template_name, 'sidebar_private_message_list');
template_data = data;
};
pm_list._build_private_messages_list(active_conversation_1, max_conversations);
var expected_data = {
messages: [
{
recipients: 'Alice, Bob',
user_ids_string: '101,102',
unread: 1,
is_zero: false,
zoom_out_hide: false,
url: '#narrow/pm-with/101,102-group',
user_circle_class: 'user_circle_fraction',
fraction_present: false,
is_group: true,
},
],
zoom_class: 'zoomed-out',
want_show_more_messages_links: false,
};
assert.deepEqual(template_data, expected_data);
max_conversations = 0;
global.unread.num_unread_for_person = function () {
return 0;
};
pm_list._build_private_messages_list(active_conversation_2, max_conversations);
expected_data.messages[0].unread = 0;
expected_data.messages[0].is_zero = true;
expected_data.messages[0].zoom_out_hide = true;
expected_data.want_show_more_messages_links = true;
assert.deepEqual(template_data, expected_data);
$('.top_left_private_messages').on = function (action, selector, f) {
var e = { preventDefault: function () {}, stopPropagation: function () {}};
f(e);
};
pm_list.initialize();
expected_data.zoom_class = "zoomed-in";
expected_data.want_show_more_messages_links = false;
pm_list._build_private_messages_list(active_conversation_2, max_conversations);
assert.deepEqual(template_data, expected_data);
});
run_test('expand_and_update_private_messages', () => {
var collapsed;
$('#private-container').remove = function () {
collapsed = true;
};
global.templates.render = function (template_name) {
assert.equal(template_name, 'sidebar_private_message_list');
return 'fake-dom-for-pm-list';
};
var private_li = $(".top_left_private_messages");
var alice_li = $.create('alice-li-stub');
var bob_li = $.create('bob-li-stub');
private_li.set_find_results("li[data-user-ids-string='101']", alice_li);
private_li.set_find_results("li[data-user-ids-string='102']", bob_li);
var dom;
private_li.append = function (html) {
dom = html;
};
pm_list.expand([alice.email, bob.email]);
assert.equal(dom, 'fake-dom-for-pm-list');
assert(collapsed);
assert(!alice_li.hasClass('active-sub-filter'));
pm_list.expand([alice.email]);
assert.equal(dom, 'fake-dom-for-pm-list');
assert(collapsed);
assert(alice_li.hasClass('active-sub-filter'));
pm_list.expand([]);
assert.equal(dom, 'fake-dom-for-pm-list');
assert(collapsed);
// Next, simulate clicking on Bob.
narrow_state.active = function () { return true; };
narrow_state.filter = function () {
return {
operands: function (operand) {
if (operand === 'is') {
return 'private';
}
assert.equal(operand, 'pm-with');
return [bob.email, alice.email];
},
};
};
collapsed = false;
pm_list.update_private_messages();
assert(collapsed);
assert(!bob_li.hasClass('active-sub-filter'));
narrow_state.filter = function () {
return {
operands: function (operand) {
if (operand === 'is') {
return ['private'];
}
assert.equal(operand, 'pm-with');
return [];
},
};
};
collapsed = false;
pm_list.update_private_messages();
assert(collapsed);
assert(!bob_li.hasClass('active-sub-filter'));
narrow_state.filter = function () {
return {
operands: function (operand) {
if (operand === 'is') {
return ['private'];
}
assert.equal(operand, 'pm-with');
return [bob.email];
},
};
};
collapsed = false;
pm_list.update_private_messages();
assert(collapsed);
assert(bob_li.hasClass('active-sub-filter'));
narrow_state.active = function () { return false; };
pm_list.update_private_messages();
});
run_test('update_dom_with_unread_counts', () => {
var total_value = $.create('total-value-stub');
var total_count = $.create('total-count-stub');
var private_li = $(".top_left_private_messages");
private_li.set_find_results('.count', total_count);
total_count.set_find_results('.value', total_value);
var child_value = $.create('child-value-stub');
var child_count = $.create('child-count-stub');
var child_li = $.create('child-li-stub');
private_li.set_find_results("li[data-user-ids-string='101,102']", child_li);
child_li.set_find_results('.private_message_count', child_count);
child_count.set_find_results('.value', child_value);
var pm_count = new Dict();
var user_ids_string = '101,102';
pm_count.set(user_ids_string, 7);
var counts = {
private_message_count: 10,
pm_count: pm_count,
};
var toggle_button_set;
unread_ui.set_count_toggle_button = function (elt, count) {
toggle_button_set = true;
assert.equal(count, 10);
};
pm_list.update_dom_with_unread_counts(counts);
assert(toggle_button_set);
assert.equal(child_value.text(), '7');
assert.equal(total_value.text(), '10');
pm_count.set(user_ids_string, 0);
counts = {
private_message_count: 0,
pm_count: pm_count,
};
toggle_button_set = false;
unread_ui.set_count_toggle_button = function (elt, count) {
toggle_button_set = true;
assert.equal(count, 0);
};
pm_list.update_dom_with_unread_counts(counts);
assert(toggle_button_set);
assert.equal(child_value.text(), '');
assert.equal(total_value.text(), '');
var pm_li = pm_list.get_conversation_li("alice@zulip.com,bob@zulip.com");
pm_li.find = function (sel) {
assert.equal(sel, '.private_message_count');
return {find: function (sel) {
assert.equal(sel, '.value');
return [];
}};
};
pm_list.update_dom_with_unread_counts(counts);
assert(toggle_button_set);
assert.equal(child_value.text(), '');
assert.equal(total_value.text(), '');
});