mirror of
				https://github.com/zulip/zulip.git
				synced 2025-10-29 19:13:53 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			228 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			228 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "use strict";
 | |
| 
 | |
| const assert = require("node:assert/strict");
 | |
| 
 | |
| const {mock_esm, zrequire} = require("./lib/namespace.cjs");
 | |
| const {run_test, noop} = require("./lib/test.cjs");
 | |
| const blueslip = require("./lib/zblueslip.cjs");
 | |
| 
 | |
| 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", {
 | |
|     start_tracking_message: noop,
 | |
|     get_message_state: () => ({
 | |
|         report_server_ack: noop,
 | |
|         report_error: noop,
 | |
|         saw_event: true,
 | |
|     }),
 | |
|     wrap_send(_local_id, callback) {
 | |
|         callback();
 | |
|     },
 | |
| });
 | |
| const server_events_state = mock_esm("../src/server_events_state");
 | |
| 
 | |
| const people = zrequire("people");
 | |
| const transmit = zrequire("transmit");
 | |
| const {set_current_user} = zrequire("state_data");
 | |
| const stream_data = zrequire("stream_data");
 | |
| 
 | |
| const current_user = {};
 | |
| set_current_user(current_user);
 | |
| 
 | |
| run_test("transmit_message_ajax", () => {
 | |
|     let success_func_called;
 | |
|     const success = () => {
 | |
|         success_func_called = true;
 | |
|     };
 | |
| 
 | |
|     const request = {foo: "bar"};
 | |
| 
 | |
|     channel.post = (opts) => {
 | |
|         assert.equal(opts.url, "/json/messages");
 | |
|         assert.equal(opts.data.foo, "bar");
 | |
|         opts.success();
 | |
|     };
 | |
| 
 | |
|     transmit.send_message(request, success);
 | |
| 
 | |
|     assert.ok(success_func_called);
 | |
| 
 | |
|     channel.xhr_error_message = (msg) => {
 | |
|         assert.equal(msg, "Error sending message");
 | |
|         return msg;
 | |
|     };
 | |
| 
 | |
|     channel.post = (opts) => {
 | |
|         assert.equal(opts.url, "/json/messages");
 | |
|         assert.equal(opts.data.foo, "bar");
 | |
|         const xhr = "whatever";
 | |
|         opts.error(xhr, "timeout");
 | |
|     };
 | |
| 
 | |
|     let error_func_called;
 | |
|     const error = (response) => {
 | |
|         assert.equal(response, "Error sending message");
 | |
|         error_func_called = true;
 | |
|     };
 | |
|     transmit.send_message(request, success, error);
 | |
|     assert.ok(error_func_called);
 | |
| });
 | |
| 
 | |
| run_test("transmit_message_ajax_reload_pending", () => {
 | |
|     /* istanbul ignore next */
 | |
|     const success = () => {
 | |
|         throw new Error("unexpected success");
 | |
|     };
 | |
|     /* istanbul ignore next */
 | |
|     const error = () => {
 | |
|         throw new Error("unexpected error");
 | |
|     };
 | |
| 
 | |
|     reload_state.is_pending = () => true;
 | |
| 
 | |
|     let reload_initiated;
 | |
|     reload.initiate = (opts) => {
 | |
|         reload_initiated = true;
 | |
|         assert.deepEqual(opts, {
 | |
|             immediate: true,
 | |
|             save_compose: true,
 | |
|             send_after_reload: true,
 | |
|         });
 | |
|     };
 | |
| 
 | |
|     const request = {foo: "bar"};
 | |
| 
 | |
|     channel.post = (opts) => {
 | |
|         assert.equal(opts.url, "/json/messages");
 | |
|         assert.equal(opts.data.foo, "bar");
 | |
|         const xhr = "whatever";
 | |
|         opts.error(xhr, "bad request");
 | |
|     };
 | |
|     transmit.send_message(request, success, error);
 | |
|     assert.ok(reload_initiated);
 | |
| });
 | |
| 
 | |
| 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);
 | |
| });
 | |
| 
 | |
| run_test("reply_message_stream", ({override}) => {
 | |
|     const social_stream_id = 555;
 | |
|     stream_data.add_sub({
 | |
|         name: "social",
 | |
|         stream_id: social_stream_id,
 | |
|     });
 | |
| 
 | |
|     const stream_message = {
 | |
|         type: "stream",
 | |
|         stream_id: social_stream_id,
 | |
|         topic: "lunch",
 | |
|         sender_full_name: "Alice",
 | |
|         sender_id: 123,
 | |
|     };
 | |
| 
 | |
|     const content = "hello";
 | |
| 
 | |
|     let send_message_args;
 | |
| 
 | |
|     override(channel, "post", ({data}) => {
 | |
|         send_message_args = data;
 | |
|     });
 | |
| 
 | |
|     override(current_user, "user_id", 44);
 | |
|     server_events_state.queue_id = 66;
 | |
|     sent_messages.get_new_local_id = () => "99";
 | |
| 
 | |
|     transmit.reply_message({
 | |
|         message: stream_message,
 | |
|         content,
 | |
|     });
 | |
| 
 | |
|     assert.deepEqual(send_message_args, {
 | |
|         sender_id: 44,
 | |
|         queue_id: 66,
 | |
|         local_id: "99",
 | |
|         type: "stream",
 | |
|         to: "social",
 | |
|         content: "@**Alice** hello",
 | |
|         topic: "lunch",
 | |
|     });
 | |
| });
 | |
| 
 | |
| run_test("reply_message_private", ({override}) => {
 | |
|     const fred = {
 | |
|         user_id: 3,
 | |
|         email: "fred@example.com",
 | |
|         full_name: "Fred Frost",
 | |
|     };
 | |
|     people.add_active_user(fred);
 | |
| 
 | |
|     const pm_message = {
 | |
|         type: "private",
 | |
|         display_recipient: [{id: fred.user_id}],
 | |
|     };
 | |
| 
 | |
|     const content = "hello";
 | |
| 
 | |
|     let send_message_args;
 | |
| 
 | |
|     override(channel, "post", ({data}) => {
 | |
|         send_message_args = data;
 | |
|     });
 | |
| 
 | |
|     override(current_user, "user_id", 155);
 | |
|     server_events_state.queue_id = 177;
 | |
|     sent_messages.get_new_local_id = () => "199";
 | |
| 
 | |
|     transmit.reply_message({
 | |
|         message: pm_message,
 | |
|         content,
 | |
|     });
 | |
| 
 | |
|     assert.deepEqual(send_message_args, {
 | |
|         sender_id: 155,
 | |
|         queue_id: 177,
 | |
|         local_id: "199",
 | |
|         type: "private",
 | |
|         to: '["fred@example.com"]',
 | |
|         content: "hello",
 | |
|     });
 | |
| });
 | |
| 
 | |
| run_test("reply_message_errors", () => {
 | |
|     const bogus_message = {
 | |
|         type: "bogus",
 | |
|     };
 | |
| 
 | |
|     blueslip.expect("error", "unknown message type");
 | |
| 
 | |
|     transmit.reply_message({
 | |
|         message: bogus_message,
 | |
|     });
 | |
| });
 |