mirror of
https://github.com/discourse/discourse.git
synced 2025-05-25 00:32:52 +08:00
FIX: Add editing user ids to ChatMessage and ChatMessageRevision (#18877)
This commit adds last_editor_id to ChatMessage for parity with Post in core, as well as adding user_id to the ChatMessageRevision record since we need to know who is making edits and revisions to messages, in case in future we want to allow more than just the current user to edit chat messages. The backfill for data here simply uses the record's creating user ID, but in future if we allow other people to edit the messages it will use their ID.
This commit is contained in:
@ -3,6 +3,7 @@
|
||||
require "rails_helper"
|
||||
|
||||
describe Chat::ChatMessageUpdater do
|
||||
let(:guardian) { Guardian.new(user1) }
|
||||
fab!(:admin1) { Fabricate(:admin) }
|
||||
fab!(:admin2) { Fabricate(:admin) }
|
||||
fab!(:user1) { Fabricate(:user) }
|
||||
@ -30,7 +31,10 @@ describe Chat::ChatMessageUpdater do
|
||||
end
|
||||
Group.refresh_automatic_groups!
|
||||
@direct_message_channel =
|
||||
Chat::DirectMessageChannelCreator.create!(acting_user: user1, target_users: [user1, user2])
|
||||
Chat::DirectMessageChannelCreator.create!(
|
||||
acting_user: user1,
|
||||
target_users: [user1, user2],
|
||||
)
|
||||
end
|
||||
|
||||
def create_chat_message(user, message, channel, upload_ids: nil)
|
||||
@ -51,7 +55,12 @@ describe Chat::ChatMessageUpdater do
|
||||
chat_message = create_chat_message(user1, og_message, public_chat_channel)
|
||||
new_message = "2 short"
|
||||
|
||||
updater = Chat::ChatMessageUpdater.update(chat_message: chat_message, new_content: new_message)
|
||||
updater =
|
||||
Chat::ChatMessageUpdater.update(
|
||||
guardian: guardian,
|
||||
chat_message: chat_message,
|
||||
new_content: new_message,
|
||||
)
|
||||
expect(updater.failed?).to eq(true)
|
||||
expect(updater.error.message).to match(
|
||||
I18n.t(
|
||||
@ -66,7 +75,11 @@ describe Chat::ChatMessageUpdater do
|
||||
chat_message = create_chat_message(user1, "This will be changed", public_chat_channel)
|
||||
new_message = "Change to this!"
|
||||
|
||||
Chat::ChatMessageUpdater.update(chat_message: chat_message, new_content: new_message)
|
||||
Chat::ChatMessageUpdater.update(
|
||||
guardian: guardian,
|
||||
chat_message: chat_message,
|
||||
new_content: new_message,
|
||||
)
|
||||
expect(chat_message.reload.message).to eq(new_message)
|
||||
end
|
||||
|
||||
@ -74,6 +87,7 @@ describe Chat::ChatMessageUpdater do
|
||||
chat_message = create_chat_message(user1, "This will be changed", public_chat_channel)
|
||||
expect {
|
||||
Chat::ChatMessageUpdater.update(
|
||||
guardian: guardian,
|
||||
chat_message: chat_message,
|
||||
new_content:
|
||||
"this is a message with @system @mentions @#{user2.username} and @#{user3.username}",
|
||||
@ -86,6 +100,7 @@ describe Chat::ChatMessageUpdater do
|
||||
chat_message = create_chat_message(user1, message, public_chat_channel)
|
||||
expect {
|
||||
Chat::ChatMessageUpdater.update(
|
||||
guardian: guardian,
|
||||
chat_message: chat_message,
|
||||
new_content: message + " editedddd",
|
||||
)
|
||||
@ -98,6 +113,7 @@ describe Chat::ChatMessageUpdater do
|
||||
|
||||
expect {
|
||||
Chat::ChatMessageUpdater.update(
|
||||
guardian: guardian,
|
||||
chat_message: chat_message,
|
||||
new_content: message + " @#{user_without_memberships.username}",
|
||||
)
|
||||
@ -109,6 +125,7 @@ describe Chat::ChatMessageUpdater do
|
||||
create_chat_message(user1, "ping @#{user2.username} @#{user3.username}", public_chat_channel)
|
||||
expect {
|
||||
Chat::ChatMessageUpdater.update(
|
||||
guardian: guardian,
|
||||
chat_message: chat_message,
|
||||
new_content: "ping @#{user3.username}",
|
||||
)
|
||||
@ -119,6 +136,7 @@ describe Chat::ChatMessageUpdater do
|
||||
chat_message =
|
||||
create_chat_message(user1, "ping @#{user2.username} @#{user3.username}", public_chat_channel)
|
||||
Chat::ChatMessageUpdater.update(
|
||||
guardian: guardian,
|
||||
chat_message: chat_message,
|
||||
new_content: "ping @#{user3.username} @#{user4.username}",
|
||||
)
|
||||
@ -132,6 +150,7 @@ describe Chat::ChatMessageUpdater do
|
||||
chat_message = create_chat_message(user1, "ping nobody", @direct_message_channel)
|
||||
expect {
|
||||
Chat::ChatMessageUpdater.update(
|
||||
guardian: guardian,
|
||||
chat_message: chat_message,
|
||||
new_content: "ping @#{admin1.username}",
|
||||
)
|
||||
@ -143,6 +162,7 @@ describe Chat::ChatMessageUpdater do
|
||||
chat_message = create_chat_message(user1, "ping nobody", public_chat_channel)
|
||||
expect {
|
||||
Chat::ChatMessageUpdater.update(
|
||||
guardian: guardian,
|
||||
chat_message: chat_message,
|
||||
new_content: "ping @#{admin_group.name}",
|
||||
)
|
||||
@ -156,6 +176,7 @@ describe Chat::ChatMessageUpdater do
|
||||
chat_message = create_chat_message(user1, "ping @#{admin2.username}", public_chat_channel)
|
||||
expect {
|
||||
Chat::ChatMessageUpdater.update(
|
||||
guardian: guardian,
|
||||
chat_message: chat_message,
|
||||
new_content: "ping @#{admin_group.name} @#{admin2.username}",
|
||||
)
|
||||
@ -166,6 +187,7 @@ describe Chat::ChatMessageUpdater do
|
||||
chat_message = create_chat_message(user1, "ping @#{admin_group.name}", public_chat_channel)
|
||||
expect {
|
||||
Chat::ChatMessageUpdater.update(
|
||||
guardian: guardian,
|
||||
chat_message: chat_message,
|
||||
new_content: "ping nobody anymore!",
|
||||
)
|
||||
@ -176,14 +198,20 @@ describe Chat::ChatMessageUpdater do
|
||||
end
|
||||
end
|
||||
|
||||
it "creates a chat_message_revision record" do
|
||||
it "creates a chat_message_revision record and sets last_editor_id for the message" do
|
||||
old_message = "It's a thrsday!"
|
||||
new_message = "It's a thursday!"
|
||||
chat_message = create_chat_message(user1, old_message, public_chat_channel)
|
||||
Chat::ChatMessageUpdater.update(chat_message: chat_message, new_content: new_message)
|
||||
Chat::ChatMessageUpdater.update(
|
||||
guardian: guardian,
|
||||
chat_message: chat_message,
|
||||
new_content: new_message,
|
||||
)
|
||||
revision = chat_message.revisions.last
|
||||
expect(revision.old_message).to eq(old_message)
|
||||
expect(revision.new_message).to eq(new_message)
|
||||
expect(revision.user_id).to eq(guardian.user.id)
|
||||
expect(chat_message.reload.last_editor_id).to eq(guardian.user.id)
|
||||
end
|
||||
|
||||
describe "uploads" do
|
||||
@ -200,6 +228,7 @@ describe Chat::ChatMessageUpdater do
|
||||
)
|
||||
expect {
|
||||
Chat::ChatMessageUpdater.update(
|
||||
guardian: guardian,
|
||||
chat_message: chat_message,
|
||||
new_content: "I guess this is different",
|
||||
upload_ids: [upload2.id, upload1.id],
|
||||
@ -217,6 +246,7 @@ describe Chat::ChatMessageUpdater do
|
||||
)
|
||||
expect {
|
||||
Chat::ChatMessageUpdater.update(
|
||||
guardian: guardian,
|
||||
chat_message: chat_message,
|
||||
new_content: "I guess this is different",
|
||||
upload_ids: [upload1.id],
|
||||
@ -234,6 +264,7 @@ describe Chat::ChatMessageUpdater do
|
||||
)
|
||||
expect {
|
||||
Chat::ChatMessageUpdater.update(
|
||||
guardian: guardian,
|
||||
chat_message: chat_message,
|
||||
new_content: "I guess this is different",
|
||||
upload_ids: [],
|
||||
@ -245,6 +276,7 @@ describe Chat::ChatMessageUpdater do
|
||||
chat_message = create_chat_message(user1, "something", public_chat_channel)
|
||||
expect {
|
||||
Chat::ChatMessageUpdater.update(
|
||||
guardian: guardian,
|
||||
chat_message: chat_message,
|
||||
new_content: "I guess this is different",
|
||||
upload_ids: [upload1.id],
|
||||
@ -256,6 +288,7 @@ describe Chat::ChatMessageUpdater do
|
||||
chat_message = create_chat_message(user1, "something", public_chat_channel)
|
||||
expect {
|
||||
Chat::ChatMessageUpdater.update(
|
||||
guardian: guardian,
|
||||
chat_message: chat_message,
|
||||
new_content: "I guess this is different",
|
||||
upload_ids: [upload1.id, upload2.id],
|
||||
@ -263,11 +296,12 @@ describe Chat::ChatMessageUpdater do
|
||||
}.to change { ChatUpload.where(chat_message: chat_message).count }.by(2)
|
||||
end
|
||||
|
||||
it "doesn't remove existing uploads when BS upload ids are passed in" do
|
||||
it "doesn't remove existing uploads when upload ids that do not exist are passed in" do
|
||||
chat_message =
|
||||
create_chat_message(user1, "something", public_chat_channel, upload_ids: [upload1.id])
|
||||
expect {
|
||||
Chat::ChatMessageUpdater.update(
|
||||
guardian: guardian,
|
||||
chat_message: chat_message,
|
||||
new_content: "I guess this is different",
|
||||
upload_ids: [0],
|
||||
@ -280,6 +314,7 @@ describe Chat::ChatMessageUpdater do
|
||||
chat_message = create_chat_message(user1, "something", public_chat_channel)
|
||||
expect {
|
||||
Chat::ChatMessageUpdater.update(
|
||||
guardian: guardian,
|
||||
chat_message: chat_message,
|
||||
new_content: "I guess this is different",
|
||||
upload_ids: [upload1.id, upload2.id],
|
||||
@ -298,6 +333,7 @@ describe Chat::ChatMessageUpdater do
|
||||
)
|
||||
expect {
|
||||
Chat::ChatMessageUpdater.update(
|
||||
guardian: guardian,
|
||||
chat_message: chat_message,
|
||||
new_content: "I guess this is different",
|
||||
upload_ids: [],
|
||||
@ -316,6 +352,7 @@ describe Chat::ChatMessageUpdater do
|
||||
SiteSetting.chat_minimum_message_length = 10
|
||||
new_message = "hi :)"
|
||||
Chat::ChatMessageUpdater.update(
|
||||
guardian: guardian,
|
||||
chat_message: chat_message,
|
||||
new_content: new_message,
|
||||
upload_ids: [upload1.id],
|
||||
@ -348,6 +385,7 @@ describe Chat::ChatMessageUpdater do
|
||||
def update_message(user)
|
||||
message.update(user: user)
|
||||
Chat::ChatMessageUpdater.update(
|
||||
guardian: Guardian.new(user),
|
||||
chat_message: message,
|
||||
new_content: "I guess this is different",
|
||||
)
|
||||
|
Reference in New Issue
Block a user