mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	Now, the topic wildcard mention follows the following rules: * If the topic has less than 15 participants , anyone can use @ topic mentions. * For more than 15, the org setting 'wildcard_mention_policy' determines who can use @ topic mentions. Earlier, topic wildcard mentions followed the same restriction as stream wildcard mentions, which was incorrect. Fixes part of #27700.
		
			
				
	
	
		
			225 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			225 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
"use strict";
 | 
						|
 | 
						|
const {strict: assert} = require("assert");
 | 
						|
 | 
						|
const {mock_esm, zrequire} = require("./lib/namespace");
 | 
						|
const {run_test} = require("./lib/test");
 | 
						|
const blueslip = require("./lib/zblueslip");
 | 
						|
const {page_params} = require("./lib/zpage_params");
 | 
						|
 | 
						|
const noop = () => {};
 | 
						|
 | 
						|
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,
 | 
						|
        saw_event: true,
 | 
						|
    }),
 | 
						|
    start_send: noop,
 | 
						|
});
 | 
						|
 | 
						|
const people = zrequire("people");
 | 
						|
const transmit = zrequire("transmit");
 | 
						|
const stream_data = zrequire("stream_data");
 | 
						|
 | 
						|
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_pointer: true,
 | 
						|
            save_narrow: 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;
 | 
						|
    });
 | 
						|
 | 
						|
    page_params.user_id = 44;
 | 
						|
    page_params.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;
 | 
						|
    });
 | 
						|
 | 
						|
    page_params.user_id = 155;
 | 
						|
    page_params.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,
 | 
						|
    });
 | 
						|
});
 |