2020-08-01 03:43:15 +02:00
|
|
|
"use strict";
|
|
|
|
|
2024-10-09 00:25:41 +02:00
|
|
|
const assert = require("node:assert/strict");
|
2020-11-30 23:46:45 +01:00
|
|
|
|
2024-11-13 07:05:32 +01:00
|
|
|
const {mock_esm, zrequire} = require("./lib/namespace.cjs");
|
|
|
|
const {run_test, noop} = require("./lib/test.cjs");
|
|
|
|
const blueslip = require("./lib/zblueslip.cjs");
|
2020-12-01 00:02:16 +01:00
|
|
|
|
2023-02-22 23:04:10 +01:00
|
|
|
const channel = mock_esm("../src/channel");
|
|
|
|
const reload = mock_esm("../src/reload");
|
|
|
|
const reload_state = mock_esm("../src/reload_state");
|
|
|
|
const sent_messages = mock_esm("../src/sent_messages", {
|
2018-02-20 13:08:50 +01:00
|
|
|
start_tracking_message: noop,
|
2023-10-06 19:13:05 +02:00
|
|
|
get_message_state: () => ({
|
|
|
|
report_server_ack: noop,
|
2024-09-25 05:23:57 +02:00
|
|
|
report_error: noop,
|
2023-10-06 19:13:05 +02:00
|
|
|
saw_event: true,
|
|
|
|
}),
|
2024-09-25 05:23:57 +02:00
|
|
|
wrap_send(_local_id, callback) {
|
|
|
|
callback();
|
|
|
|
},
|
2021-03-07 13:57:14 +01:00
|
|
|
});
|
2024-02-12 23:36:07 +01:00
|
|
|
const server_events = mock_esm("../src/server_events");
|
2021-02-28 00:50:19 +01:00
|
|
|
|
2020-08-20 21:24:06 +02:00
|
|
|
const people = zrequire("people");
|
2021-02-10 04:53:22 +01:00
|
|
|
const transmit = zrequire("transmit");
|
2024-10-09 22:44:13 +02:00
|
|
|
const {set_current_user} = zrequire("state_data");
|
2023-07-26 22:07:21 +02:00
|
|
|
const stream_data = zrequire("stream_data");
|
2018-02-20 13:08:50 +01:00
|
|
|
|
2024-10-09 22:44:13 +02:00
|
|
|
const current_user = {};
|
|
|
|
set_current_user(current_user);
|
|
|
|
|
2020-07-15 01:29:15 +02:00
|
|
|
run_test("transmit_message_ajax", () => {
|
2019-11-02 00:06:25 +01:00
|
|
|
let success_func_called;
|
2021-02-23 14:37:26 +01:00
|
|
|
const success = () => {
|
2018-02-20 13:08:50 +01:00
|
|
|
success_func_called = true;
|
|
|
|
};
|
|
|
|
|
2020-07-15 01:29:15 +02:00
|
|
|
const request = {foo: "bar"};
|
2018-02-20 13:08:50 +01:00
|
|
|
|
2021-02-23 14:37:26 +01:00
|
|
|
channel.post = (opts) => {
|
2020-07-15 01:29:15 +02:00
|
|
|
assert.equal(opts.url, "/json/messages");
|
|
|
|
assert.equal(opts.data.foo, "bar");
|
2018-02-20 13:08:50 +01:00
|
|
|
opts.success();
|
|
|
|
};
|
|
|
|
|
|
|
|
transmit.send_message(request, success);
|
|
|
|
|
2021-06-10 08:32:54 +02:00
|
|
|
assert.ok(success_func_called);
|
2018-02-20 13:08:50 +01:00
|
|
|
|
2021-02-23 14:37:26 +01:00
|
|
|
channel.xhr_error_message = (msg) => {
|
2020-07-15 01:29:15 +02:00
|
|
|
assert.equal(msg, "Error sending message");
|
2018-02-20 13:08:50 +01:00
|
|
|
return msg;
|
|
|
|
};
|
|
|
|
|
2021-02-23 14:37:26 +01:00
|
|
|
channel.post = (opts) => {
|
2020-07-15 01:29:15 +02:00
|
|
|
assert.equal(opts.url, "/json/messages");
|
|
|
|
assert.equal(opts.data.foo, "bar");
|
|
|
|
const xhr = "whatever";
|
|
|
|
opts.error(xhr, "timeout");
|
2018-02-20 13:08:50 +01:00
|
|
|
};
|
|
|
|
|
2019-11-02 00:06:25 +01:00
|
|
|
let error_func_called;
|
2021-02-23 14:37:26 +01:00
|
|
|
const error = (response) => {
|
2020-07-15 01:29:15 +02:00
|
|
|
assert.equal(response, "Error sending message");
|
2018-02-20 13:08:50 +01:00
|
|
|
error_func_called = true;
|
|
|
|
};
|
|
|
|
transmit.send_message(request, success, error);
|
2021-06-10 08:32:54 +02:00
|
|
|
assert.ok(error_func_called);
|
2018-05-15 12:40:07 +02:00
|
|
|
});
|
2018-02-20 13:08:50 +01:00
|
|
|
|
2020-07-15 01:29:15 +02:00
|
|
|
run_test("transmit_message_ajax_reload_pending", () => {
|
2022-04-09 23:44:38 +02:00
|
|
|
/* istanbul ignore next */
|
2021-02-23 14:37:26 +01:00
|
|
|
const success = () => {
|
2020-10-07 13:01:09 +02:00
|
|
|
throw new Error("unexpected success");
|
2020-07-15 00:34:28 +02:00
|
|
|
};
|
2022-04-09 23:44:38 +02:00
|
|
|
/* istanbul ignore next */
|
|
|
|
const error = () => {
|
|
|
|
throw new Error("unexpected error");
|
|
|
|
};
|
2018-02-20 13:08:50 +01:00
|
|
|
|
2021-02-23 14:37:26 +01:00
|
|
|
reload_state.is_pending = () => true;
|
2018-02-20 13:08:50 +01:00
|
|
|
|
2019-11-02 00:06:25 +01:00
|
|
|
let reload_initiated;
|
2021-02-23 14:37:26 +01:00
|
|
|
reload.initiate = (opts) => {
|
2018-02-20 13:08:50 +01:00
|
|
|
reload_initiated = true;
|
|
|
|
assert.deepEqual(opts, {
|
2018-05-07 03:30:13 +02:00
|
|
|
immediate: true,
|
|
|
|
save_compose: true,
|
|
|
|
send_after_reload: true,
|
2018-02-20 13:08:50 +01:00
|
|
|
});
|
|
|
|
};
|
|
|
|
|
2020-07-15 01:29:15 +02:00
|
|
|
const request = {foo: "bar"};
|
2018-02-20 13:08:50 +01:00
|
|
|
|
2021-02-23 14:37:26 +01:00
|
|
|
channel.post = (opts) => {
|
2020-07-15 01:29:15 +02:00
|
|
|
assert.equal(opts.url, "/json/messages");
|
|
|
|
assert.equal(opts.data.foo, "bar");
|
|
|
|
const xhr = "whatever";
|
|
|
|
opts.error(xhr, "bad request");
|
2018-02-20 13:08:50 +01:00
|
|
|
};
|
|
|
|
transmit.send_message(request, success, error);
|
2021-06-10 08:32:54 +02:00
|
|
|
assert.ok(reload_initiated);
|
2018-05-15 12:40:07 +02:00
|
|
|
});
|
2018-02-23 16:18:27 +01:00
|
|
|
|
2023-11-21 10:39:13 +01:00
|
|
|
run_test("topic wildcard mention not allowed", ({override}) => {
|
|
|
|
/* istanbul ignore next */
|
|
|
|
const success = () => {
|
|
|
|
throw new Error("unexpected success");
|
|
|
|
};
|
|
|
|
|
|
|
|
/* istanbul ignore next */
|
|
|
|
const error = (_response, server_error_code) => {
|
|
|
|
assert.equal(server_error_code, "TOPIC_WILDCARD_MENTION_NOT_ALLOWED");
|
|
|
|
};
|
|
|
|
|
|
|
|
override(reload_state, "is_pending", () => false);
|
|
|
|
|
|
|
|
const request = {foo: "bar"};
|
|
|
|
override(channel, "post", (opts) => {
|
|
|
|
assert.equal(opts.url, "/json/messages");
|
|
|
|
assert.equal(opts.data.foo, "bar");
|
|
|
|
const xhr = {
|
|
|
|
responseJSON: {
|
|
|
|
code: "TOPIC_WILDCARD_MENTION_NOT_ALLOWED",
|
|
|
|
},
|
|
|
|
};
|
|
|
|
opts.error(xhr, "bad request");
|
|
|
|
});
|
|
|
|
|
|
|
|
transmit.send_message(request, success, error);
|
|
|
|
});
|
|
|
|
|
2022-07-10 01:06:33 +02:00
|
|
|
run_test("reply_message_stream", ({override}) => {
|
2023-07-26 22:07:21 +02:00
|
|
|
const social_stream_id = 555;
|
|
|
|
stream_data.add_sub({
|
|
|
|
name: "social",
|
|
|
|
stream_id: social_stream_id,
|
|
|
|
});
|
|
|
|
|
2018-02-23 16:18:27 +01:00
|
|
|
const stream_message = {
|
2020-07-15 01:29:15 +02:00
|
|
|
type: "stream",
|
2023-07-26 22:07:21 +02:00
|
|
|
stream_id: social_stream_id,
|
2020-07-15 01:29:15 +02:00
|
|
|
topic: "lunch",
|
|
|
|
sender_full_name: "Alice",
|
2018-10-13 02:31:49 +02:00
|
|
|
sender_id: 123,
|
2018-02-23 16:18:27 +01:00
|
|
|
};
|
|
|
|
|
2020-07-15 01:29:15 +02:00
|
|
|
const content = "hello";
|
2018-02-23 16:18:27 +01:00
|
|
|
|
2019-11-02 00:06:25 +01:00
|
|
|
let send_message_args;
|
2018-02-23 16:18:27 +01:00
|
|
|
|
2022-07-10 01:06:33 +02:00
|
|
|
override(channel, "post", ({data}) => {
|
|
|
|
send_message_args = data;
|
2021-02-28 00:51:22 +01:00
|
|
|
});
|
2018-02-23 16:18:27 +01:00
|
|
|
|
2024-10-09 21:21:41 +02:00
|
|
|
override(current_user, "user_id", 44);
|
2024-02-12 23:36:07 +01:00
|
|
|
server_events.queue_id = 66;
|
2020-02-12 09:32:25 +01:00
|
|
|
sent_messages.get_new_local_id = () => "99";
|
2018-02-23 16:18:27 +01:00
|
|
|
|
|
|
|
transmit.reply_message({
|
|
|
|
message: stream_message,
|
2020-07-20 22:18:43 +02:00
|
|
|
content,
|
2018-02-23 16:18:27 +01:00
|
|
|
});
|
|
|
|
|
|
|
|
assert.deepEqual(send_message_args, {
|
|
|
|
sender_id: 44,
|
|
|
|
queue_id: 66,
|
2020-07-15 01:29:15 +02:00
|
|
|
local_id: "99",
|
|
|
|
type: "stream",
|
|
|
|
to: "social",
|
|
|
|
content: "@**Alice** hello",
|
|
|
|
topic: "lunch",
|
2018-02-23 16:18:27 +01:00
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2022-07-10 01:06:33 +02:00
|
|
|
run_test("reply_message_private", ({override}) => {
|
2018-02-23 16:18:27 +01:00
|
|
|
const fred = {
|
|
|
|
user_id: 3,
|
2020-07-15 01:29:15 +02:00
|
|
|
email: "fred@example.com",
|
|
|
|
full_name: "Fred Frost",
|
2018-02-23 16:18:27 +01:00
|
|
|
};
|
2020-05-26 22:34:15 +02:00
|
|
|
people.add_active_user(fred);
|
2018-02-23 16:18:27 +01:00
|
|
|
|
|
|
|
const pm_message = {
|
2020-07-15 01:29:15 +02:00
|
|
|
type: "private",
|
2020-07-15 00:34:28 +02:00
|
|
|
display_recipient: [{id: fred.user_id}],
|
2018-02-23 16:18:27 +01:00
|
|
|
};
|
|
|
|
|
2020-07-15 01:29:15 +02:00
|
|
|
const content = "hello";
|
2018-02-23 16:18:27 +01:00
|
|
|
|
2019-11-02 00:06:25 +01:00
|
|
|
let send_message_args;
|
2018-02-23 16:18:27 +01:00
|
|
|
|
2022-07-10 01:06:33 +02:00
|
|
|
override(channel, "post", ({data}) => {
|
|
|
|
send_message_args = data;
|
2021-02-28 00:51:22 +01:00
|
|
|
});
|
2018-02-23 16:18:27 +01:00
|
|
|
|
2024-10-09 21:21:41 +02:00
|
|
|
override(current_user, "user_id", 155);
|
2024-02-12 23:36:07 +01:00
|
|
|
server_events.queue_id = 177;
|
2020-02-12 09:32:25 +01:00
|
|
|
sent_messages.get_new_local_id = () => "199";
|
2018-02-23 16:18:27 +01:00
|
|
|
|
|
|
|
transmit.reply_message({
|
|
|
|
message: pm_message,
|
2020-07-20 22:18:43 +02:00
|
|
|
content,
|
2018-02-23 16:18:27 +01:00
|
|
|
});
|
|
|
|
|
|
|
|
assert.deepEqual(send_message_args, {
|
|
|
|
sender_id: 155,
|
|
|
|
queue_id: 177,
|
2020-07-15 01:29:15 +02:00
|
|
|
local_id: "199",
|
|
|
|
type: "private",
|
2018-02-23 16:18:27 +01:00
|
|
|
to: '["fred@example.com"]',
|
2020-07-15 01:29:15 +02:00
|
|
|
content: "hello",
|
2018-02-23 16:18:27 +01:00
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2020-07-15 01:29:15 +02:00
|
|
|
run_test("reply_message_errors", () => {
|
2018-02-23 16:18:27 +01:00
|
|
|
const bogus_message = {
|
2020-07-15 01:29:15 +02:00
|
|
|
type: "bogus",
|
2018-02-23 16:18:27 +01:00
|
|
|
};
|
|
|
|
|
2023-04-24 15:57:45 +02:00
|
|
|
blueslip.expect("error", "unknown message type");
|
2018-02-23 16:18:27 +01:00
|
|
|
|
|
|
|
transmit.reply_message({
|
|
|
|
message: bogus_message,
|
|
|
|
});
|
|
|
|
});
|