Files
zulip/frontend_tests/node_tests/server_events.js
Steve Howell 42435db492 Add run_test helper for individual tests.
This run_test helper sets up a convention that allows
us to give really short tracebacks for errors, and
eventually we can have more control over running
individual tests.  (The latter goal has some
complications, since we often intentionally leak
setup in tests.)
2018-05-15 08:24:44 -07:00

154 lines
3.9 KiB
JavaScript

var noop = function () {};
set_global('document', {});
set_global('window', {
addEventListener: noop,
});
global.stub_out_jquery();
zrequire('message_store');
zrequire('server_events_dispatch');
zrequire('server_events');
set_global('blueslip', {});
set_global('channel', {});
set_global('home_msg_list', {
select_id: noop,
selected_id: function () {return 1;},
});
set_global('page_params', {test_suite: false});
set_global('reload', {
is_in_progress: function () {return false;},
});
// we also directly write to pointer
set_global('pointer', {});
set_global('echo', {
process_from_server: function (messages) {
return messages;
},
set_realm_filters: noop,
});
set_global('ui_report', {
hide_error: function () { return false; },
show_error: function () { return false; },
});
server_events.home_view_loaded();
run_test('message_event', () => {
var event = {
type: 'message',
message: {
content: 'hello',
},
flags: [],
};
var inserted;
set_global('message_events', {
insert_new_messages: function (messages) {
assert.equal(messages[0].content, event.message.content);
inserted = true;
},
});
server_events._get_events_success([event]);
assert(inserted);
});
run_test('pointer_event', () => {
var event = {
type: 'pointer',
pointer: 999,
};
global.pointer.furthest_read = 0;
global.pointer.server_furthest_read = 0;
server_events._get_events_success([event]);
assert.equal(global.pointer.furthest_read, event.pointer);
assert.equal(global.pointer.server_furthest_read, event.pointer);
});
// Start blueslip tests here
var setup = function (results) {
server_events.home_view_loaded();
set_global('message_events', {
insert_new_messages: function () {
throw Error('insert error');
},
update_messages: function () {
throw Error('update error');
},
});
set_global('stream_events', {
update_property: function () {
throw Error('subs update error');
},
});
global.blueslip.error = function (msg, more_info, stack) {
results.msg = msg;
results.more_info = more_info;
results.stack = stack;
};
global.blueslip.exception_msg = function (ex) {
return ex.message;
};
};
run_test('event_dispatch_error', () => {
var results = {};
setup(results);
var data = {events: [{type: 'stream', op: 'update', id: 1, other: 'thing'}]};
global.channel.get = function (options) {
options.success(data);
};
server_events.restart_get_events();
assert.equal(results.msg, 'Failed to process an event\n' +
'subs update error');
assert.equal(results.more_info.event.type , 'stream');
assert.equal(results.more_info.event.op , 'update');
assert.equal(results.more_info.event.id , 1);
assert.equal(results.more_info.other , undefined);
});
run_test('event_new_message_error', () => {
var results = {};
setup(results);
var data = {events: [{type: 'message', id: 1, other: 'thing', message: {}}]};
global.channel.get = function (options) {
options.success(data);
};
server_events.restart_get_events();
assert.equal(results.msg, 'Failed to insert new messages\n' +
'insert error');
assert.equal(results.more_info, undefined);
});
run_test('event_edit_message_error', () => {
var results = {};
setup(results);
var data = {events: [{type: 'update_message', id: 1, other: 'thing'}]};
global.channel.get = function (options) {
options.success(data);
};
server_events.restart_get_events();
assert.equal(results.msg, 'Failed to update messages\n' +
'update error');
assert.equal(results.more_info, undefined);
});