mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-03 21:43:21 +00:00 
			
		
		
		
	We want to update message.submessages for new events, even though our couple of widgets (poll/tictactoe) that can process "update" events currently just apply events as "deltas" to their current data. This does fix a subtle issue where you may get incoming events for a message that the client knows about but which it hasn't yet activated as a widget. Up until now, we've rarely seen the bug that's fixed here, since it's usually the case that as soon as we receive a message, we widgetize it right away.
		
			
				
	
	
		
			95 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
zrequire('submessage');
 | 
						|
 | 
						|
set_global('channel', {});
 | 
						|
set_global('widgetize', {});
 | 
						|
set_global('message_store', {});
 | 
						|
 | 
						|
run_test('get_message_events', () => {
 | 
						|
    var msg = {};
 | 
						|
 | 
						|
    assert.equal(submessage.get_message_events(msg), undefined);
 | 
						|
 | 
						|
    msg = {
 | 
						|
        submessages: [],
 | 
						|
    };
 | 
						|
    assert.equal(submessage.get_message_events(msg), undefined);
 | 
						|
 | 
						|
    var submessages = [
 | 
						|
        {id: 222, sender_id: 99, content: '84'},
 | 
						|
        {id: 9, sender_id: 33, content: '42'},
 | 
						|
    ];
 | 
						|
 | 
						|
    msg = {
 | 
						|
        locally_echoed: true,
 | 
						|
        submessages: submessages,
 | 
						|
    };
 | 
						|
    assert.equal(submessage.get_message_events(msg), undefined);
 | 
						|
 | 
						|
    msg = {
 | 
						|
        submessages: submessages,
 | 
						|
    };
 | 
						|
    assert.deepEqual(submessage.get_message_events(msg), [
 | 
						|
        {sender_id: 33, data: 42},
 | 
						|
        {sender_id: 99, data: 84},
 | 
						|
    ]);
 | 
						|
});
 | 
						|
 | 
						|
run_test('make_server_callback', () => {
 | 
						|
    var message_id = 444;
 | 
						|
    var callback = submessage.make_server_callback(message_id);
 | 
						|
    var was_posted;
 | 
						|
 | 
						|
    channel.post = function (opts) {
 | 
						|
        was_posted = true;
 | 
						|
        assert.deepEqual(opts, {
 | 
						|
            url: '/json/submessage',
 | 
						|
            data: {
 | 
						|
                message_id: message_id,
 | 
						|
                msg_type: 'whatever',
 | 
						|
                content: '{"foo":32}',
 | 
						|
            },
 | 
						|
        });
 | 
						|
    };
 | 
						|
 | 
						|
    callback({
 | 
						|
        msg_type: 'whatever',
 | 
						|
        data: {foo: 32},
 | 
						|
    });
 | 
						|
 | 
						|
    assert(was_posted);
 | 
						|
});
 | 
						|
 | 
						|
run_test('handle_event', () => {
 | 
						|
    const message = {
 | 
						|
        id: 42,
 | 
						|
    };
 | 
						|
 | 
						|
    const event = {
 | 
						|
        id: 11,
 | 
						|
        msg_type: 'widget',
 | 
						|
        sender_id: 99,
 | 
						|
        message_id: message.id,
 | 
						|
        content: '"some_data"',
 | 
						|
    };
 | 
						|
 | 
						|
    var args;
 | 
						|
    widgetize.handle_event = (opts) => {
 | 
						|
        args = opts;
 | 
						|
    };
 | 
						|
 | 
						|
    message_store.get = (msg_id) => {
 | 
						|
        assert.equal(msg_id, message.id);
 | 
						|
        return message;
 | 
						|
    };
 | 
						|
 | 
						|
    submessage.handle_event(event);
 | 
						|
 | 
						|
    assert.deepEqual(args, {
 | 
						|
        sender_id: 99,
 | 
						|
        message_id: 42,
 | 
						|
        data: 'some_data',
 | 
						|
    });
 | 
						|
 | 
						|
    assert.deepEqual(message.submessages[0], event);
 | 
						|
});
 |