Files
zulip/web/tests/server_events.test.cjs
Sayam Samal 3275fcc96e popup_banners: Redesign connection banner to use new banner component.
This commit serves as the base commit for redesigning the alert banners
by migrating them to use the new banner component. We use a new name
to refer to these banners — "Popup banners", which is more descriptive
about their behavior.

The Popup banners are appended to the container in a stacking order,
i.e., the most recent popup banner appears on the top and the oldest one
is sent to the bottom of the stack. These banners also inherit the
animations from the alert banners for visual appeal.

This commit also fixes the bug where clicking on the "Try now" button
in the popup banner resulting from an error in the `/json/messages`
endpoint resulted in call to restart_get_events in server_events.js
instead of load_messages in message_fetch.ts.

Fixes #31282.
2025-03-10 11:21:11 -07:00

163 lines
3.9 KiB
JavaScript

"use strict";
const assert = require("node:assert/strict");
const {mock_esm, set_global, zrequire} = require("./lib/namespace.cjs");
const {run_test, noop} = require("./lib/test.cjs");
const blueslip = require("./lib/zblueslip.cjs");
const {page_params} = require("./lib/zpage_params.cjs");
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/popup_banners", {
close_connection_error_popup_banner() {},
});
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);
});