mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	Prettier would do this anyway, but it’s separated out for a more reviewable diff. Generated by ESLint. Signed-off-by: Anders Kaseorg <anders@zulip.com>
		
			
				
	
	
		
			144 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			144 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
set_global("document", null);
 | 
						|
set_global("page_params", {
 | 
						|
    realm_community_topic_editing_limit_seconds: 86400,
 | 
						|
});
 | 
						|
 | 
						|
global.stub_out_jquery();
 | 
						|
 | 
						|
set_global("XDate", zrequire("XDate", "xdate/src/xdate"));
 | 
						|
zrequire("message_edit");
 | 
						|
 | 
						|
const get_editability = message_edit.get_editability;
 | 
						|
const editability_types = message_edit.editability_types;
 | 
						|
 | 
						|
run_test("get_editability", () => {
 | 
						|
    // You can't edit a null message
 | 
						|
    assert.equal(get_editability(null), editability_types.NO);
 | 
						|
    // You can't edit a message you didn't send
 | 
						|
    assert.equal(get_editability({
 | 
						|
        sent_by_me: false,
 | 
						|
    }), editability_types.NO);
 | 
						|
 | 
						|
    // Failed request are currently not editable (though we want to
 | 
						|
    // change this back).
 | 
						|
    assert.equal(get_editability({
 | 
						|
        sent_by_me: true,
 | 
						|
        failed_request: true,
 | 
						|
    }), editability_types.NO);
 | 
						|
 | 
						|
    // Locally echoed messages are not editable, since the message hasn't
 | 
						|
    // finished being sent yet.
 | 
						|
    assert.equal(get_editability({
 | 
						|
        sent_by_me: true,
 | 
						|
        local_id: "25",
 | 
						|
    }), editability_types.NO);
 | 
						|
 | 
						|
    // For the rest of these tests, we only consider messages sent by the
 | 
						|
    // user, and that were successfully sent (i.e. no failed_request or local_id)
 | 
						|
    let message = {
 | 
						|
        sent_by_me: true,
 | 
						|
    };
 | 
						|
 | 
						|
    global.page_params = {
 | 
						|
        realm_allow_message_editing: false,
 | 
						|
    };
 | 
						|
    assert.equal(get_editability(message), editability_types.NO);
 | 
						|
 | 
						|
    global.page_params = {
 | 
						|
        realm_allow_message_editing: true,
 | 
						|
        // Limit of 0 means no time limit on editing messages
 | 
						|
        realm_message_content_edit_limit_seconds: 0,
 | 
						|
    };
 | 
						|
    assert.equal(get_editability(message), editability_types.FULL);
 | 
						|
 | 
						|
    global.page_params = {
 | 
						|
        realm_allow_message_editing: true,
 | 
						|
        realm_message_content_edit_limit_seconds: 10,
 | 
						|
    };
 | 
						|
    const now = new Date();
 | 
						|
    const current_timestamp = now / 1000;
 | 
						|
    message.timestamp = current_timestamp - 60;
 | 
						|
    // Have 55+10 > 60 seconds from message.timestamp to edit the message; we're good!
 | 
						|
    assert.equal(get_editability(message, 55), editability_types.FULL);
 | 
						|
    // It's been 60 > 45+10 since message.timestamp. When realm_allow_message_editing
 | 
						|
    // is true, we can edit the topic if there is one.
 | 
						|
    message.type = "stream";
 | 
						|
    assert.equal(get_editability(message, 45), editability_types.TOPIC_ONLY);
 | 
						|
    message.type = "private";
 | 
						|
    assert.equal(get_editability(message, 45), editability_types.NO_LONGER);
 | 
						|
    // If we don't pass a second argument, treat it as 0
 | 
						|
    assert.equal(get_editability(message), editability_types.NO_LONGER);
 | 
						|
 | 
						|
    message = {
 | 
						|
        sent_by_me: false,
 | 
						|
        type: "stream",
 | 
						|
    };
 | 
						|
    global.page_params = {
 | 
						|
        realm_allow_community_topic_editing: true,
 | 
						|
        realm_allow_message_editing: true,
 | 
						|
        realm_message_content_edit_limit_seconds: 0,
 | 
						|
        realm_community_topic_editing_limit_seconds: 86400,
 | 
						|
        is_admin: false,
 | 
						|
    };
 | 
						|
    message.timestamp = current_timestamp - 60;
 | 
						|
    assert.equal(get_editability(message), editability_types.TOPIC_ONLY);
 | 
						|
 | 
						|
    // Test `message_edit.is_topic_editable()`
 | 
						|
    assert.equal(message_edit.is_topic_editable(message), true);
 | 
						|
 | 
						|
    message.sent_by_me = true;
 | 
						|
    global.page_params.realm_allow_community_topic_editing = false;
 | 
						|
    assert.equal(message_edit.is_topic_editable(message), true);
 | 
						|
 | 
						|
    message.sent_by_me = false;
 | 
						|
    global.page_params.realm_allow_community_topic_editing = false;
 | 
						|
    assert.equal(message_edit.is_topic_editable(message), false);
 | 
						|
 | 
						|
    message.sent_by_me = false;
 | 
						|
    global.page_params.realm_allow_community_topic_editing = false;
 | 
						|
    global.page_params.is_admin = true;
 | 
						|
    assert.equal(message_edit.is_topic_editable(message), true);
 | 
						|
 | 
						|
    global.page_params.realm_allow_message_editing = false;
 | 
						|
    assert.equal(message_edit.is_topic_editable(message), false);
 | 
						|
});
 | 
						|
 | 
						|
run_test("get_deletability", () => {
 | 
						|
    global.page_params = {
 | 
						|
        is_admin: true,
 | 
						|
        realm_allow_message_deleting: false,
 | 
						|
        realm_message_content_delete_limit_seconds: 0,
 | 
						|
    };
 | 
						|
    const message = {
 | 
						|
        sent_by_me: false,
 | 
						|
        locally_echoed: true,
 | 
						|
    };
 | 
						|
 | 
						|
    // Admin can always delete any message
 | 
						|
    assert.equal(message_edit.get_deletability(message), true);
 | 
						|
 | 
						|
    // Non-admin can't delete message sent by others
 | 
						|
    global.page_params.is_admin = false;
 | 
						|
    assert.equal(message_edit.get_deletability(message), false);
 | 
						|
 | 
						|
    // Locally echoed messages are not deletable
 | 
						|
    message.sent_by_me = true;
 | 
						|
    assert.equal(message_edit.get_deletability(message), false);
 | 
						|
 | 
						|
    message.locally_echoed = false;
 | 
						|
    assert.equal(message_edit.get_deletability(message), false);
 | 
						|
 | 
						|
    global.page_params.realm_allow_message_deleting = true;
 | 
						|
    assert.equal(message_edit.get_deletability(message), true);
 | 
						|
 | 
						|
    const now = new Date();
 | 
						|
    const current_timestamp = now / 1000;
 | 
						|
    message.timestamp = current_timestamp - 5;
 | 
						|
 | 
						|
    global.page_params.realm_message_content_delete_limit_seconds = 10;
 | 
						|
    assert.equal(message_edit.get_deletability(message), true);
 | 
						|
 | 
						|
    message.timestamp = current_timestamp - 60;
 | 
						|
    assert.equal(message_edit.get_deletability(message), false);
 | 
						|
});
 |