mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-03 21:43:21 +00:00 
			
		
		
		
	This lets us simplify the long-ish ‘../../static/js’ paths, and will remove the need for the ‘zrequire’ wrapper. Signed-off-by: Anders Kaseorg <anders@zulip.com>
		
			
				
	
	
		
			178 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			178 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
"use strict";
 | 
						|
 | 
						|
const {strict: assert} = require("assert");
 | 
						|
 | 
						|
const {zrequire} = require("./lib/namespace");
 | 
						|
const {run_test} = require("./lib/test");
 | 
						|
 | 
						|
const stream_data = zrequire("stream_data");
 | 
						|
const stream_sort = zrequire("stream_sort");
 | 
						|
 | 
						|
const scalene = {
 | 
						|
    subscribed: true,
 | 
						|
    name: "scalene",
 | 
						|
    stream_id: 1,
 | 
						|
    pin_to_top: true,
 | 
						|
};
 | 
						|
const fast_tortoise = {
 | 
						|
    subscribed: true,
 | 
						|
    name: "fast tortoise",
 | 
						|
    stream_id: 2,
 | 
						|
    pin_to_top: false,
 | 
						|
};
 | 
						|
const pneumonia = {
 | 
						|
    subscribed: true,
 | 
						|
    name: "pneumonia",
 | 
						|
    stream_id: 3,
 | 
						|
    pin_to_top: false,
 | 
						|
};
 | 
						|
const clarinet = {
 | 
						|
    subscribed: true,
 | 
						|
    name: "clarinet",
 | 
						|
    stream_id: 4,
 | 
						|
    pin_to_top: false,
 | 
						|
};
 | 
						|
const weaving = {
 | 
						|
    subscribed: false,
 | 
						|
    name: "weaving",
 | 
						|
    stream_id: 5,
 | 
						|
    pin_to_top: false,
 | 
						|
};
 | 
						|
const stream_hyphen_underscore_slash = {
 | 
						|
    subscribed: true,
 | 
						|
    name: "stream-hyphen_underscore/slash",
 | 
						|
    stream_id: 6,
 | 
						|
    pin_to_top: false,
 | 
						|
};
 | 
						|
const muted_active = {
 | 
						|
    subscribed: true,
 | 
						|
    name: "muted active",
 | 
						|
    stream_id: 7,
 | 
						|
    pin_to_top: false,
 | 
						|
    is_muted: true,
 | 
						|
};
 | 
						|
const muted_pinned = {
 | 
						|
    subscribed: true,
 | 
						|
    name: "muted pinned",
 | 
						|
    stream_id: 8,
 | 
						|
    pin_to_top: true,
 | 
						|
    is_muted: true,
 | 
						|
};
 | 
						|
 | 
						|
function sort_groups(query) {
 | 
						|
    const streams = stream_data.subscribed_stream_ids();
 | 
						|
    return stream_sort.sort_groups(streams, query);
 | 
						|
}
 | 
						|
 | 
						|
function test(label, f) {
 | 
						|
    run_test(label, (helpers) => {
 | 
						|
        stream_data.clear_subscriptions();
 | 
						|
        f(helpers);
 | 
						|
    });
 | 
						|
}
 | 
						|
 | 
						|
test("no_subscribed_streams", () => {
 | 
						|
    const sorted = sort_groups("");
 | 
						|
    assert.deepEqual(sorted, {
 | 
						|
        dormant_streams: [],
 | 
						|
        muted_active_streams: [],
 | 
						|
        muted_pinned_streams: [],
 | 
						|
        normal_streams: [],
 | 
						|
        pinned_streams: [],
 | 
						|
        same_as_before: sorted.same_as_before,
 | 
						|
    });
 | 
						|
    assert.equal(stream_sort.first_stream_id(), undefined);
 | 
						|
});
 | 
						|
 | 
						|
test("basics", ({override_rewire}) => {
 | 
						|
    stream_data.add_sub(scalene);
 | 
						|
    stream_data.add_sub(fast_tortoise);
 | 
						|
    stream_data.add_sub(pneumonia);
 | 
						|
    stream_data.add_sub(clarinet);
 | 
						|
    stream_data.add_sub(weaving);
 | 
						|
    stream_data.add_sub(stream_hyphen_underscore_slash);
 | 
						|
    stream_data.add_sub(muted_active);
 | 
						|
    stream_data.add_sub(muted_pinned);
 | 
						|
 | 
						|
    override_rewire(stream_data, "is_active", (sub) => sub.name !== "pneumonia");
 | 
						|
 | 
						|
    // Test sorting into categories/alphabetized
 | 
						|
    let sorted = sort_groups("");
 | 
						|
    assert.deepEqual(sorted.pinned_streams, [scalene.stream_id]);
 | 
						|
    assert.deepEqual(sorted.normal_streams, [
 | 
						|
        clarinet.stream_id,
 | 
						|
        fast_tortoise.stream_id,
 | 
						|
        stream_hyphen_underscore_slash.stream_id,
 | 
						|
    ]);
 | 
						|
    assert.deepEqual(sorted.muted_pinned_streams, [muted_pinned.stream_id]);
 | 
						|
    assert.deepEqual(sorted.muted_active_streams, [muted_active.stream_id]);
 | 
						|
    assert.deepEqual(sorted.dormant_streams, [pneumonia.stream_id]);
 | 
						|
 | 
						|
    // Test cursor helpers.
 | 
						|
    assert.equal(stream_sort.first_stream_id(), scalene.stream_id);
 | 
						|
 | 
						|
    assert.equal(stream_sort.prev_stream_id(scalene.stream_id), undefined);
 | 
						|
    assert.equal(stream_sort.prev_stream_id(muted_pinned.stream_id), scalene.stream_id);
 | 
						|
    assert.equal(stream_sort.prev_stream_id(clarinet.stream_id), muted_pinned.stream_id);
 | 
						|
 | 
						|
    assert.equal(
 | 
						|
        stream_sort.next_stream_id(fast_tortoise.stream_id),
 | 
						|
        stream_hyphen_underscore_slash.stream_id,
 | 
						|
    );
 | 
						|
    assert.equal(
 | 
						|
        stream_sort.next_stream_id(stream_hyphen_underscore_slash.stream_id),
 | 
						|
        muted_active.stream_id,
 | 
						|
    );
 | 
						|
    assert.equal(
 | 
						|
        stream_sort.next_stream_id(fast_tortoise.stream_id),
 | 
						|
        stream_hyphen_underscore_slash.stream_id,
 | 
						|
    );
 | 
						|
    assert.equal(stream_sort.next_stream_id(muted_active.stream_id), pneumonia.stream_id);
 | 
						|
    assert.equal(stream_sort.next_stream_id(pneumonia.stream_id), undefined);
 | 
						|
 | 
						|
    // Test filtering
 | 
						|
    sorted = sort_groups("s");
 | 
						|
    assert.deepEqual(sorted.pinned_streams, [scalene.stream_id]);
 | 
						|
    assert.deepEqual(sorted.normal_streams, [stream_hyphen_underscore_slash.stream_id]);
 | 
						|
    assert.deepEqual(sorted.dormant_streams, []);
 | 
						|
 | 
						|
    assert.equal(stream_sort.prev_stream_id(clarinet.stream_id), undefined);
 | 
						|
 | 
						|
    assert.equal(stream_sort.next_stream_id(clarinet.stream_id), undefined);
 | 
						|
 | 
						|
    // Test searching entire word, case-insensitive
 | 
						|
    sorted = sort_groups("PnEuMoNiA");
 | 
						|
    assert.deepEqual(sorted.pinned_streams, []);
 | 
						|
    assert.deepEqual(sorted.normal_streams, []);
 | 
						|
    assert.deepEqual(sorted.dormant_streams, [pneumonia.stream_id]);
 | 
						|
 | 
						|
    // Test searching part of word
 | 
						|
    sorted = sort_groups("tortoise");
 | 
						|
    assert.deepEqual(sorted.pinned_streams, []);
 | 
						|
    assert.deepEqual(sorted.normal_streams, [fast_tortoise.stream_id]);
 | 
						|
    assert.deepEqual(sorted.dormant_streams, []);
 | 
						|
 | 
						|
    // Test searching stream with spaces
 | 
						|
    sorted = sort_groups("fast t");
 | 
						|
    assert.deepEqual(sorted.pinned_streams, []);
 | 
						|
    assert.deepEqual(sorted.normal_streams, [fast_tortoise.stream_id]);
 | 
						|
    assert.deepEqual(sorted.dormant_streams, []);
 | 
						|
 | 
						|
    // Test searching part of stream name with non space word separators
 | 
						|
    sorted = sort_groups("hyphen");
 | 
						|
    assert.deepEqual(sorted.pinned_streams, []);
 | 
						|
    assert.deepEqual(sorted.normal_streams, [stream_hyphen_underscore_slash.stream_id]);
 | 
						|
    assert.deepEqual(sorted.dormant_streams, []);
 | 
						|
 | 
						|
    sorted = sort_groups("hyphen_underscore");
 | 
						|
    assert.deepEqual(sorted.pinned_streams, []);
 | 
						|
    assert.deepEqual(sorted.normal_streams, [stream_hyphen_underscore_slash.stream_id]);
 | 
						|
    assert.deepEqual(sorted.dormant_streams, []);
 | 
						|
 | 
						|
    // Test searching part of stream name with non space word separators
 | 
						|
    sorted = sort_groups("underscore");
 | 
						|
    assert.deepEqual(sorted.pinned_streams, []);
 | 
						|
    assert.deepEqual(sorted.normal_streams, [stream_hyphen_underscore_slash.stream_id]);
 | 
						|
    assert.deepEqual(sorted.dormant_streams, []);
 | 
						|
});
 |