From b5236591e9c1910267ec870cf6635c2a3dd084e9 Mon Sep 17 00:00:00 2001 From: Jarek Radosz Date: Mon, 9 Dec 2019 19:55:08 +0100 Subject: [PATCH] FIX: Don't try to create an empty tag when updating a topic (#8481) Fixes an issue where updates to the first post in a topic would be visible only for staff. Before, because the empty tag would find its way to `PostRevisor`, `TopicsController#update` would create a hidden revision, and later `PostsController#update` would only update that revision. After this change, `TopicsController` doesn't create a revision at all (unless necessary), so `PostsController` can create it (and correctly decide whether the revision should be hidden or not). --- app/assets/javascripts/discourse/models/topic.js.es6 | 12 +++++------- test/javascripts/helpers/create-pretender.js.es6 | 8 +++++++- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/app/assets/javascripts/discourse/models/topic.js.es6 b/app/assets/javascripts/discourse/models/topic.js.es6 index d95f8334b85..c392bc20ef6 100644 --- a/app/assets/javascripts/discourse/models/topic.js.es6 +++ b/app/assets/javascripts/discourse/models/topic.js.es6 @@ -660,8 +660,6 @@ Topic.reopenClass({ }, update(topic, props) { - props = JSON.parse(JSON.stringify(props)) || {}; - // We support `category_id` and `categoryId` for compatibility if (typeof props.categoryId !== "undefined") { props.category_id = props.categoryId; @@ -673,11 +671,11 @@ Topic.reopenClass({ delete props.category_id; } - if (props.tags && props.tags.length === 0) { - props.tags = [""]; - } - - return ajax(topic.get("url"), { type: "PUT", data: props }).then(result => { + return ajax(topic.get("url"), { + type: "PUT", + data: JSON.stringify(props), + contentType: "application/json" + }).then(result => { // The title can be cleaned up server side props.title = result.basic_topic.title; props.fancy_title = result.basic_topic.fancy_title; diff --git a/test/javascripts/helpers/create-pretender.js.es6 b/test/javascripts/helpers/create-pretender.js.es6 index 95a63b0e09f..81a530581ea 100644 --- a/test/javascripts/helpers/create-pretender.js.es6 +++ b/test/javascripts/helpers/create-pretender.js.es6 @@ -397,7 +397,13 @@ export default function() { this.get("/t/500.json", () => response(502, {})); this.put("/t/:slug/:id", request => { - const data = parsePostData(request.requestBody); + const isJSON = request.requestHeaders["Content-Type"].includes( + "application/json" + ); + + const data = isJSON + ? JSON.parse(request.requestBody) + : parsePostData(request.requestBody); return response(200, { basic_topic: {