mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-03 21:43:21 +00:00 
			
		
		
		
	We no longer need to add_tooltip_to_left_panel_row since tippyjs.delegate will automatically do that for us. Tippyjs automatically places it to left on small widths and bottom for large widhts.
		
			
				
	
	
		
			205 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			205 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
"use strict";
 | 
						|
 | 
						|
const {strict: assert} = require("assert");
 | 
						|
 | 
						|
const {stub_templates} = require("../zjsunit/handlebars");
 | 
						|
const {mock_cjs, mock_esm, set_global, zrequire} = require("../zjsunit/namespace");
 | 
						|
const {run_test} = require("../zjsunit/test");
 | 
						|
const $ = require("../zjsunit/zjquery");
 | 
						|
 | 
						|
const denmark_stream_id = 101;
 | 
						|
 | 
						|
mock_cjs("jquery", $);
 | 
						|
const ui = mock_esm("../../static/js/ui", {
 | 
						|
    get_content_element: (element) => element,
 | 
						|
    get_scroll_element: (element) => element,
 | 
						|
});
 | 
						|
 | 
						|
set_global("location", {
 | 
						|
    hash: `#streams/${denmark_stream_id}/announce`,
 | 
						|
});
 | 
						|
mock_esm("../../static/js/hash_util", {
 | 
						|
    by_stream_uri: () => {},
 | 
						|
});
 | 
						|
 | 
						|
const stream_data = zrequire("stream_data");
 | 
						|
const subs = zrequire("subs");
 | 
						|
 | 
						|
run_test("redraw_left_panel", () => {
 | 
						|
    // set-up sub rows stubs
 | 
						|
    const denmark = {
 | 
						|
        elem: "denmark",
 | 
						|
        subscribed: false,
 | 
						|
        name: "Denmark",
 | 
						|
        stream_id: denmark_stream_id,
 | 
						|
        description: "Copenhagen",
 | 
						|
        subscribers: [1],
 | 
						|
        stream_weekly_traffic: null,
 | 
						|
        color: "red",
 | 
						|
    };
 | 
						|
    const poland = {
 | 
						|
        elem: "poland",
 | 
						|
        subscribed: true,
 | 
						|
        name: "Poland",
 | 
						|
        stream_id: 102,
 | 
						|
        description: "monday",
 | 
						|
        subscribers: [1, 2, 3],
 | 
						|
        stream_weekly_traffic: 13,
 | 
						|
        color: "red",
 | 
						|
    };
 | 
						|
    const pomona = {
 | 
						|
        elem: "pomona",
 | 
						|
        subscribed: true,
 | 
						|
        name: "Pomona",
 | 
						|
        stream_id: 103,
 | 
						|
        description: "college",
 | 
						|
        subscribers: [],
 | 
						|
        stream_weekly_traffic: 0,
 | 
						|
        color: "red",
 | 
						|
    };
 | 
						|
    const cpp = {
 | 
						|
        elem: "cpp",
 | 
						|
        subscribed: true,
 | 
						|
        name: "C++",
 | 
						|
        stream_id: 104,
 | 
						|
        description: "programming lang",
 | 
						|
        subscribers: [1, 2],
 | 
						|
        stream_weekly_traffic: 6,
 | 
						|
        color: "red",
 | 
						|
    };
 | 
						|
    const zzyzx = {
 | 
						|
        elem: "zzyzx",
 | 
						|
        subscribed: true,
 | 
						|
        name: "Zzyzx",
 | 
						|
        stream_id: 105,
 | 
						|
        description: "california town",
 | 
						|
        subscribers: [1, 2],
 | 
						|
        stream_weekly_traffic: 6,
 | 
						|
        color: "red",
 | 
						|
    };
 | 
						|
 | 
						|
    const sub_row_data = [denmark, poland, pomona, cpp, zzyzx];
 | 
						|
 | 
						|
    for (const sub of sub_row_data) {
 | 
						|
        stream_data.create_sub_from_server_data(sub);
 | 
						|
    }
 | 
						|
 | 
						|
    let populated_subs;
 | 
						|
 | 
						|
    stub_templates((fn, data) => {
 | 
						|
        assert.equal(fn, "subscriptions");
 | 
						|
        populated_subs = data.subscriptions;
 | 
						|
    });
 | 
						|
 | 
						|
    subs.render_left_panel_superset();
 | 
						|
 | 
						|
    const sub_stubs = [];
 | 
						|
 | 
						|
    for (const data of populated_subs) {
 | 
						|
        const sub_row = `.stream-row-${CSS.escape(data.elem)}`;
 | 
						|
        sub_stubs.push(sub_row);
 | 
						|
 | 
						|
        $(sub_row).attr("data-stream-id", data.stream_id);
 | 
						|
        $(sub_row).detach = () => sub_row;
 | 
						|
    }
 | 
						|
 | 
						|
    $.create("#subscriptions_table .stream-row", {children: sub_stubs});
 | 
						|
 | 
						|
    let ui_called = false;
 | 
						|
    ui.reset_scrollbar = (elem) => {
 | 
						|
        ui_called = true;
 | 
						|
        assert.equal(elem, $("#subscription_overlay .streams-list"));
 | 
						|
    };
 | 
						|
 | 
						|
    // Filtering has the side effect of setting the "active" class
 | 
						|
    // on our current stream, even if it doesn't match the filter.
 | 
						|
    const denmark_row = $(`.stream-row[data-stream-id='${CSS.escape(denmark_stream_id)}']`);
 | 
						|
    // sanity check it's not set to active
 | 
						|
    assert(!denmark_row.hasClass("active"));
 | 
						|
 | 
						|
    function test_filter(params, expected_streams) {
 | 
						|
        const stream_ids = subs.redraw_left_panel(params);
 | 
						|
        assert.deepEqual(
 | 
						|
            stream_ids,
 | 
						|
            expected_streams.map((sub) => sub.stream_id),
 | 
						|
        );
 | 
						|
    }
 | 
						|
 | 
						|
    // Search with single keyword
 | 
						|
    test_filter({input: "Po", subscribed_only: false}, [poland, pomona]);
 | 
						|
    assert(ui_called);
 | 
						|
 | 
						|
    // The denmark row is active, even though it's not displayed.
 | 
						|
    assert(denmark_row.hasClass("active"));
 | 
						|
 | 
						|
    // Search with multiple keywords
 | 
						|
    test_filter({input: "Denmark, Pol", subscribed_only: false}, [denmark, poland]);
 | 
						|
    test_filter({input: "Den, Pol", subscribed_only: false}, [denmark, poland]);
 | 
						|
 | 
						|
    // Search is case-insensitive
 | 
						|
    test_filter({input: "po", subscribed_only: false}, [poland, pomona]);
 | 
						|
 | 
						|
    // Search handles unusual characters like C++
 | 
						|
    test_filter({input: "c++", subscribed_only: false}, [cpp]);
 | 
						|
 | 
						|
    // Search subscribed streams only
 | 
						|
    test_filter({input: "d", subscribed_only: true}, [poland]);
 | 
						|
 | 
						|
    // Search terms match stream description
 | 
						|
    test_filter({input: "Co", subscribed_only: false}, [denmark, pomona]);
 | 
						|
 | 
						|
    // Search names AND descriptions
 | 
						|
    test_filter({input: "Mon", subscribed_only: false}, [pomona, poland]);
 | 
						|
 | 
						|
    // Explicitly order streams by name
 | 
						|
    test_filter({input: "", subscribed_only: false, sort_order: "by-stream-name"}, [
 | 
						|
        cpp,
 | 
						|
        denmark,
 | 
						|
        poland,
 | 
						|
        pomona,
 | 
						|
        zzyzx,
 | 
						|
    ]);
 | 
						|
 | 
						|
    // Order streams by subscriber count
 | 
						|
    test_filter({input: "", subscribed_only: false, sort_order: "by-subscriber-count"}, [
 | 
						|
        poland,
 | 
						|
        cpp,
 | 
						|
        zzyzx,
 | 
						|
        denmark,
 | 
						|
        pomona,
 | 
						|
    ]);
 | 
						|
 | 
						|
    // Order streams by weekly traffic
 | 
						|
    test_filter({input: "", subscribed_only: false, sort_order: "by-weekly-traffic"}, [
 | 
						|
        poland,
 | 
						|
        cpp,
 | 
						|
        zzyzx,
 | 
						|
        pomona,
 | 
						|
        denmark,
 | 
						|
    ]);
 | 
						|
 | 
						|
    // Sort for subscribed only.
 | 
						|
    test_filter({input: "", subscribed_only: true, sort_order: "by-subscriber-count"}, [
 | 
						|
        poland,
 | 
						|
        cpp,
 | 
						|
        zzyzx,
 | 
						|
        pomona,
 | 
						|
    ]);
 | 
						|
 | 
						|
    // active stream-row is not included in results
 | 
						|
    $(".stream-row-denmark").addClass("active");
 | 
						|
    $(".stream-row.active").hasClass = (cls) => {
 | 
						|
        assert.equal(cls, "notdisplayed");
 | 
						|
        return $(".stream-row-denmark").hasClass("active");
 | 
						|
    };
 | 
						|
    $(".stream-row.active").removeClass = (cls) => {
 | 
						|
        assert.equal(cls, "active");
 | 
						|
        $(".stream-row-denmark").removeClass("active");
 | 
						|
    };
 | 
						|
 | 
						|
    test_filter({input: "d", subscribed_only: true}, [poland]);
 | 
						|
    assert(!$(".stream-row-denmark").hasClass("active"));
 | 
						|
    assert(!$(".right .settings").visible());
 | 
						|
    assert($(".nothing-selected").visible());
 | 
						|
});
 |