mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 14:03:30 +00:00 
			
		
		
		
	ES and TypeScript modules are strict by default and don’t need this directive. ESLint will remind us to add it to new CommonJS files and remove it from ES and TypeScript modules. Signed-off-by: Anders Kaseorg <anders@zulip.com>
		
			
				
	
	
		
			163 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			163 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
"use strict";
 | 
						|
 | 
						|
zrequire("unread");
 | 
						|
zrequire("unread_ops");
 | 
						|
zrequire("message_flags");
 | 
						|
 | 
						|
set_global("ui", {});
 | 
						|
set_global("channel", {});
 | 
						|
set_global("starred_messages", {
 | 
						|
    add: () => {},
 | 
						|
    remove: () => {},
 | 
						|
});
 | 
						|
 | 
						|
run_test("starred", () => {
 | 
						|
    const message = {
 | 
						|
        id: 50,
 | 
						|
    };
 | 
						|
    set_global("current_msg_list", {
 | 
						|
        all_messages: () => [message],
 | 
						|
        is_search: () => false,
 | 
						|
    });
 | 
						|
    let ui_updated;
 | 
						|
 | 
						|
    ui.update_starred_view = () => {
 | 
						|
        ui_updated = true;
 | 
						|
    };
 | 
						|
 | 
						|
    let posted_data;
 | 
						|
 | 
						|
    channel.post = (opts) => {
 | 
						|
        assert.equal(opts.url, "/json/messages/flags");
 | 
						|
        posted_data = opts.data;
 | 
						|
    };
 | 
						|
 | 
						|
    message_flags.toggle_starred_and_update_server(message);
 | 
						|
 | 
						|
    assert(ui_updated);
 | 
						|
 | 
						|
    assert.deepEqual(posted_data, {
 | 
						|
        messages: "[50]",
 | 
						|
        flag: "starred",
 | 
						|
        op: "add",
 | 
						|
    });
 | 
						|
 | 
						|
    assert.deepEqual(message, {
 | 
						|
        id: 50,
 | 
						|
        starred: true,
 | 
						|
    });
 | 
						|
 | 
						|
    ui_updated = false;
 | 
						|
 | 
						|
    message_flags.toggle_starred_and_update_server(message);
 | 
						|
 | 
						|
    assert(ui_updated);
 | 
						|
 | 
						|
    assert.deepEqual(posted_data, {
 | 
						|
        messages: "[50]",
 | 
						|
        flag: "starred",
 | 
						|
        op: "remove",
 | 
						|
    });
 | 
						|
 | 
						|
    assert.deepEqual(message, {
 | 
						|
        id: 50,
 | 
						|
        starred: false,
 | 
						|
    });
 | 
						|
});
 | 
						|
run_test("read", () => {
 | 
						|
    // Way to capture posted info in every request
 | 
						|
    let channel_post_opts;
 | 
						|
    channel.post = (opts) => {
 | 
						|
        channel_post_opts = opts;
 | 
						|
    };
 | 
						|
 | 
						|
    // For testing purpose limit the batch size value to 5 instead of 1000
 | 
						|
    message_flags._unread_batch_size = 5;
 | 
						|
    let msgs_to_flag_read = [
 | 
						|
        {locally_echoed: false, id: 1},
 | 
						|
        {locally_echoed: false, id: 2},
 | 
						|
        {locally_echoed: false, id: 3},
 | 
						|
        {locally_echoed: false, id: 4},
 | 
						|
        {locally_echoed: false, id: 5},
 | 
						|
        {locally_echoed: false, id: 6},
 | 
						|
        {locally_echoed: false, id: 7},
 | 
						|
    ];
 | 
						|
    message_flags.send_read(msgs_to_flag_read);
 | 
						|
    assert.deepEqual(channel_post_opts, {
 | 
						|
        url: "/json/messages/flags",
 | 
						|
        idempotent: true,
 | 
						|
        data: {
 | 
						|
            messages: "[1,2,3,4,5]",
 | 
						|
            op: "add",
 | 
						|
            flag: "read",
 | 
						|
        },
 | 
						|
        success: channel_post_opts.success,
 | 
						|
    });
 | 
						|
 | 
						|
    // Mock successful flagging of ids
 | 
						|
    let success_response_data = {
 | 
						|
        messages: [1, 2, 3, 4, 5],
 | 
						|
    };
 | 
						|
    channel_post_opts.success(success_response_data);
 | 
						|
    assert.deepEqual(channel_post_opts, {
 | 
						|
        url: "/json/messages/flags",
 | 
						|
        idempotent: true,
 | 
						|
        data: {
 | 
						|
            messages: "[6,7]",
 | 
						|
            op: "add",
 | 
						|
            flag: "read",
 | 
						|
        },
 | 
						|
        success: channel_post_opts.success,
 | 
						|
    });
 | 
						|
    success_response_data = {
 | 
						|
        messages: [6, 7],
 | 
						|
    };
 | 
						|
    channel_post_opts.success(success_response_data);
 | 
						|
 | 
						|
    // Don't flag locally echoed messages as read
 | 
						|
    const local_msg_1 = {locally_echoed: true, id: 1};
 | 
						|
    const local_msg_2 = {locally_echoed: true, id: 2};
 | 
						|
    msgs_to_flag_read = [
 | 
						|
        local_msg_1,
 | 
						|
        local_msg_2,
 | 
						|
        {locally_echoed: false, id: 3},
 | 
						|
        {locally_echoed: false, id: 4},
 | 
						|
        {locally_echoed: false, id: 5},
 | 
						|
        {locally_echoed: false, id: 6},
 | 
						|
        {locally_echoed: false, id: 7},
 | 
						|
    ];
 | 
						|
    message_flags.send_read(msgs_to_flag_read);
 | 
						|
    assert.deepEqual(channel_post_opts, {
 | 
						|
        url: "/json/messages/flags",
 | 
						|
        idempotent: true,
 | 
						|
        data: {
 | 
						|
            messages: "[3,4,5,6,7]",
 | 
						|
            op: "add",
 | 
						|
            flag: "read",
 | 
						|
        },
 | 
						|
        success: channel_post_opts.success,
 | 
						|
    });
 | 
						|
 | 
						|
    // Mark them non local
 | 
						|
    local_msg_1.locally_echoed = false;
 | 
						|
    local_msg_2.locally_echoed = false;
 | 
						|
 | 
						|
    // Mock successful flagging of ids
 | 
						|
    success_response_data = {
 | 
						|
        messages: [3, 4, 5, 6, 7],
 | 
						|
    };
 | 
						|
    channel_post_opts.success(success_response_data);
 | 
						|
 | 
						|
    // Former locally echoed messages flagging retried
 | 
						|
    assert.deepEqual(channel_post_opts, {
 | 
						|
        url: "/json/messages/flags",
 | 
						|
        idempotent: true,
 | 
						|
        data: {
 | 
						|
            messages: "[1,2]",
 | 
						|
            op: "add",
 | 
						|
            flag: "read",
 | 
						|
        },
 | 
						|
        success: channel_post_opts.success,
 | 
						|
    });
 | 
						|
});
 |