mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-03 21:43:21 +00:00 
			
		
		
		
	Expand get_unread_ids() to all local narrows.
This commit makes it so that any query for which we do a local filter leads to us examining the full list of unread message ids in our cache to find a potentially unread message that passes the filter. This can often allow us to more immediately jump to a new narrow with an appropriately selected message. Fixes #9319
This commit is contained in:
		@@ -71,13 +71,21 @@ run_test('get_unread_ids', () => {
 | 
			
		||||
    assert.equal(unread_ids, undefined);
 | 
			
		||||
 | 
			
		||||
    terms = [
 | 
			
		||||
        {operator: 'bogus_operator', operand: 'me@example.com'},
 | 
			
		||||
        {operator: 'search', operand: 'whatever'},
 | 
			
		||||
    ];
 | 
			
		||||
    set_filter(terms);
 | 
			
		||||
    unread_ids = candidate_ids();
 | 
			
		||||
    assert.equal(unread_ids, undefined);
 | 
			
		||||
    assert_unread_info({flavor: 'cannot_compute'});
 | 
			
		||||
 | 
			
		||||
    terms = [
 | 
			
		||||
        {operator: 'bogus_operator', operand: 'me@example.com'},
 | 
			
		||||
    ];
 | 
			
		||||
    set_filter(terms);
 | 
			
		||||
    unread_ids = candidate_ids();
 | 
			
		||||
    assert.deepEqual(unread_ids, []);
 | 
			
		||||
    assert_unread_info({flavor: 'not_found'});
 | 
			
		||||
 | 
			
		||||
    terms = [
 | 
			
		||||
        {operator: 'stream', operand: 'bogus'},
 | 
			
		||||
    ];
 | 
			
		||||
@@ -169,6 +177,15 @@ run_test('get_unread_ids', () => {
 | 
			
		||||
    unread_ids = candidate_ids();
 | 
			
		||||
    assert.deepEqual(unread_ids, [private_msg.id]);
 | 
			
		||||
 | 
			
		||||
    // For a negated search, our candidate ids will be all
 | 
			
		||||
    // unread messages, even ones that don't pass the filter.
 | 
			
		||||
    terms = [
 | 
			
		||||
        {operator: 'is', operand: 'private', negated: true},
 | 
			
		||||
    ];
 | 
			
		||||
    set_filter(terms);
 | 
			
		||||
    unread_ids = candidate_ids();
 | 
			
		||||
    assert.deepEqual(unread_ids, [stream_msg.id, private_msg.id]);
 | 
			
		||||
 | 
			
		||||
    terms = [
 | 
			
		||||
        {operator: 'pm-with', operand: 'bob@example.com'},
 | 
			
		||||
    ];
 | 
			
		||||
@@ -200,3 +217,18 @@ run_test('get_unread_ids', () => {
 | 
			
		||||
        flavor: 'cannot_compute',
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
run_test('defensive code', () => {
 | 
			
		||||
    // Test defensive code.  We actually avoid calling
 | 
			
		||||
    // _possible_unread_message_ids for any case where we
 | 
			
		||||
    // couldn't compute the unread message ids, but that
 | 
			
		||||
    // invariant is hard to future-proof.
 | 
			
		||||
    narrow_state._possible_unread_message_ids = () => undefined;
 | 
			
		||||
    var terms = [
 | 
			
		||||
        {operator: 'some-unhandled-case', operand: 'whatever'},
 | 
			
		||||
    ];
 | 
			
		||||
    set_filter(terms);
 | 
			
		||||
    assert_unread_info({
 | 
			
		||||
        flavor: 'cannot_compute',
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user