mirror of
https://github.com/discourse/discourse.git
synced 2026-08-17 16:35:03 -05:00
DEV: Refactor a little chat uploads
This is extracted from #22390. This patch simplifies a little how we handle uploads in chat, relying on ActiveRecord mechanisms instead of calling custom methods. This also makes `Chat::Message#validate_message` a “real” AR validation, meaning it will run automatically when `#valid?` is called.
This commit is contained in:
committed by
Loïc Guitaut
parent
0db98e9d86
commit
5d2ec6461d
@@ -118,7 +118,6 @@ describe Chat::TranscriptService do
|
||||
|
||||
it "generates image / attachment / video / audio markdown inside the [chat] bbcode for upload-only messages" do
|
||||
SiteSetting.authorized_extensions = "mp4|mp3|pdf|jpg"
|
||||
message = Fabricate(:chat_message, user: user1, chat_channel: channel, message: "")
|
||||
video = Fabricate(:upload, original_filename: "test_video.mp4", extension: "mp4")
|
||||
audio = Fabricate(:upload, original_filename: "test_audio.mp3", extension: "mp3")
|
||||
attachment = Fabricate(:upload, original_filename: "test_file.pdf", extension: "pdf")
|
||||
@@ -130,10 +129,14 @@ describe Chat::TranscriptService do
|
||||
original_filename: "test_img.jpg",
|
||||
extension: "jpg",
|
||||
)
|
||||
UploadReference.create(target: message, created_at: 10.seconds.ago, upload: video)
|
||||
UploadReference.create(target: message, created_at: 9.seconds.ago, upload: audio)
|
||||
UploadReference.create(target: message, created_at: 8.seconds.ago, upload: attachment)
|
||||
UploadReference.create(target: message, created_at: 7.seconds.ago, upload: image)
|
||||
message =
|
||||
Fabricate(
|
||||
:chat_message,
|
||||
user: user1,
|
||||
chat_channel: channel,
|
||||
message: "",
|
||||
uploads: [video, audio, attachment, image],
|
||||
)
|
||||
video_markdown = UploadMarkdown.new(video).to_markdown
|
||||
audio_markdown = UploadMarkdown.new(audio).to_markdown
|
||||
attachment_markdown = UploadMarkdown.new(attachment).to_markdown
|
||||
|
||||
@@ -293,8 +293,7 @@ describe Chat::Message do
|
||||
it "excerpts upload file name if message is empty" do
|
||||
gif =
|
||||
Fabricate(:upload, original_filename: "cat.gif", width: 400, height: 300, extension: "gif")
|
||||
message = Fabricate(:chat_message, message: "")
|
||||
message.attach_uploads([gif])
|
||||
message = Fabricate(:chat_message, message: "", uploads: [gif])
|
||||
|
||||
expect(message.excerpt).to eq "cat.gif"
|
||||
end
|
||||
@@ -377,7 +376,7 @@ describe Chat::Message do
|
||||
)
|
||||
image2 =
|
||||
Fabricate(:upload, original_filename: "meme.jpg", width: 10, height: 10, extension: "jpg")
|
||||
message.attach_uploads([image, image2])
|
||||
message.uploads = [image, image2]
|
||||
expect(message.to_markdown).to eq(<<~MSG.chomp)
|
||||
hey friend, what's up?!
|
||||
|
||||
@@ -410,7 +409,7 @@ describe Chat::Message do
|
||||
Fabricate(:chat_message, message: "this is duplicate", chat_channel: channel, user: user1)
|
||||
message =
|
||||
described_class.new(message: "this is duplicate", chat_channel: channel, user: user2)
|
||||
message.validate_message(has_uploads: false)
|
||||
message.valid?
|
||||
expect(message.errors.full_messages).to include(I18n.t("chat.errors.duplicate_message"))
|
||||
end
|
||||
end
|
||||
@@ -526,30 +525,6 @@ describe Chat::Message do
|
||||
end
|
||||
end
|
||||
|
||||
describe "#attach_uploads" do
|
||||
fab!(:chat_message) { Fabricate(:chat_message) }
|
||||
fab!(:upload_1) { Fabricate(:upload) }
|
||||
fab!(:upload_2) { Fabricate(:upload) }
|
||||
|
||||
it "creates an UploadReference record for the provided uploads" do
|
||||
chat_message.attach_uploads([upload_1, upload_2])
|
||||
upload_references = UploadReference.where(upload_id: [upload_1, upload_2])
|
||||
expect(upload_references.count).to eq(2)
|
||||
expect(upload_references.map(&:target_id).uniq).to eq([chat_message.id])
|
||||
expect(upload_references.map(&:target_type).uniq).to eq([described_class.polymorphic_name])
|
||||
end
|
||||
|
||||
it "does nothing if the message record is new" do
|
||||
expect { described_class.new.attach_uploads([upload_1, upload_2]) }.to not_change {
|
||||
UploadReference.count
|
||||
}
|
||||
end
|
||||
|
||||
it "does nothing for an empty uploads array" do
|
||||
expect { chat_message.attach_uploads([]) }.to not_change { UploadReference.count }
|
||||
end
|
||||
end
|
||||
|
||||
describe "#create_mentions" do
|
||||
fab!(:message) { Fabricate(:chat_message) }
|
||||
fab!(:user1) { Fabricate(:user) }
|
||||
|
||||
@@ -21,7 +21,7 @@ RSpec.describe "Channel message selection", type: :system do
|
||||
chat_system_bootstrap
|
||||
channel_1.add(current_user)
|
||||
sign_in(current_user)
|
||||
message_1.attach_uploads([image])
|
||||
message_1.uploads = [image]
|
||||
end
|
||||
|
||||
it "can collapse/expand an image and still have lightbox working" do
|
||||
|
||||
Reference in New Issue
Block a user