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: 'alice@example.com', 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: 'me@example.com'}, ]; 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: 'alice@example.com'}, ]; 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: 'bob@example.com'}, ]; set_filter(terms); blueslip.set_test_data('warn', 'Unknown emails: bob@example.com'); 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, []); }());