zulip/frontend_tests/node_tests/stream_search.js

188 lines
4.1 KiB
JavaScript

// This tests the stream searching functionality which currently
// lives in stream_list.js.
set_global('$', global.make_zjquery());
zrequire('stream_list');
const noop = () => {};
set_global('resize', {
resize_page_components: noop,
resize_stream_filters_container: noop,
});
set_global('popovers', {});
set_global('stream_popover', {});
function expand_sidebar() {
$('.app-main .column-left').addClass('expanded');
}
function make_cursor_helper() {
const events = [];
stream_list.stream_cursor = {
reset: () => {
events.push('reset');
},
clear: () => {
events.push('clear');
},
};
return {
events: events,
};
}
function simulate_search_expanded() {
// The way we check if the search widget is expanded
// is kind of awkward.
$('.stream_search_section.notdisplayed').length = 0;
}
function simulate_search_collapsed() {
$('.stream_search_section.notdisplayed').length = 1;
}
function toggle_filter() {
stream_list.toggle_filter_displayed({preventDefault: noop});
}
function clear_search_input() {
stream_list.clear_search({stopPropagation: noop});
}
run_test('basics', () => {
let cursor_helper;
const input = $('.stream-list-filter');
const section = $('.stream_search_section');
expand_sidebar();
section.addClass('notdisplayed');
cursor_helper = make_cursor_helper();
function verify_expanded() {
assert(!section.hasClass('notdisplayed'));
simulate_search_expanded();
}
function verify_focused() {
assert(stream_list.searching());
assert(input.is_focused());
}
function verify_blurred() {
assert(stream_list.searching());
assert(input.is_focused());
}
function verify_collapsed() {
assert(section.hasClass('notdisplayed'));
assert(!input.is_focused());
assert(!stream_list.searching());
simulate_search_collapsed();
}
function verify_list_updated(f) {
let updated;
stream_list.update_streams_sidebar = () => {
updated = true;
};
f();
assert(updated);
}
// Initiate search (so expand widget).
stream_list.initiate_search();
verify_expanded();
verify_focused();
assert.deepEqual(cursor_helper.events, ['reset']);
// Collapse the widget.
cursor_helper = make_cursor_helper();
toggle_filter();
verify_collapsed();
assert.deepEqual(cursor_helper.events, ['clear']);
// Expand the widget.
toggle_filter();
verify_expanded();
verify_focused();
(function add_some_text_and_collapse() {
cursor_helper = make_cursor_helper();
input.val('foo');
verify_list_updated(() => {
toggle_filter();
});
verify_collapsed();
assert.deepEqual(cursor_helper.events, ['reset', 'clear']);
}());
// Expand the widget.
toggle_filter();
verify_expanded();
verify_focused();
// Clear an empty search.
clear_search_input();
verify_collapsed();
// Expand the widget.
toggle_filter();
stream_list.initiate_search();
// Clear a non-empty search.
input.val('foo');
verify_list_updated(() => {
clear_search_input();
});
verify_expanded();
// Expand the widget.
toggle_filter();
stream_list.initiate_search();
// Escape a non-empty search.
input.val('foo');
stream_list.escape_search();
verify_blurred();
// Expand the widget.
toggle_filter();
stream_list.initiate_search();
// Escape an empty search.
input.val('');
stream_list.escape_search();
verify_collapsed();
});
run_test('expanding_sidebar', () => {
$('.app-main .column-left').removeClass('expanded');
const events = [];
popovers.hide_all = () => {
events.push('popovers.hide_all');
};
stream_popover.show_streamlist_sidebar = () => {
events.push('stream_popover.show_streamlist_sidebar');
};
stream_list.initiate_search();
assert.deepEqual(events, [
'popovers.hide_all',
'stream_popover.show_streamlist_sidebar',
]);
});