mirror of
https://github.com/zulip/zulip.git
synced 2025-11-02 04:53:36 +00:00
This commit was originally automatically generated using `tools/lint --only=eslint --fix`. It was then modified by tabbott to contain only changes to a set of files that are unlikely to result in significant merge conflicts with any open pull request, excluding about 20 files. His plan is to merge the remaining changes with more precise care, potentially involving merging parts of conflicting pull requests before running the `eslint --fix` operation. Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
228 lines
4.7 KiB
JavaScript
228 lines
4.7 KiB
JavaScript
set_global('$', global.make_zjquery());
|
|
zrequire('people');
|
|
zrequire('buddy_data');
|
|
zrequire('buddy_list');
|
|
zrequire('ui');
|
|
|
|
set_global('blueslip', global.make_zblueslip());
|
|
|
|
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(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.toString()]);
|
|
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.toString());
|
|
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(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.set_test_data('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 = () => {
|
|
return {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.
|