mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 14:03:30 +00:00 
			
		
		
		
	ES and TypeScript modules are strict by default and don’t need this directive. ESLint will remind us to add it to new CommonJS files and remove it from ES and TypeScript modules. Signed-off-by: Anders Kaseorg <anders@zulip.com>
		
			
				
	
	
		
			172 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			172 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
"use strict";
 | 
						|
 | 
						|
set_global("$", global.make_zjquery());
 | 
						|
set_global("poll_widget", {});
 | 
						|
set_global("tictactoe_widget", {});
 | 
						|
set_global("todo_widget", {});
 | 
						|
set_global("zform", {});
 | 
						|
set_global("document", "document-stub");
 | 
						|
 | 
						|
const return_true = () => true;
 | 
						|
const return_false = () => false;
 | 
						|
 | 
						|
zrequire("widgetize");
 | 
						|
 | 
						|
set_global("narrow_state", {});
 | 
						|
set_global("current_msg_list", {});
 | 
						|
 | 
						|
run_test("activate", () => {
 | 
						|
    // Both widgetize.activate and widgetize.handle_event are tested
 | 
						|
    // here to use the "caching" of widgets
 | 
						|
    const row = $.create("<stub message row>");
 | 
						|
    row.attr("id", "zhome2909");
 | 
						|
    const message_content = $.create("#zhome2909");
 | 
						|
    row.set_find_results(".message_content", message_content);
 | 
						|
 | 
						|
    const events = [
 | 
						|
        {
 | 
						|
            data: {
 | 
						|
                option: "First option",
 | 
						|
                idx: 1,
 | 
						|
                type: "new_option",
 | 
						|
            },
 | 
						|
            sender_id: 101,
 | 
						|
        },
 | 
						|
        {
 | 
						|
            data: {
 | 
						|
                option: "Second option",
 | 
						|
                idx: 1,
 | 
						|
                type: "new_option",
 | 
						|
            },
 | 
						|
            sender_id: 102,
 | 
						|
        },
 | 
						|
        {
 | 
						|
            data: {
 | 
						|
                option: "Third option",
 | 
						|
                idx: 1,
 | 
						|
                type: "new_option",
 | 
						|
            },
 | 
						|
            sender_id: 102,
 | 
						|
        },
 | 
						|
    ];
 | 
						|
 | 
						|
    const opts = {
 | 
						|
        events: events.slice(),
 | 
						|
        extra_data: "",
 | 
						|
        message: {
 | 
						|
            id: 2001,
 | 
						|
        },
 | 
						|
        post_to_server: (data) => {
 | 
						|
            assert.equal(data.msg_type, "widget");
 | 
						|
            assert.equal(data.data, "test_data");
 | 
						|
        },
 | 
						|
        row,
 | 
						|
        widget_type: "poll",
 | 
						|
    };
 | 
						|
 | 
						|
    narrow_state.active = return_false;
 | 
						|
 | 
						|
    let widget_elem;
 | 
						|
    let is_event_handled;
 | 
						|
    let is_widget_activated;
 | 
						|
    let is_widget_elem_inserted;
 | 
						|
 | 
						|
    poll_widget.activate = (data) => {
 | 
						|
        is_widget_activated = true;
 | 
						|
        widget_elem = data.elem;
 | 
						|
        assert(widget_elem.hasClass("widget-content"));
 | 
						|
        widget_elem.handle_events = (e) => {
 | 
						|
            is_event_handled = true;
 | 
						|
            assert.notDeepStrictEqual(e, events);
 | 
						|
            events.shift();
 | 
						|
            assert.deepStrictEqual(e, events);
 | 
						|
        };
 | 
						|
        data.callback("test_data");
 | 
						|
    };
 | 
						|
 | 
						|
    message_content.append = (elem) => {
 | 
						|
        is_widget_elem_inserted = true;
 | 
						|
        assert.equal(elem, widget_elem);
 | 
						|
        assert(elem.hasClass("widget-content"));
 | 
						|
    };
 | 
						|
 | 
						|
    is_widget_elem_inserted = false;
 | 
						|
    is_widget_activated = false;
 | 
						|
    is_event_handled = false;
 | 
						|
    assert(!widgetize.widget_contents.has(opts.message.id));
 | 
						|
 | 
						|
    widgetize.activate(opts);
 | 
						|
 | 
						|
    assert(is_widget_elem_inserted);
 | 
						|
    assert(is_widget_activated);
 | 
						|
    assert(is_event_handled);
 | 
						|
    assert.equal(widgetize.widget_contents.get(opts.message.id), widget_elem);
 | 
						|
 | 
						|
    is_widget_elem_inserted = false;
 | 
						|
    is_widget_activated = false;
 | 
						|
    is_event_handled = false;
 | 
						|
 | 
						|
    widgetize.activate(opts);
 | 
						|
 | 
						|
    assert(is_widget_elem_inserted);
 | 
						|
    assert(!is_widget_activated);
 | 
						|
    assert(!is_event_handled);
 | 
						|
 | 
						|
    narrow_state.active = return_true;
 | 
						|
    is_widget_elem_inserted = false;
 | 
						|
    is_widget_activated = false;
 | 
						|
    is_event_handled = false;
 | 
						|
 | 
						|
    widgetize.activate(opts);
 | 
						|
 | 
						|
    assert(!is_widget_elem_inserted);
 | 
						|
    assert(!is_widget_activated);
 | 
						|
    assert(!is_event_handled);
 | 
						|
 | 
						|
    blueslip.expect("warn", "unknown widget_type");
 | 
						|
    narrow_state.active = return_false;
 | 
						|
    is_widget_elem_inserted = false;
 | 
						|
    is_widget_activated = false;
 | 
						|
    is_event_handled = false;
 | 
						|
    opts.widget_type = "invalid_widget";
 | 
						|
 | 
						|
    widgetize.activate(opts);
 | 
						|
    assert(!is_widget_elem_inserted);
 | 
						|
    assert(!is_widget_activated);
 | 
						|
    assert(!is_event_handled);
 | 
						|
    assert.equal(blueslip.get_test_logs("warn")[0].more_info, "invalid_widget");
 | 
						|
 | 
						|
    /* Testing widgetize.handle_events */
 | 
						|
    const post_activate_event = {
 | 
						|
        data: {
 | 
						|
            idx: 1,
 | 
						|
            type: "new_option",
 | 
						|
        },
 | 
						|
        message_id: 2001,
 | 
						|
        sender_id: 102,
 | 
						|
    };
 | 
						|
    widget_elem.handle_events = (e) => {
 | 
						|
        is_event_handled = true;
 | 
						|
        assert.deepEqual(e, [post_activate_event]);
 | 
						|
    };
 | 
						|
    is_event_handled = false;
 | 
						|
    widgetize.handle_event(post_activate_event);
 | 
						|
    assert(is_event_handled);
 | 
						|
 | 
						|
    is_event_handled = false;
 | 
						|
    post_activate_event.message_id = 1000;
 | 
						|
    widgetize.handle_event(post_activate_event);
 | 
						|
    assert(!is_event_handled);
 | 
						|
 | 
						|
    /* Test narrow change message update */
 | 
						|
    current_msg_list.get = (idx) => {
 | 
						|
        assert.equal(idx, 2001);
 | 
						|
        return {};
 | 
						|
    };
 | 
						|
    current_msg_list.get_row = (idx) => {
 | 
						|
        assert.equal(idx, 2001);
 | 
						|
        return row;
 | 
						|
    };
 | 
						|
    widgetize.set_widgets_for_list();
 | 
						|
});
 |