zulip/web/tests/server_events.test.js

165 lines
3.9 KiB
JavaScript

"use strict";
const assert = require("node:assert/strict");
const {mock_esm, set_global, zrequire} = require("./lib/namespace");
const {run_test, noop} = require("./lib/test");
const blueslip = require("./lib/zblueslip");
const {page_params} = require("./lib/zpage_params");
mock_esm("../src/loading", {
destroy_indicator: noop,
});
set_global("addEventListener", noop);
const channel = mock_esm("../src/channel");
mock_esm("../src/reload_state", {
is_in_progress() {
return false;
},
});
page_params.test_suite = false;
// we also directly write to pointer
set_global("pointer", {});
mock_esm("../src/ui_report", {
hide_error() {
return false;
},
});
mock_esm("../src/stream_events", {
update_property() {
throw new Error("subs update error");
},
});
mock_esm("../src/sent_messages", {
report_event_received() {},
messages: new Map(),
});
const message_events = mock_esm("../src/message_events", {
insert_new_messages() {
throw new Error("insert error");
},
update_messages() {
throw new Error("update error");
},
});
const server_events = zrequire("server_events");
const message = {
id: 1,
sender_id: 2,
content: "hello",
recipient_id: 3,
timestamp: 100000000,
client: "website",
subject: "server_test",
topic_links: [],
is_me_message: false,
reactions: [
{
emoji_name: "foo",
emoji_code: "bar",
reaction_type: "unicode_emoji",
user: {
email: "user1@foo.com",
id: 1,
full_name: "aaron",
},
user_id: 1,
},
],
submessages: [],
sender_full_name: "user1",
sender_email: "user2@foo.com",
sender_realm_str: "foo",
display_recipient: "test",
type: "stream",
stream_id: 1,
avatar_url: "bar",
content_type: "text/html",
};
server_events.finished_initial_fetch();
run_test("message_event", ({override}) => {
const event = {
type: "message",
message,
flags: [],
};
let inserted;
override(message_events, "insert_new_messages", (messages) => {
assert.equal(messages[0].content, event.message.content);
inserted = true;
return messages;
});
server_events._get_events_success([event]);
assert.ok(inserted);
});
// Start blueslip tests here
const setup = () => {
server_events.finished_initial_fetch();
};
run_test("event_dispatch_error", () => {
setup();
const data = {events: [{type: "stream", op: "update", id: 1, other: "thing"}]};
channel.get = (options) => {
options.success(data);
};
blueslip.expect("error", "Failed to process an event");
server_events.restart_get_events();
const logs = blueslip.get_test_logs("error");
assert.equal(logs.length, 1);
assert.equal(logs[0].more_info.event.type, "stream");
assert.equal(logs[0].more_info.event.op, "update");
assert.equal(logs[0].more_info.event.id, 1);
assert.equal(logs[0].more_info.other, undefined);
});
run_test("event_new_message_error", () => {
setup();
const data = {events: [{type: "message", id: 1, other: "thing", message}]};
channel.get = (options) => {
options.success(data);
};
blueslip.expect("error", "Failed to insert new messages");
server_events.restart_get_events();
const logs = blueslip.get_test_logs("error");
assert.equal(logs.length, 1);
assert.equal(logs[0].more_info, undefined);
});
run_test("event_edit_message_error", () => {
setup();
const data = {events: [{type: "update_message", id: 1, other: "thing"}]};
channel.get = (options) => {
options.success(data);
};
blueslip.expect("error", "Failed to update messages");
server_events.restart_get_events();
const logs = blueslip.get_test_logs("error");
assert.equal(logs.length, 1);
assert.equal(logs[0].more_info, undefined);
});