mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
FIX: Ensure uploads are linked to post when revising a post
Editing a post didn't update the `post_uploads` right away. Instead it relied on the `CookedPostProcessor`. This can lead to an inconsistent state if uploads are added or removed during an edit and, for some reason, the `ProcessPost` job doesn't run (successfully). This inconsistency leads to missing uploads, because the newly added uploads appear to be unused and will be deleted by the `CleanUpUploads` job. In addition to that, uploads, which got removed during the edit, appear to be still in use and won't be deleted by the background job. This commit ensures that the `post_uploads` are updated during the edit without relying on a background job.
This commit is contained in:
@@ -386,6 +386,7 @@ class PostRevisor
|
||||
@post.extract_quoted_post_numbers
|
||||
|
||||
@post_successfully_saved = @post.save(validate: @validate_post)
|
||||
@post.link_post_uploads
|
||||
@post.save_reply_relationships
|
||||
|
||||
# post owner changed
|
||||
|
||||
@@ -951,5 +951,37 @@ describe PostRevisor do
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "uploads" do
|
||||
let(:image1) { Fabricate(:upload) }
|
||||
let(:image2) { Fabricate(:upload) }
|
||||
let(:image3) { Fabricate(:upload) }
|
||||
let(:image4) { Fabricate(:upload) }
|
||||
let(:post_args) do
|
||||
{
|
||||
user: user,
|
||||
topic: topic,
|
||||
raw: <<~RAW
|
||||
This is a post with multiple uploads
|
||||

|
||||

|
||||
RAW
|
||||
}
|
||||
end
|
||||
|
||||
it "updates linked post uploads" do
|
||||
post.link_post_uploads
|
||||
expect(post.post_uploads.pluck(:upload_id)).to contain_exactly(image1.id, image2.id)
|
||||
|
||||
subject.revise!(user, raw: <<~RAW)
|
||||
This is a post with multiple uploads
|
||||

|
||||

|
||||

|
||||
RAW
|
||||
|
||||
expect(post.reload.post_uploads.pluck(:upload_id)).to contain_exactly(image2.id, image3.id, image4.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user