Files
zulip/frontend_tests/node_tests/narrow_activate.js
Ryan Rehman e0b1096253 narrow: Show streams:all notice only after "oldest" is found.
The streams:all advertisement notice in search should only appear
after all results have been fetched to indicate we've gotten to the
beginning of the target feed.

The notice gets hidden at the start of `narrow.activate` and is
shown just after we've fetched an older batch of messages if the
"oldest" message has been found.
Previously it would get displayed after the first fetch which
takes place from `narrow.activate`. Thus we move this logic to
`notifications.hide_or_show_history_limit_message` which gets
called after a successful message fetch.

Since the home message view contains all the messages we are not
required to display this notice. However if it is already shown
we hide it as a part of `handle_post_narrow_deactivate_processes`.

To accomplish this we need to add `has_found_oldest` key to the
`fetch_status` API.
We also removed the `pre_scroll_cont` parameter as this was it's
only use case and is now redundant.
2020-06-14 11:06:54 -07:00

239 lines
6.1 KiB
JavaScript

const util = zrequire('util');
set_global('$', global.make_zjquery());
zrequire('narrow_state');
set_global('resize', {
resize_stream_filters_container: () => {},
});
zrequire('stream_data');
zrequire('Filter', 'js/filter');
zrequire('FetchStatus', 'js/fetch_status');
zrequire('MessageListData', 'js/message_list_data');
zrequire('unread');
zrequire('narrow');
zrequire('search_pill');
set_global('channel', {});
set_global('compose', {});
set_global('compose_actions', {});
set_global('current_msg_list', {});
set_global('hashchange', {});
set_global('home_msg_list', {});
set_global('message_fetch', {});
set_global('message_list', {
set_narrowed: function (value) { this.narrowed = value; },
});
set_global('message_scroll', {});
set_global('message_util', {});
set_global('notifications', {});
set_global('page_params', {});
set_global('search', {});
set_global('stream_list', {});
set_global('tab_bar', {});
set_global('top_left_corner', {});
set_global('typing_events', {});
set_global('ui_util', {});
set_global('unread_ops', {});
set_global('search_pill_widget', {
widget: {
clear: function () {return true;},
appendValue: function () {return true;},
},
});
//
// We have strange hacks in narrow.activate to sleep 0
// seconds.
global.patch_builtin('setTimeout', (f, t) => {
assert.equal(t, 0);
f();
});
set_global('muting', {
is_topic_muted: () => false,
});
const denmark = {
subscribed: false,
color: 'blue',
name: 'Denmark',
stream_id: 1,
is_muted: true,
};
stream_data.add_sub(denmark);
function test_helper() {
let events = [];
function stub(module_name, func_name) {
global[module_name][func_name] = () => {
events.push(module_name + '.' + func_name);
};
}
stub('compose_actions', 'on_narrow');
stub('hashchange', 'save_narrow');
stub('message_scroll', 'hide_indicators');
stub('message_scroll', 'show_loading_older');
stub('notifications', 'clear_compose_notifications');
stub('notifications', 'redraw_title');
stub('search', 'update_button_visibility');
stub('stream_list', 'handle_narrow_activated');
stub('tab_bar', 'initialize');
stub('top_left_corner', 'handle_narrow_activated');
stub('typing_events', 'render_notifications_for_narrow');
stub('ui_util', 'change_tab_to');
stub('unread_ops', 'process_visible');
stub('compose', 'update_closed_compose_buttons_for_stream');
stub('compose', 'update_closed_compose_buttons_for_private');
stub('notifications', 'hide_history_limit_message');
return {
clear: () => {
events = [];
},
push_event: (event) => {
events.push(event);
},
assert_events: (expected_events) => {
assert.deepEqual(expected_events, events);
},
};
}
function stub_message_list() {
message_list.MessageList = function (opts) {
const list = this;
this.data = opts.data;
this.view = {
set_message_offset: function (offset) {
list.view.offset = offset;
},
};
return this;
};
message_list.MessageList.prototype = {
get: function (msg_id) {
return this.data.get(msg_id);
},
empty: function () {
return this.data.empty();
},
select_id: function (msg_id) {
this.selected_id = msg_id;
},
};
}
run_test('basics', () => {
stub_message_list();
const helper = test_helper();
const terms = [
{ operator: 'stream', operand: 'Denmark' },
];
const selected_id = 1000;
const selected_message = {
id: selected_id,
type: 'stream',
stream_id: denmark.stream_id,
topic: 'whatever',
};
const messages = [selected_message];
const row = {
length: 1,
offset: () => { return {top: 25}; },
};
current_msg_list.selected_id = () => { return -1; };
current_msg_list.get_row = () => { return row; };
message_list.all = {
all_messages: () => {
return messages;
},
get: (msg_id) => {
assert.equal(msg_id, selected_id);
return selected_message;
},
data: {
fetch_status: {
has_found_newest: () => true,
},
},
empty: () => false,
first: () => {
return {id: 900};
},
last: () => {
return {id: 1100};
},
};
let cont;
message_fetch.load_messages_for_narrow = (opts) => {
cont = opts.cont;
assert.deepEqual(opts, {
cont: opts.cont,
anchor: 1000,
});
};
narrow.activate(terms, {
then_select_id: selected_id,
});
assert.equal(message_list.narrowed.selected_id, selected_id);
assert.equal(message_list.narrowed.view.offset, 25);
assert.equal(narrow_state.narrowed_to_pms(), false);
helper.assert_events([
'notifications.clear_compose_notifications',
'notifications.redraw_title',
'notifications.hide_history_limit_message',
'ui_util.change_tab_to',
'message_scroll.hide_indicators',
'unread_ops.process_visible',
'hashchange.save_narrow',
'compose.update_closed_compose_buttons_for_stream',
'search.update_button_visibility',
'compose_actions.on_narrow',
'top_left_corner.handle_narrow_activated',
'stream_list.handle_narrow_activated',
'typing_events.render_notifications_for_narrow',
'tab_bar.initialize',
]);
current_msg_list.selected_id = () => { return -1; };
current_msg_list.get_row = () => { return row; };
util.sorted_ids = () => { return []; };
narrow.activate([{ operator: 'is', operand: 'private' }], {
then_select_id: selected_id,
});
assert.equal(narrow_state.narrowed_to_pms(), true);
channel.post = (opts) => {
assert.equal(opts.url, '/json/report/narrow_times');
helper.push_event('report narrow times');
};
helper.clear();
cont();
helper.assert_events([
'report narrow times',
]);
});