mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			177 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			177 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
set_global('$', global.make_zjquery());
 | 
						|
set_global('voting_widget', {});
 | 
						|
set_global('tictactoe_widget', {});
 | 
						|
set_global('todo_widget', {});
 | 
						|
set_global('zform', {});
 | 
						|
set_global('document', 'document-stub');
 | 
						|
 | 
						|
const noop = () => {};
 | 
						|
const return_true = () => true;
 | 
						|
const return_false = () => false;
 | 
						|
 | 
						|
$(document).on = noop;
 | 
						|
 | 
						|
zrequire('widgetize');
 | 
						|
 | 
						|
set_global('blueslip', global.make_zblueslip());
 | 
						|
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: {
 | 
						|
                comment: "First option",
 | 
						|
                idx: 1,
 | 
						|
                type: "new_comment",
 | 
						|
            },
 | 
						|
            sender_id: 101,
 | 
						|
        },
 | 
						|
        {
 | 
						|
            data: {
 | 
						|
                comment: "Second option",
 | 
						|
                idx: 1,
 | 
						|
                type: "new_comment",
 | 
						|
            },
 | 
						|
            sender_id: 102,
 | 
						|
        },
 | 
						|
        {
 | 
						|
            data: {
 | 
						|
                comment: "Third option",
 | 
						|
                idx: 1,
 | 
						|
                type: "new_comment",
 | 
						|
            },
 | 
						|
            sender_id: 102,
 | 
						|
        },
 | 
						|
    ];
 | 
						|
 | 
						|
    const opts = {
 | 
						|
        events: _.clone(events),
 | 
						|
        extra_data: '',
 | 
						|
        message: {
 | 
						|
            id: 2001,
 | 
						|
        },
 | 
						|
        post_to_server: (data) => {
 | 
						|
            assert.equal(data.msg_type, 'widget');
 | 
						|
            assert.equal(data.data, 'test_data');
 | 
						|
        },
 | 
						|
        row: 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;
 | 
						|
 | 
						|
    voting_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.equal(widgetize.widget_contents[opts.message.id], undefined);
 | 
						|
 | 
						|
    widgetize.activate(opts);
 | 
						|
 | 
						|
    assert(is_widget_elem_inserted);
 | 
						|
    assert(is_widget_activated);
 | 
						|
    assert(is_event_handled);
 | 
						|
    assert.equal(widgetize.widget_contents[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.set_test_data('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').length, 1);
 | 
						|
    assert.equal(blueslip.get_test_logs('warn')[0].more_info, 'invalid_widget');
 | 
						|
    blueslip.clear_test_data();
 | 
						|
 | 
						|
    /* Testing widgetize.handle_events */
 | 
						|
    const post_activate_event = {
 | 
						|
        data: {
 | 
						|
            idx: 1,
 | 
						|
            type: "new_comment",
 | 
						|
        },
 | 
						|
        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();
 | 
						|
});
 |