mirror of https://github.com/zulip/zulip.git
224 lines
4.7 KiB
JavaScript
224 lines
4.7 KiB
JavaScript
set_global('$', global.make_zjquery());
|
|
zrequire('people');
|
|
zrequire('buddy_data');
|
|
zrequire('buddy_list');
|
|
zrequire('ui');
|
|
|
|
set_global('padded_widget', {
|
|
update_padding: () => {},
|
|
});
|
|
|
|
function init_simulated_scrolling() {
|
|
set_global('message_viewport', {
|
|
height: () => 550,
|
|
});
|
|
|
|
const elem = {
|
|
dataset: {},
|
|
scrollTop: 0,
|
|
scrollHeight: 0,
|
|
};
|
|
|
|
$('#buddy_list_wrapper')[0] = elem;
|
|
|
|
$('#buddy_list_wrapper_padding').height = () => 0;
|
|
|
|
return elem;
|
|
}
|
|
|
|
const alice = {
|
|
email: 'alice@zulip.com',
|
|
user_id: 10,
|
|
full_name: 'Alice Smith',
|
|
};
|
|
people.add_active_user(alice);
|
|
|
|
run_test('get_items', () => {
|
|
const alice_li = $.create('alice stub');
|
|
const sel = 'li.user_sidebar_entry';
|
|
|
|
buddy_list.container.set_find_results(sel, {
|
|
map: (f) => [f(0, alice_li)],
|
|
});
|
|
const items = buddy_list.get_items();
|
|
|
|
assert.deepEqual(items, [alice_li]);
|
|
});
|
|
|
|
run_test('basics', () => {
|
|
init_simulated_scrolling();
|
|
|
|
buddy_list.get_data_from_keys = (opts) => {
|
|
const keys = opts.keys;
|
|
assert.deepEqual(keys, [alice.user_id]);
|
|
return 'data-stub';
|
|
};
|
|
|
|
buddy_list.items_to_html = (opts) => {
|
|
const items = opts.items;
|
|
|
|
assert.equal(items, 'data-stub');
|
|
|
|
return 'html-stub';
|
|
};
|
|
|
|
let appended;
|
|
buddy_list.container.append = (html) => {
|
|
assert.equal(html, 'html-stub');
|
|
appended = true;
|
|
};
|
|
|
|
buddy_list.populate({
|
|
keys: [alice.user_id],
|
|
});
|
|
assert(appended);
|
|
|
|
const alice_li = $.create('alice-li-stub');
|
|
alice_li.length = 1;
|
|
|
|
buddy_list.get_li_from_key = (opts) => {
|
|
const key = opts.key;
|
|
|
|
assert.equal(key, alice.user_id);
|
|
return alice_li;
|
|
};
|
|
|
|
const li = buddy_list.find_li({
|
|
key: alice.user_id,
|
|
});
|
|
assert.equal(li, alice_li);
|
|
});
|
|
|
|
run_test('big_list', () => {
|
|
const elem = init_simulated_scrolling();
|
|
|
|
// Don't actually render, but do simulate filling up
|
|
// the screen.
|
|
let chunks_inserted = 0;
|
|
|
|
buddy_list.render_more = () => {
|
|
elem.scrollHeight += 100;
|
|
chunks_inserted += 1;
|
|
};
|
|
|
|
// We will have more than enough users, but still
|
|
// only do 6 chunks of data.
|
|
const num_users = 300;
|
|
const user_ids = [];
|
|
|
|
_.times(num_users, (i) => {
|
|
const person = {
|
|
email: 'foo' + i + '@zulip.com',
|
|
user_id: 100 + i,
|
|
full_name: 'Somebody ' + i,
|
|
};
|
|
people.add_active_user(person);
|
|
user_ids.push(person.user_id);
|
|
});
|
|
|
|
buddy_list.populate({
|
|
keys: user_ids,
|
|
});
|
|
|
|
assert.equal(chunks_inserted, 6);
|
|
});
|
|
|
|
run_test('force_render', () => {
|
|
buddy_list.render_count = 50;
|
|
|
|
let num_rendered = 0;
|
|
buddy_list.render_more = (opts) => {
|
|
num_rendered += opts.chunk_size;
|
|
};
|
|
|
|
buddy_list.force_render({
|
|
pos: 60,
|
|
});
|
|
|
|
assert.equal(num_rendered, 60 - 50 + 3);
|
|
|
|
// Force a contrived error case for line coverage.
|
|
blueslip.expect('error', 'cannot show key at this position: 10');
|
|
buddy_list.force_render({
|
|
pos: 10,
|
|
});
|
|
});
|
|
|
|
run_test('find_li w/force_render', () => {
|
|
// If we call find_li w/force_render set, and the
|
|
// key is not already rendered in DOM, then the
|
|
// widget will call show_key to force-render it.
|
|
const key = '999';
|
|
const stub_li = $.create('nada');
|
|
|
|
stub_li.length = 0;
|
|
|
|
buddy_list.get_li_from_key = (opts) => {
|
|
assert.equal(opts.key, key);
|
|
return stub_li;
|
|
};
|
|
|
|
buddy_list.keys = [
|
|
'foo', 'bar', key, 'baz',
|
|
];
|
|
|
|
let shown;
|
|
|
|
buddy_list.force_render = (opts) => {
|
|
assert.equal(opts.pos, 2);
|
|
shown = true;
|
|
};
|
|
|
|
const empty_li = buddy_list.find_li({
|
|
key: key,
|
|
});
|
|
assert.equal(empty_li, stub_li);
|
|
assert(!shown);
|
|
|
|
const li = buddy_list.find_li({
|
|
key: key,
|
|
force_render: true,
|
|
});
|
|
|
|
assert.equal(li, stub_li);
|
|
assert(shown);
|
|
|
|
buddy_list.get_li_from_key = () => ({length: 0});
|
|
|
|
const undefined_li = buddy_list.find_li({
|
|
key: 'not-there',
|
|
force_render: true,
|
|
});
|
|
|
|
// very hacky:
|
|
assert.equal(undefined_li.length, 0);
|
|
});
|
|
|
|
run_test('scrolling', () => {
|
|
let scroll_f;
|
|
|
|
$(buddy_list.scroll_container_sel).scroll = (f) => {
|
|
scroll_f = f;
|
|
};
|
|
|
|
buddy_list.populate({
|
|
keys: [],
|
|
});
|
|
|
|
let tried_to_fill;
|
|
|
|
buddy_list.fill_screen_with_content = () => {
|
|
tried_to_fill = true;
|
|
};
|
|
|
|
assert(!tried_to_fill);
|
|
|
|
buddy_list.start_scroll_handler();
|
|
scroll_f();
|
|
|
|
assert(tried_to_fill);
|
|
});
|
|
|
|
// You have to be careful here about where you place tests,
|
|
// since there is lots of stubbing in this module.
|