From ea2833d0d89df9b48c4fc46e422f3e9b713cac00 Mon Sep 17 00:00:00 2001 From: Bianca Nenciu Date: Thu, 17 Jun 2021 11:53:29 +0300 Subject: [PATCH] FIX: Update post's raw from server response (#13414) The client used to update the raw, but sometimes the server changed the raw text, which resulted in false edit conflicts. --- app/assets/javascripts/discourse/app/models/composer.js | 5 ++--- app/controllers/posts_controller.rb | 2 +- spec/requests/posts_controller_spec.rb | 5 +++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/assets/javascripts/discourse/app/models/composer.js b/app/assets/javascripts/discourse/app/models/composer.js index e7911545a9c..36349ed1210 100644 --- a/app/assets/javascripts/discourse/app/models/composer.js +++ b/app/assets/javascripts/discourse/app/models/composer.js @@ -929,7 +929,6 @@ const Composer = RestModel.extend({ editPost(opts) { const post = this.post; - const oldRaw = post.raw; const oldCooked = post.cooked; let promise = Promise.resolve(); @@ -971,14 +970,14 @@ const Composer = RestModel.extend({ this.set("composeState", SAVING); const rollback = throwAjaxError((error) => { - post.setProperties({ raw: oldRaw, cooked: oldCooked }); + post.setProperties("cooked", oldCooked); this.set("composeState", OPEN); if (error.jqXHR && error.jqXHR.status === 409) { this.set("editConflict", true); } }); - post.setProperties({ raw: props.raw, cooked: props.cooked, staged: true }); + post.setProperties({ cooked: props.cooked, staged: true }); this.appEvents.trigger("post-stream:refresh", { id: post.id }); return promise diff --git a/app/controllers/posts_controller.rb b/app/controllers/posts_controller.rb index 981bd706211..c59a97b71c4 100644 --- a/app/controllers/posts_controller.rb +++ b/app/controllers/posts_controller.rb @@ -247,7 +247,7 @@ class PostsController < ApplicationController return render_json_error(post) if post.errors.present? return render_json_error(topic) if topic.errors.present? - post_serializer = PostSerializer.new(post, scope: guardian, root: false) + post_serializer = PostSerializer.new(post, scope: guardian, root: false, add_raw: true) post_serializer.draft_sequence = DraftSequence.current(current_user, topic.draft_key) link_counts = TopicLink.counts_for(guardian, topic, [post]) post_serializer.single_post_link_counts = link_counts[post.id] if link_counts.present? diff --git a/spec/requests/posts_controller_spec.rb b/spec/requests/posts_controller_spec.rb index 1e7f64f4731..a149ed697fc 100644 --- a/spec/requests/posts_controller_spec.rb +++ b/spec/requests/posts_controller_spec.rb @@ -415,10 +415,11 @@ describe PostsController do end it "updates post's raw attribute" do - put "/posts/#{post.id}.json", params: update_params + put "/posts/#{post.id}.json", params: { post: { raw: 'edited body ' } } expect(response.status).to eq(200) - expect(post.reload.raw).to eq(update_params[:post][:raw]) + expect(response.parsed_body['post']['raw']).to eq('edited body') + expect(post.reload.raw).to eq('edited body') end it "extracts links from the new body" do