mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			234 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			234 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
const util = zrequire("util");
 | 
						|
set_global("$", global.make_zjquery());
 | 
						|
 | 
						|
zrequire("narrow_state");
 | 
						|
set_global("resize", {
 | 
						|
    resize_stream_filters_container: () => {},
 | 
						|
});
 | 
						|
zrequire("stream_data");
 | 
						|
zrequire("Filter", "js/filter");
 | 
						|
zrequire("FetchStatus", "js/fetch_status");
 | 
						|
zrequire("MessageListData", "js/message_list_data");
 | 
						|
zrequire("unread");
 | 
						|
zrequire("narrow");
 | 
						|
zrequire("search_pill");
 | 
						|
 | 
						|
set_global("channel", {});
 | 
						|
set_global("compose", {});
 | 
						|
set_global("compose_actions", {});
 | 
						|
set_global("current_msg_list", {});
 | 
						|
set_global("hashchange", {});
 | 
						|
set_global("home_msg_list", {});
 | 
						|
set_global("message_fetch", {});
 | 
						|
set_global("message_list", {
 | 
						|
    set_narrowed(value) {
 | 
						|
        this.narrowed = value;
 | 
						|
    },
 | 
						|
});
 | 
						|
set_global("message_scroll", {});
 | 
						|
set_global("message_util", {});
 | 
						|
set_global("notifications", {});
 | 
						|
set_global("page_params", {});
 | 
						|
set_global("search", {});
 | 
						|
set_global("stream_list", {});
 | 
						|
set_global("tab_bar", {});
 | 
						|
set_global("top_left_corner", {});
 | 
						|
set_global("typing_events", {});
 | 
						|
set_global("ui_util", {});
 | 
						|
set_global("unread_ops", {});
 | 
						|
set_global("search_pill_widget", {
 | 
						|
    widget: {
 | 
						|
        clear() {
 | 
						|
            return true;
 | 
						|
        },
 | 
						|
        appendValue() {
 | 
						|
            return true;
 | 
						|
        },
 | 
						|
    },
 | 
						|
});
 | 
						|
 | 
						|
//
 | 
						|
// We have strange hacks in narrow.activate to sleep 0
 | 
						|
// seconds.
 | 
						|
global.patch_builtin("setTimeout", (f, t) => {
 | 
						|
    assert.equal(t, 0);
 | 
						|
    f();
 | 
						|
});
 | 
						|
 | 
						|
set_global("muting", {
 | 
						|
    is_topic_muted: () => false,
 | 
						|
});
 | 
						|
 | 
						|
const denmark = {
 | 
						|
    subscribed: false,
 | 
						|
    color: "blue",
 | 
						|
    name: "Denmark",
 | 
						|
    stream_id: 1,
 | 
						|
    is_muted: true,
 | 
						|
};
 | 
						|
stream_data.add_sub(denmark);
 | 
						|
 | 
						|
function test_helper() {
 | 
						|
    let events = [];
 | 
						|
 | 
						|
    function stub(module_name, func_name) {
 | 
						|
        global[module_name][func_name] = () => {
 | 
						|
            events.push(module_name + "." + func_name);
 | 
						|
        };
 | 
						|
    }
 | 
						|
 | 
						|
    stub("compose_actions", "on_narrow");
 | 
						|
    stub("hashchange", "save_narrow");
 | 
						|
    stub("message_scroll", "hide_indicators");
 | 
						|
    stub("message_scroll", "show_loading_older");
 | 
						|
    stub("message_scroll", "hide_top_of_narrow_notices");
 | 
						|
    stub("notifications", "clear_compose_notifications");
 | 
						|
    stub("notifications", "redraw_title");
 | 
						|
    stub("search", "update_button_visibility");
 | 
						|
    stub("stream_list", "handle_narrow_activated");
 | 
						|
    stub("tab_bar", "initialize");
 | 
						|
    stub("top_left_corner", "handle_narrow_activated");
 | 
						|
    stub("typing_events", "render_notifications_for_narrow");
 | 
						|
    stub("ui_util", "change_tab_to");
 | 
						|
    stub("unread_ops", "process_visible");
 | 
						|
    stub("compose", "update_closed_compose_buttons_for_stream");
 | 
						|
    stub("compose", "update_closed_compose_buttons_for_private");
 | 
						|
 | 
						|
    return {
 | 
						|
        clear: () => {
 | 
						|
            events = [];
 | 
						|
        },
 | 
						|
        push_event: (event) => {
 | 
						|
            events.push(event);
 | 
						|
        },
 | 
						|
        assert_events: (expected_events) => {
 | 
						|
            assert.deepEqual(expected_events, events);
 | 
						|
        },
 | 
						|
    };
 | 
						|
}
 | 
						|
 | 
						|
function stub_message_list() {
 | 
						|
    message_list.MessageList = function (opts) {
 | 
						|
        const list = this;
 | 
						|
        this.data = opts.data;
 | 
						|
        this.view = {
 | 
						|
            set_message_offset(offset) {
 | 
						|
                list.view.offset = offset;
 | 
						|
            },
 | 
						|
        };
 | 
						|
 | 
						|
        return this;
 | 
						|
    };
 | 
						|
 | 
						|
    message_list.MessageList.prototype = {
 | 
						|
        get(msg_id) {
 | 
						|
            return this.data.get(msg_id);
 | 
						|
        },
 | 
						|
 | 
						|
        empty() {
 | 
						|
            return this.data.empty();
 | 
						|
        },
 | 
						|
 | 
						|
        select_id(msg_id) {
 | 
						|
            this.selected_id = msg_id;
 | 
						|
        },
 | 
						|
    };
 | 
						|
}
 | 
						|
 | 
						|
run_test("basics", () => {
 | 
						|
    stub_message_list();
 | 
						|
 | 
						|
    const helper = test_helper();
 | 
						|
    const terms = [{operator: "stream", operand: "Denmark"}];
 | 
						|
 | 
						|
    const selected_id = 1000;
 | 
						|
 | 
						|
    const selected_message = {
 | 
						|
        id: selected_id,
 | 
						|
        type: "stream",
 | 
						|
        stream_id: denmark.stream_id,
 | 
						|
        topic: "whatever",
 | 
						|
    };
 | 
						|
 | 
						|
    const messages = [selected_message];
 | 
						|
 | 
						|
    const row = {
 | 
						|
        length: 1,
 | 
						|
        offset: () => ({top: 25}),
 | 
						|
    };
 | 
						|
 | 
						|
    current_msg_list.selected_id = () => -1;
 | 
						|
    current_msg_list.get_row = () => row;
 | 
						|
 | 
						|
    message_list.all = {
 | 
						|
        all_messages: () => messages,
 | 
						|
        get: (msg_id) => {
 | 
						|
            assert.equal(msg_id, selected_id);
 | 
						|
            return selected_message;
 | 
						|
        },
 | 
						|
        data: {
 | 
						|
            fetch_status: {
 | 
						|
                has_found_newest: () => true,
 | 
						|
            },
 | 
						|
        },
 | 
						|
        empty: () => false,
 | 
						|
        first: () => ({id: 900}),
 | 
						|
        last: () => ({id: 1100}),
 | 
						|
    };
 | 
						|
 | 
						|
    let cont;
 | 
						|
 | 
						|
    message_fetch.load_messages_for_narrow = (opts) => {
 | 
						|
        cont = opts.cont;
 | 
						|
 | 
						|
        assert.deepEqual(opts, {
 | 
						|
            cont: opts.cont,
 | 
						|
            anchor: 1000,
 | 
						|
        });
 | 
						|
    };
 | 
						|
 | 
						|
    narrow.activate(terms, {
 | 
						|
        then_select_id: selected_id,
 | 
						|
    });
 | 
						|
 | 
						|
    assert.equal(message_list.narrowed.selected_id, selected_id);
 | 
						|
    assert.equal(message_list.narrowed.view.offset, 25);
 | 
						|
    assert.equal(narrow_state.narrowed_to_pms(), false);
 | 
						|
 | 
						|
    helper.assert_events([
 | 
						|
        "notifications.clear_compose_notifications",
 | 
						|
        "notifications.redraw_title",
 | 
						|
        "message_scroll.hide_top_of_narrow_notices",
 | 
						|
        "message_scroll.hide_indicators",
 | 
						|
        "ui_util.change_tab_to",
 | 
						|
        "unread_ops.process_visible",
 | 
						|
        "hashchange.save_narrow",
 | 
						|
        "compose.update_closed_compose_buttons_for_stream",
 | 
						|
        "search.update_button_visibility",
 | 
						|
        "compose_actions.on_narrow",
 | 
						|
        "top_left_corner.handle_narrow_activated",
 | 
						|
        "stream_list.handle_narrow_activated",
 | 
						|
        "typing_events.render_notifications_for_narrow",
 | 
						|
        "tab_bar.initialize",
 | 
						|
    ]);
 | 
						|
 | 
						|
    current_msg_list.selected_id = () => -1;
 | 
						|
    current_msg_list.get_row = () => row;
 | 
						|
    util.sorted_ids = () => [];
 | 
						|
 | 
						|
    narrow.activate([{operator: "is", operand: "private"}], {
 | 
						|
        then_select_id: selected_id,
 | 
						|
    });
 | 
						|
 | 
						|
    assert.equal(narrow_state.narrowed_to_pms(), true);
 | 
						|
 | 
						|
    channel.post = (opts) => {
 | 
						|
        assert.equal(opts.url, "/json/report/narrow_times");
 | 
						|
        helper.push_event("report narrow times");
 | 
						|
    };
 | 
						|
 | 
						|
    helper.clear();
 | 
						|
    cont();
 | 
						|
    helper.assert_events(["report narrow times"]);
 | 
						|
});
 |