zulip/frontend_tests/node_tests/echo.js

268 lines
7.5 KiB
JavaScript

"use strict";
const {strict: assert} = require("assert");
const MockDate = require("mockdate");
const rewiremock = require("rewiremock/node");
const {set_global, zrequire} = require("../zjsunit/namespace");
const {run_test} = require("../zjsunit/test");
const local_message = {__esModule: true};
rewiremock("../../static/js/local_message").with(local_message);
const markdown = {__esModule: true};
rewiremock("../../static/js/markdown").with(markdown);
const page_params = set_global("page_params", {});
const fake_now = 555;
MockDate.set(new Date(fake_now * 1000));
let disparities = [];
let messages_to_rerender = [];
set_global("ui", {
show_failed_message_success: () => {},
});
set_global("sent_messages", {
mark_disparity: (local_id) => {
disparities.push(local_id);
},
});
set_global("message_store", {
get: () => ({failed_request: true}),
update_booleans: () => {},
});
set_global("home_msg_list", {
view: {
rerender_messages: (msgs) => {
messages_to_rerender = msgs;
},
},
});
set_global("message_list", {});
set_global("current_msg_list", "");
rewiremock.enable();
const echo = zrequire("echo");
const people = zrequire("people");
run_test("process_from_server for un-echoed messages", () => {
const waiting_for_ack = new Map();
const server_messages = [
{
local_id: "100.1",
},
];
echo._patch_waiting_for_ack(waiting_for_ack);
const non_echo_messages = echo.process_from_server(server_messages);
assert.deepEqual(non_echo_messages, server_messages);
});
run_test("process_from_server for differently rendered messages", () => {
// Test that we update all the booleans and the content of the message
// in local echo.
const old_value = "old_value";
const new_value = "new_value";
const waiting_for_ack = new Map([
[
"100.1",
{
content: "<p>A client rendered message</p>",
timestamp: old_value,
is_me_message: old_value,
submessages: old_value,
topic_links: old_value,
},
],
]);
const server_messages = [
{
local_id: "100.1",
content: "<p>A server rendered message</p>",
timestamp: new_value,
is_me_message: new_value,
submessages: new_value,
topic_links: new_value,
},
];
echo._patch_waiting_for_ack(waiting_for_ack);
messages_to_rerender = [];
disparities = [];
const non_echo_messages = echo.process_from_server(server_messages);
assert.deepEqual(non_echo_messages, []);
assert.equal(disparities.length, 1);
assert.deepEqual(messages_to_rerender, [
{
content: server_messages[0].content,
timestamp: new_value,
is_me_message: new_value,
submessages: new_value,
topic_links: new_value,
},
]);
});
run_test("build_display_recipient", () => {
page_params.user_id = 123;
const params = {};
params.realm_users = [
{
user_id: 123,
full_name: "Iago",
email: "iago@zulip.com",
},
{
email: "cordelia@zulip.com",
full_name: "Cordelia",
user_id: 21,
},
];
params.realm_non_active_users = [];
params.cross_realm_bots = [];
people.initialize(page_params.user_id, params);
let message = {
type: "stream",
stream: "general",
sender_email: "iago@zulip.com",
sender_full_name: "Iago",
sender_id: 123,
};
let display_recipient = echo.build_display_recipient(message);
assert.equal(display_recipient, "general");
message = {
type: "private",
private_message_recipient: "cordelia@zulip.com,hamlet@zulip.com",
sender_email: "iago@zulip.com",
sender_full_name: "Iago",
sender_id: 123,
};
display_recipient = echo.build_display_recipient(message);
assert.equal(display_recipient.length, 3);
let iago = display_recipient.find((recipient) => recipient.email === "iago@zulip.com");
assert.equal(iago.full_name, "Iago");
assert.equal(iago.id, 123);
const cordelia = display_recipient.find(
(recipient) => recipient.email === "cordelia@zulip.com",
);
assert.equal(cordelia.full_name, "Cordelia");
assert.equal(cordelia.id, 21);
const hamlet = display_recipient.find((recipient) => recipient.email === "hamlet@zulip.com");
assert.equal(hamlet.full_name, "hamlet@zulip.com");
assert.equal(hamlet.id, undefined);
assert.equal(hamlet.unknown_local_echo_user, true);
message = {
type: "private",
private_message_recipient: "iago@zulip.com",
sender_email: "iago@zulip.com",
sender_full_name: "Iago",
sender_id: 123,
};
display_recipient = echo.build_display_recipient(message);
assert.equal(display_recipient.length, 1);
iago = display_recipient.find((recipient) => recipient.email === "iago@zulip.com");
assert.equal(iago.full_name, "Iago");
assert.equal(iago.id, 123);
});
run_test("insert_local_message streams", (override) => {
const local_id_float = 101;
let apply_markdown_called = false;
let add_topic_links_called = false;
let insert_message_called = false;
override(markdown, "apply_markdown", () => {
apply_markdown_called = true;
});
override(markdown, "add_topic_links", () => {
add_topic_links_called = true;
});
override(local_message, "insert_message", (message) => {
assert.equal(message.display_recipient, "general");
assert.equal(message.timestamp, fake_now);
assert.equal(message.sender_email, "iago@zulip.com");
assert.equal(message.sender_full_name, "Iago");
assert.equal(message.sender_id, 123);
insert_message_called = true;
});
const message_request = {
type: "stream",
stream: "general",
sender_email: "iago@zulip.com",
sender_full_name: "Iago",
sender_id: 123,
};
echo.insert_local_message(message_request, local_id_float);
assert(apply_markdown_called);
assert(add_topic_links_called);
assert(insert_message_called);
});
run_test("insert_local_message PM", (override) => {
const local_id_float = 102;
page_params.user_id = 123;
const params = {};
params.realm_users = [
{
user_id: 123,
full_name: "Iago",
email: "iago@zulip.com",
},
];
params.realm_non_active_users = [];
params.cross_realm_bots = [];
people.initialize(page_params.user_id, params);
let add_topic_links_called = false;
let apply_markdown_called = false;
let insert_message_called = false;
override(local_message, "insert_message", (message) => {
assert.equal(message.display_recipient.length, 3);
insert_message_called = true;
});
override(markdown, "apply_markdown", () => {
apply_markdown_called = true;
});
override(markdown, "add_topic_links", () => {
add_topic_links_called = true;
});
const message_request = {
private_message_recipient: "cordelia@zulip.com,hamlet@zulip.com",
type: "private",
sender_email: "iago@zulip.com",
sender_full_name: "Iago",
sender_id: 123,
};
echo.insert_local_message(message_request, local_id_float);
assert(add_topic_links_called);
assert(apply_markdown_called);
assert(insert_message_called);
});
MockDate.reset();
rewiremock.disable();