From 8aea3caf00e033dc15a1f1bff444670a29931601 Mon Sep 17 00:00:00 2001
From: Guo Xiang Tan <tgx_world@hotmail.com>
Date: Mon, 6 Mar 2017 15:04:10 +0800
Subject: [PATCH] FIX: Ensure that we only move posts that belong to the
 original topic.

---
 app/models/post_mover.rb       |  2 +-
 spec/models/post_mover_spec.rb | 23 ++++++++++++++++++++---
 2 files changed, 21 insertions(+), 4 deletions(-)

diff --git a/app/models/post_mover.rb b/app/models/post_mover.rb
index fdd972322ca..78a19ba1793 100644
--- a/app/models/post_mover.rb
+++ b/app/models/post_mover.rb
@@ -157,7 +157,7 @@ class PostMover
 
   def posts
     @posts ||= begin
-      Post.where(id: post_ids).order(:created_at).tap do |posts|
+      Post.where(topic: @original_topic, id: post_ids).order(:created_at).tap do |posts|
         raise Discourse::InvalidParameters.new(:post_ids) if posts.empty?
       end
     end
diff --git a/spec/models/post_mover_spec.rb b/spec/models/post_mover_spec.rb
index bb606ef791b..87d9384c8c3 100644
--- a/spec/models/post_mover_spec.rb
+++ b/spec/models/post_mover_spec.rb
@@ -24,9 +24,18 @@ describe PostMover do
     let(:category) { Fabricate(:category, user: user) }
     let!(:topic) { Fabricate(:topic, user: user) }
     let!(:p1) { Fabricate(:post, topic: topic, user: user) }
-    let!(:p2) { Fabricate(:post, topic: topic, user: another_user, raw: "Has a link to [evil trout](http://eviltrout.com) which is a cool site.", reply_to_post_number: p1.post_number)}
-    let!(:p3) { Fabricate(:post, topic: topic, reply_to_post_number: p1.post_number, user: user)}
-    let!(:p4) { Fabricate(:post, topic: topic, reply_to_post_number: p2.post_number, user: user)}
+
+    let!(:p2) do
+      Fabricate(:post,
+        topic: topic,
+        user: another_user,
+        raw: "Has a link to [evil trout](http://eviltrout.com) which is a cool site.",
+        reply_to_post_number: p1.post_number)
+    end
+
+    let!(:p3) { Fabricate(:post, topic: topic, reply_to_post_number: p1.post_number, user: user) }
+    let!(:p4) { Fabricate(:post, topic: topic, reply_to_post_number: p2.post_number, user: user) }
+    let!(:p5) { Fabricate(:post) }
 
     before do
       p1.replies << p3
@@ -191,6 +200,14 @@ describe PostMover do
           topic.reload
           expect(topic.closed).to eq(true)
         end
+
+        it 'does not move posts that do not belong to the existing topic' do
+          new_topic = topic.move_posts(
+            user, [p2.id, p3.id, p5.id], title: 'Logan is a pretty good movie'
+          )
+
+          expect(new_topic.posts.pluck(:id)).to eq([p2.id, p3.id])
+        end
       end
 
       context "to an existing topic" do