mirror of https://github.com/zulip/zulip.git
302 lines
8.5 KiB
JavaScript
302 lines
8.5 KiB
JavaScript
set_global('$', global.make_zjquery());
|
|
|
|
add_dependencies({
|
|
Handlebars: 'handlebars',
|
|
templates: 'js/templates',
|
|
hash_util: 'js/hash_util',
|
|
hashchange: 'js/hashchange',
|
|
narrow: 'js/narrow',
|
|
people: 'js/people',
|
|
});
|
|
|
|
set_global('message_store', {
|
|
recent_private_messages: new global.Array(),
|
|
});
|
|
|
|
set_global('narrow_state', {});
|
|
set_global('resize', {
|
|
resize_stream_filters_container: function () {},
|
|
});
|
|
set_global('stream_popover', {
|
|
hide_topic_popover: function () {},
|
|
});
|
|
set_global('unread', {});
|
|
set_global('unread_ui', {});
|
|
set_global('blueslip', {});
|
|
set_global('popovers', {
|
|
hide_all: function () {},
|
|
});
|
|
|
|
var pm_list = require('js/pm_list.js');
|
|
|
|
global.compile_template('sidebar_private_message_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);
|
|
|
|
(function test_get_conversation_li() {
|
|
var test_conversation = 'foo@example.com,bar@example.com';
|
|
var error_msg;
|
|
global.blueslip.warn = function (error) {
|
|
error_msg = error;
|
|
};
|
|
pm_list.get_conversation_li(test_conversation);
|
|
assert.equal(error_msg, 'Unknown conversation: ' + test_conversation);
|
|
}());
|
|
|
|
(function test_close() {
|
|
var collapsed;
|
|
$('ul.expanded_private_messages').remove = function () {
|
|
collapsed = true;
|
|
};
|
|
pm_list.close();
|
|
assert(collapsed);
|
|
}());
|
|
|
|
(function 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 conversations = {user_ids_string: '101,102',
|
|
timestamp: 0 };
|
|
global.message_store.recent_private_messages.push(conversations);
|
|
|
|
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',
|
|
},
|
|
],
|
|
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);
|
|
|
|
$('#global_filters').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);
|
|
}());
|
|
|
|
(function test_expand_and_update_private_messages() {
|
|
var collapsed;
|
|
$('ul.expanded_private_messages').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 = $("#global_filters > li[data-name='private']");
|
|
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();
|
|
|
|
}());
|
|
|
|
(function test_update_dom_with_unread_counts() {
|
|
var total_value = $.create('total-value-stub');
|
|
var total_count = $.create('total-count-stub');
|
|
var private_li = $("#global_filters > li[data-name='private']");
|
|
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);
|
|
};
|
|
|
|
unread_ui.animate_private_message_changes = function () {};
|
|
|
|
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(), '');
|
|
}());
|