diff --git a/app/models/post_mover.rb b/app/models/post_mover.rb index 2cd39b80ae5..facccc8ebd7 100644 --- a/app/models/post_mover.rb +++ b/app/models/post_mover.rb @@ -126,6 +126,7 @@ class PostMover move_incoming_emails move_notifications update_reply_counts + update_quotes move_first_post_replies delete_post_replies copy_first_post_timings @@ -256,6 +257,18 @@ class PostMover SQL end + def update_quotes + DB.exec <<~SQL + UPDATE posts p + SET raw = REPLACE(p.raw, + ', post:' || mp.old_post_number || ', topic:' || mp.old_topic_id, + ', post:' || mp.new_post_number || ', topic:' || mp.new_topic_id), + baked_version = NULL + FROM moved_posts mp, quoted_posts qp + WHERE p.id = qp.post_id AND mp.old_post_id = qp.quoted_post_id + SQL + end + def move_first_post_replies DB.exec <<~SQL UPDATE post_replies pr diff --git a/spec/models/post_mover_spec.rb b/spec/models/post_mover_spec.rb index 78c1cc72ade..42cf45098c0 100644 --- a/spec/models/post_mover_spec.rb +++ b/spec/models/post_mover_spec.rb @@ -90,6 +90,27 @@ describe PostMover do expect(move_message.post_type).to eq(Post.types[:small_action]) expect(move_message.raw).to include("3 posts were split") end + + it "correctly remaps quotes" do + raw = <<~RAW + [quote="dan, post:#{p2.post_number}, topic:#{p2.topic_id}, full:true"] + some quote from the other post + [/quote] + + the quote above should be updated with new post number and topic id + RAW + + p3.update!(raw: raw) + p3.rebake! + + expect { topic.move_posts(user, [p2.id], title: "new testing topic name") } + .to change { p2.reload.topic_id } + .and change { p2.post_number } + .and change { p3.reload.raw } + .and change { p3.baked_version }.to nil + + expect(p3.raw).to include("post:#{p2.post_number}, topic:#{p2.topic_id}") + end end context "errors" do