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