From db9aea34dead1b230e44b4235ff8af8100108b7f Mon Sep 17 00:00:00 2001
From: valerauko <vale@valerauko.net>
Date: Mon, 26 Nov 2018 00:35:21 +0900
Subject: [PATCH] Ensure replied-to is a status not a boost (#9129)

* Ensure replied-to is a status not a boost

* Consider case of not a reply

* Add test case for replying to boost

* Move reblog-reply resolution to model

* Remove unnecessary comment
---
 app/models/status.rb                      |  2 ++
 spec/services/post_status_service_spec.rb | 13 +++++++++++++
 2 files changed, 15 insertions(+)

diff --git a/app/models/status.rb b/app/models/status.rb
index 0449d33e1..2e894a6f1 100644
--- a/app/models/status.rb
+++ b/app/models/status.rb
@@ -445,6 +445,8 @@ class Status < ApplicationRecord
   end
 
   def set_conversation
+    self.thread = thread.reblog if thread&.reblog?
+
     self.reply = !(in_reply_to_id.nil? && thread.nil?) unless reply
 
     if reply? && !thread.nil?
diff --git a/spec/services/post_status_service_spec.rb b/spec/services/post_status_service_spec.rb
index 40fa8fbef..349ad861b 100644
--- a/spec/services/post_status_service_spec.rb
+++ b/spec/services/post_status_service_spec.rb
@@ -25,6 +25,19 @@ RSpec.describe PostStatusService, type: :service do
     expect(status.thread).to eq in_reply_to_status
   end
 
+  it 'creates response to the original status of boost' do
+    boosted_status = Fabricate(:status)
+    in_reply_to_status = Fabricate(:status, reblog: boosted_status)
+    account = Fabricate(:account)
+    text = "test status update"
+
+    status = subject.call(account, text, in_reply_to_status)
+
+    expect(status).to be_persisted
+    expect(status.text).to eq text
+    expect(status.thread).to eq boosted_status
+  end
+
   it 'creates a sensitive status' do
     status = create_status_with_options(sensitive: true)