zulip/frontend_tests/node_tests/narrow_unread.js
Steve Howell a68fa980d3 Add starred messages to our new API for unread ids.
Even though starred messages are never unread, it's useful
for us to have helper functions for them.

This change makes it so that clicking on "Starred Messages"
takes you to the last read message immediately, without a
server delay.
2018-05-03 14:36:34 -07:00

154 lines
3.7 KiB
JavaScript

zrequire('Filter', 'js/filter');
zrequire('people');
zrequire('stream_data');
zrequire('unread');
zrequire('util');
set_global('blueslip', global.make_zblueslip());
set_global('muting', {
is_topic_muted: () => false,
});
// The main code we are testing lives here.
zrequire('narrow_state');
const alice = {
email: '[email protected]',
user_id: 11,
full_name: 'Alice',
};
people.init();
people.add(alice);
people.is_my_user_id = () => false;
function set_filter(terms) {
const filter = new Filter(terms);
narrow_state.set_current_filter(filter);
}
function assert_unread_info(expected) {
assert.deepEqual(narrow_state.get_first_unread_info(), expected);
}
(function test_get_unread_ids() {
var unread_ids;
var terms;
var msg;
const sub = {
name: 'My Stream',
stream_id: 55,
};
stream_data.add_sub(sub.name, sub);
unread_ids = narrow_state.get_unread_ids();
assert.equal(unread_ids, undefined);
terms = [
{operator: 'sender', operand: '[email protected]'},
];
set_filter(terms);
unread_ids = narrow_state.get_unread_ids();
assert.equal(unread_ids, undefined);
assert_unread_info({flavor: 'cannot_compute'});
terms = [
{operator: 'stream', operand: 'bogus'},
];
set_filter(terms);
unread_ids = narrow_state.get_unread_ids();
assert.deepEqual(unread_ids, []);
terms = [
{operator: 'stream', operand: sub.name},
];
set_filter(terms);
unread_ids = narrow_state.get_unread_ids();
assert.deepEqual(unread_ids, []);
assert_unread_info({flavor: 'not_found'});
msg = {
id: 101,
type: 'stream',
stream_id: sub.stream_id,
subject: 'my topic',
unread: true,
mentioned: true,
};
unread.process_loaded_messages([msg]);
unread_ids = narrow_state.get_unread_ids();
assert.deepEqual(unread_ids, [msg.id]);
assert_unread_info({
flavor: 'found',
msg_id: msg.id,
});
terms = [
{operator: 'stream', operand: 'bogus'},
{operator: 'topic', operand: 'my topic'},
];
set_filter(terms);
unread_ids = narrow_state.get_unread_ids();
assert.deepEqual(unread_ids, []);
terms = [
{operator: 'stream', operand: sub.name},
{operator: 'topic', operand: 'my topic'},
];
set_filter(terms);
unread_ids = narrow_state.get_unread_ids();
assert.deepEqual(unread_ids, [msg.id]);
terms = [
{operator: 'is', operand: 'mentioned'},
];
set_filter(terms);
unread_ids = narrow_state.get_unread_ids();
assert.deepEqual(unread_ids, [msg.id]);
terms = [
{operator: 'pm-with', operand: '[email protected]'},
];
set_filter(terms);
unread_ids = narrow_state.get_unread_ids();
assert.deepEqual(unread_ids, []);
msg = {
id: 102,
type: 'private',
unread: true,
display_recipient: [
{user_id: alice.user_id},
],
};
unread.process_loaded_messages([msg]);
unread_ids = narrow_state.get_unread_ids();
assert.deepEqual(unread_ids, [msg.id]);
terms = [
{operator: 'is', operand: 'private'},
];
set_filter(terms);
unread_ids = narrow_state.get_unread_ids();
assert.deepEqual(unread_ids, [msg.id]);
terms = [
{operator: 'pm-with', operand: '[email protected]'},
];
set_filter(terms);
blueslip.set_test_data('warn', 'Unknown emails: [email protected]');
unread_ids = narrow_state.get_unread_ids();
assert.deepEqual(unread_ids, []);
terms = [
{operator: 'is', operand: 'starred'},
];
set_filter(terms);
unread_ids = narrow_state.get_unread_ids();
assert.deepEqual(unread_ids, []);
}());