mirror of
https://github.com/zulip/zulip.git
synced 2025-11-22 07:21:23 +00:00
message_edit: Remove get_editability function.
This commit removes get_editability function and we can instead use is_content_editable and is_topic_editable/can_move_message functions to check the permissions. We can remove get_editability since there is no longer a sort order to the possibilities and it is not necessary that if a user has permission to edit content then they can edit the topics also. So, this commit adds is_message_editable_ignoring_permissions check to is_content_editable and also modifies the tests accordingly.
This commit is contained in:
@@ -9,104 +9,75 @@ const {page_params} = require("../zjsunit/zpage_params");
|
|||||||
page_params.realm_community_topic_editing_limit_seconds = 259200;
|
page_params.realm_community_topic_editing_limit_seconds = 259200;
|
||||||
|
|
||||||
const message_edit = zrequire("message_edit");
|
const message_edit = zrequire("message_edit");
|
||||||
const settings_config = zrequire("settings_config");
|
|
||||||
|
|
||||||
const get_editability = message_edit.get_editability;
|
const is_content_editable = message_edit.is_content_editable;
|
||||||
const editability_types = message_edit.editability_types;
|
|
||||||
|
|
||||||
const settings_data = mock_esm("../../static/js/settings_data");
|
const settings_data = mock_esm("../../static/js/settings_data");
|
||||||
|
|
||||||
run_test("get_editability", ({override}) => {
|
run_test("is_content_editable", () => {
|
||||||
override(settings_data, "user_can_move_messages_to_another_topic", () => true);
|
|
||||||
// You can't edit a null message
|
// You can't edit a null message
|
||||||
assert.equal(get_editability(null), editability_types.NO);
|
assert.equal(is_content_editable(null), false);
|
||||||
// You can't edit a message you didn't send
|
// You can't edit a message you didn't send
|
||||||
assert.equal(
|
assert.equal(
|
||||||
get_editability({
|
is_content_editable({
|
||||||
sent_by_me: false,
|
sent_by_me: false,
|
||||||
}),
|
}),
|
||||||
editability_types.NO,
|
false,
|
||||||
);
|
);
|
||||||
|
|
||||||
// Failed request are currently not editable (though we want to
|
// Failed request are currently not editable (though we want to
|
||||||
// change this back).
|
// change this back).
|
||||||
assert.equal(
|
assert.equal(
|
||||||
get_editability({
|
is_content_editable({
|
||||||
sent_by_me: true,
|
sent_by_me: true,
|
||||||
failed_request: true,
|
failed_request: true,
|
||||||
}),
|
}),
|
||||||
editability_types.NO,
|
false,
|
||||||
);
|
);
|
||||||
|
|
||||||
// Locally echoed messages are not editable, since the message hasn't
|
// Locally echoed messages are not editable, since the message hasn't
|
||||||
// finished being sent yet.
|
// finished being sent yet.
|
||||||
assert.equal(
|
assert.equal(
|
||||||
get_editability({
|
is_content_editable({
|
||||||
sent_by_me: true,
|
sent_by_me: true,
|
||||||
locally_echoed: true,
|
locally_echoed: true,
|
||||||
}),
|
}),
|
||||||
editability_types.NO,
|
false,
|
||||||
);
|
);
|
||||||
|
|
||||||
// For the rest of these tests, we only consider messages sent by the
|
// 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)
|
// user, and that were successfully sent (i.e. no failed_request or local_id)
|
||||||
let message = {
|
const message = {
|
||||||
sent_by_me: true,
|
sent_by_me: true,
|
||||||
};
|
};
|
||||||
|
|
||||||
page_params.realm_allow_message_editing = false;
|
page_params.realm_allow_message_editing = false;
|
||||||
assert.equal(get_editability(message), editability_types.NO);
|
assert.equal(is_content_editable(message), false);
|
||||||
|
|
||||||
page_params.realm_allow_message_editing = true;
|
page_params.realm_allow_message_editing = true;
|
||||||
// Limit of 0 means no time limit on editing messages
|
// Limit of 0 means no time limit on editing messages
|
||||||
page_params.realm_message_content_edit_limit_seconds = null;
|
page_params.realm_message_content_edit_limit_seconds = null;
|
||||||
assert.equal(get_editability(message), editability_types.CONTENT_ONLY);
|
assert.equal(is_content_editable(message), true);
|
||||||
|
|
||||||
page_params.realm_message_content_edit_limit_seconds = 10;
|
page_params.realm_message_content_edit_limit_seconds = 10;
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
const current_timestamp = now / 1000;
|
const current_timestamp = now / 1000;
|
||||||
message.timestamp = current_timestamp - 60;
|
message.timestamp = current_timestamp - 60;
|
||||||
// Have 55+10 > 60 seconds from message.timestamp to edit the message; we're good!
|
// Have 55+10 > 60 seconds from message.timestamp to edit the message; we're good!
|
||||||
assert.equal(get_editability(message, 55), editability_types.CONTENT_ONLY);
|
assert.equal(is_content_editable(message, 55), true);
|
||||||
// It's been 60 > 45+10 since message.timestamp. When realm_allow_message_editing
|
// 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.
|
// is true, we can edit the topic if there is one.
|
||||||
assert.equal(get_editability(message, 45), editability_types.NO);
|
assert.equal(is_content_editable(message, 45), false);
|
||||||
// Right now, we prevent users from editing widgets.
|
// Right now, we prevent users from editing widgets.
|
||||||
message.submessages = ["/poll"];
|
message.submessages = ["/poll"];
|
||||||
assert.equal(get_editability(message, 55), editability_types.NO);
|
assert.equal(is_content_editable(message, 55), false);
|
||||||
delete message.submessages;
|
delete message.submessages;
|
||||||
message.type = "private";
|
message.type = "private";
|
||||||
assert.equal(get_editability(message, 45), editability_types.NO);
|
assert.equal(is_content_editable(message, 45), false);
|
||||||
|
|
||||||
assert.equal(get_editability(message, 55), editability_types.CONTENT_ONLY);
|
assert.equal(is_content_editable(message, 55), true);
|
||||||
// If we don't pass a second argument, treat it as 0
|
// If we don't pass a second argument, treat it as 0
|
||||||
assert.equal(get_editability(message), editability_types.NO);
|
assert.equal(is_content_editable(message), false);
|
||||||
|
|
||||||
message = {
|
|
||||||
sent_by_me: false,
|
|
||||||
type: "stream",
|
|
||||||
};
|
|
||||||
page_params.realm_edit_topic_policy =
|
|
||||||
settings_config.common_message_policy_values.by_everyone.code;
|
|
||||||
page_params.realm_allow_message_editing = true;
|
|
||||||
page_params.realm_message_content_edit_limit_seconds = null;
|
|
||||||
page_params.realm_community_topic_editing_limit_seconds = 50;
|
|
||||||
page_params.is_admin = false;
|
|
||||||
message.timestamp = current_timestamp - 60;
|
|
||||||
assert.equal(get_editability(message), editability_types.NO);
|
|
||||||
|
|
||||||
page_params.is_admin = true;
|
|
||||||
assert.equal(get_editability(message), editability_types.TOPIC_ONLY);
|
|
||||||
|
|
||||||
page_params.is_admin = false;
|
|
||||||
page_params.realm_community_topic_editing_limit_seconds = 259200;
|
|
||||||
assert.equal(get_editability(message), editability_types.TOPIC_ONLY);
|
|
||||||
|
|
||||||
message.sent_by_me = true;
|
|
||||||
assert.equal(get_editability(message), editability_types.FULL);
|
|
||||||
|
|
||||||
page_params.realm_allow_message_editing = false;
|
|
||||||
assert.equal(get_editability(message), editability_types.TOPIC_ONLY);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
run_test("is_topic_editable", ({override}) => {
|
run_test("is_topic_editable", ({override}) => {
|
||||||
|
|||||||
@@ -44,19 +44,6 @@ export let notify_old_thread_default = false;
|
|||||||
|
|
||||||
export let notify_new_thread_default = true;
|
export let notify_new_thread_default = true;
|
||||||
|
|
||||||
export const editability_types = {
|
|
||||||
NO: 1,
|
|
||||||
// Note: TOPIC_ONLY does not include stream messages with no topic sent
|
|
||||||
// by someone else. You can edit the topic of such a message by editing
|
|
||||||
// the topic of the whole recipient_row it appears in, but you can't
|
|
||||||
// directly edit the topic of such a message.
|
|
||||||
// Similar story for messages whose topic you can change only because
|
|
||||||
// you are an admin.
|
|
||||||
TOPIC_ONLY: 3,
|
|
||||||
CONTENT_ONLY: 4,
|
|
||||||
FULL: 5,
|
|
||||||
};
|
|
||||||
|
|
||||||
export function is_topic_editable(message, edit_limit_seconds_buffer = 0) {
|
export function is_topic_editable(message, edit_limit_seconds_buffer = 0) {
|
||||||
if (!is_message_editable_ignoring_permissions(message)) {
|
if (!is_message_editable_ignoring_permissions(message)) {
|
||||||
return false;
|
return false;
|
||||||
@@ -125,7 +112,11 @@ export function is_message_editable_ignoring_permissions(message) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function is_content_editable(message, edit_limit_seconds_buffer = 0) {
|
export function is_content_editable(message, edit_limit_seconds_buffer = 0) {
|
||||||
|
if (!is_message_editable_ignoring_permissions(message)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (!page_params.realm_allow_message_editing) {
|
if (!page_params.realm_allow_message_editing) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -153,29 +144,6 @@ function is_content_editable(message, edit_limit_seconds_buffer = 0) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function get_editability(message, edit_limit_seconds_buffer = 0) {
|
|
||||||
if (!is_message_editable_ignoring_permissions(message)) {
|
|
||||||
return editability_types.NO;
|
|
||||||
}
|
|
||||||
|
|
||||||
const can_edit_topic = is_topic_editable(message, edit_limit_seconds_buffer);
|
|
||||||
const can_edit_content = is_content_editable(message, edit_limit_seconds_buffer);
|
|
||||||
|
|
||||||
if (can_edit_content && can_edit_topic) {
|
|
||||||
return editability_types.FULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (can_edit_topic && !can_edit_content) {
|
|
||||||
return editability_types.TOPIC_ONLY;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (can_edit_content && !can_edit_topic) {
|
|
||||||
return editability_types.CONTENT_ONLY;
|
|
||||||
}
|
|
||||||
|
|
||||||
return editability_types.NO;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function get_deletability(message) {
|
export function get_deletability(message) {
|
||||||
if (page_params.is_admin) {
|
if (page_params.is_admin) {
|
||||||
return true;
|
return true;
|
||||||
@@ -441,7 +409,6 @@ function edit_message($row, raw_content) {
|
|||||||
// If you change this number also change edit_limit_buffer in
|
// If you change this number also change edit_limit_buffer in
|
||||||
// zerver.actions.message_edit.check_update_message
|
// zerver.actions.message_edit.check_update_message
|
||||||
const seconds_left_buffer = 5;
|
const seconds_left_buffer = 5;
|
||||||
const editability = get_editability(message, seconds_left_buffer);
|
|
||||||
const max_file_upload_size = page_params.max_file_upload_size_mib;
|
const max_file_upload_size = page_params.max_file_upload_size_mib;
|
||||||
let file_upload_enabled = false;
|
let file_upload_enabled = false;
|
||||||
|
|
||||||
@@ -449,8 +416,7 @@ function edit_message($row, raw_content) {
|
|||||||
file_upload_enabled = true;
|
file_upload_enabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
const is_editable =
|
const is_editable = is_content_editable(message, seconds_left_buffer);
|
||||||
editability === editability_types.FULL || editability === editability_types.CONTENT_ONLY;
|
|
||||||
|
|
||||||
const $form = $(
|
const $form = $(
|
||||||
render_message_edit_form({
|
render_message_edit_form({
|
||||||
@@ -900,11 +866,7 @@ export function edit_last_sent_message() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const msg_editability_type = get_editability(msg, 5);
|
if (!is_content_editable(msg, 5)) {
|
||||||
if (
|
|
||||||
msg_editability_type !== editability_types.FULL &&
|
|
||||||
msg_editability_type !== editability_types.CONTENT_ONLY
|
|
||||||
) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,17 +19,14 @@ export function get_actions_popover_content_context(message_id) {
|
|||||||
muted_users.is_user_muted(message.sender_id) &&
|
muted_users.is_user_muted(message.sender_id) &&
|
||||||
!message_container.is_hidden &&
|
!message_container.is_hidden &&
|
||||||
not_spectator;
|
not_spectator;
|
||||||
const editability = message_edit.get_editability(message);
|
const is_content_editable = message_edit.is_content_editable(message);
|
||||||
const can_move_message = message_edit.can_move_message(message);
|
const can_move_message = message_edit.can_move_message(message);
|
||||||
|
|
||||||
let editability_menu_item;
|
let editability_menu_item;
|
||||||
let move_message_menu_item;
|
let move_message_menu_item;
|
||||||
let view_source_menu_item;
|
let view_source_menu_item;
|
||||||
|
|
||||||
if (
|
if (is_content_editable) {
|
||||||
editability === message_edit.editability_types.FULL ||
|
|
||||||
editability === message_edit.editability_types.CONTENT_ONLY
|
|
||||||
) {
|
|
||||||
editability_menu_item = $t({defaultMessage: "Edit message"});
|
editability_menu_item = $t({defaultMessage: "Edit message"});
|
||||||
} else {
|
} else {
|
||||||
view_source_menu_item = $t({defaultMessage: "View message source"});
|
view_source_menu_item = $t({defaultMessage: "View message source"});
|
||||||
|
|||||||
@@ -142,10 +142,7 @@ function message_hover($message_row) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// But the message edit hover icon is determined by whether the message is still editable
|
// But the message edit hover icon is determined by whether the message is still editable
|
||||||
const editability = message_edit.get_editability(message);
|
const is_content_editable = message_edit.is_content_editable(message);
|
||||||
const is_content_editable =
|
|
||||||
editability === message_edit.editability_types.FULL ||
|
|
||||||
editability === message_edit.editability_types.CONTENT_ONLY;
|
|
||||||
|
|
||||||
const can_move_message = message_edit.can_move_message(message);
|
const can_move_message = message_edit.can_move_message(message);
|
||||||
const args = {
|
const args = {
|
||||||
|
|||||||
Reference in New Issue
Block a user