mirror of
https://github.com/codeninjasllc/discourse.git
synced 2024-11-30 10:58:31 -05:00
FEATURE: when all posts in a topic are moved, close the topic
This commit is contained in:
parent
fd6bbc69e2
commit
98eee2b5de
2 changed files with 36 additions and 6 deletions
|
@ -41,12 +41,18 @@ class PostMover
|
||||||
Guardian.new(user).ensure_can_see! topic
|
Guardian.new(user).ensure_can_see! topic
|
||||||
@destination_topic = topic
|
@destination_topic = topic
|
||||||
|
|
||||||
|
moving_all_posts = (@original_topic.posts.pluck(:id).sort == @post_ids.sort)
|
||||||
|
|
||||||
move_each_post
|
move_each_post
|
||||||
notify_users_that_posts_have_moved
|
notify_users_that_posts_have_moved
|
||||||
update_statistics
|
update_statistics
|
||||||
update_user_actions
|
update_user_actions
|
||||||
set_last_post_user_id(destination_topic)
|
set_last_post_user_id(destination_topic)
|
||||||
|
|
||||||
|
if moving_all_posts
|
||||||
|
@original_topic.update_status('closed', true, @user)
|
||||||
|
end
|
||||||
|
|
||||||
destination_topic.reload
|
destination_topic.reload
|
||||||
destination_topic
|
destination_topic
|
||||||
end
|
end
|
||||||
|
|
|
@ -52,15 +52,16 @@ describe PostMover do
|
||||||
|
|
||||||
context "successfully moved" do
|
context "successfully moved" do
|
||||||
before do
|
before do
|
||||||
topic.expects(:add_moderator_post)
|
|
||||||
TopicUser.update_last_read(user, topic.id, p4.post_number, 0)
|
TopicUser.update_last_read(user, topic.id, p4.post_number, 0)
|
||||||
TopicLink.extract_from(p2)
|
TopicLink.extract_from(p2)
|
||||||
end
|
end
|
||||||
|
|
||||||
context "to a new topic" do
|
context "to a new topic" do
|
||||||
let!(:new_topic) { topic.move_posts(user, [p2.id, p4.id], title: "new testing topic name", category_id: category.id) }
|
|
||||||
|
|
||||||
it "works correctly" do
|
it "works correctly" do
|
||||||
|
topic.expects(:add_moderator_post).once
|
||||||
|
new_topic = topic.move_posts(user, [p2.id, p4.id], title: "new testing topic name", category_id: category.id)
|
||||||
|
|
||||||
expect(TopicUser.find_by(user_id: user.id, topic_id: topic.id).last_read_post_number).to eq(p3.post_number)
|
expect(TopicUser.find_by(user_id: user.id, topic_id: topic.id).last_read_post_number).to eq(p3.post_number)
|
||||||
|
|
||||||
expect(new_topic).to be_present
|
expect(new_topic).to be_present
|
||||||
|
@ -97,15 +98,24 @@ describe PostMover do
|
||||||
action = UserAction.find_by(user_id: another_user.id)
|
action = UserAction.find_by(user_id: another_user.id)
|
||||||
expect(action.target_topic_id).to eq(new_topic.id)
|
expect(action.target_topic_id).to eq(new_topic.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "moving all posts will close the topic" do
|
||||||
|
topic.expects(:add_moderator_post).twice
|
||||||
|
new_topic = topic.move_posts(user, [p1.id, p2.id, p3.id, p4.id], title: "new testing topic name", category_id: category.id)
|
||||||
|
expect(new_topic).to be_present
|
||||||
|
|
||||||
|
topic.reload
|
||||||
|
expect(topic.closed).to eq(true)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "to an existing topic" do
|
context "to an existing topic" do
|
||||||
|
|
||||||
let!(:destination_topic) { Fabricate(:topic, user: user ) }
|
let!(:destination_topic) { Fabricate(:topic, user: user ) }
|
||||||
let!(:destination_op) { Fabricate(:post, topic: destination_topic, user: user) }
|
let!(:destination_op) { Fabricate(:post, topic: destination_topic, user: user) }
|
||||||
let!(:moved_to) { topic.move_posts(user, [p2.id, p4.id], destination_topic_id: destination_topic.id)}
|
|
||||||
|
|
||||||
it "works correctly" do
|
it "works correctly" do
|
||||||
|
topic.expects(:add_moderator_post).once
|
||||||
|
moved_to = topic.move_posts(user, [p2.id, p4.id], destination_topic_id: destination_topic.id)
|
||||||
expect(moved_to).to eq(destination_topic)
|
expect(moved_to).to eq(destination_topic)
|
||||||
|
|
||||||
# Check out new topic
|
# Check out new topic
|
||||||
|
@ -144,13 +154,23 @@ describe PostMover do
|
||||||
# Should update last reads
|
# Should update last reads
|
||||||
expect(TopicUser.find_by(user_id: user.id, topic_id: topic.id).last_read_post_number).to eq(p3.post_number)
|
expect(TopicUser.find_by(user_id: user.id, topic_id: topic.id).last_read_post_number).to eq(p3.post_number)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "moving all posts will close the topic" do
|
||||||
|
topic.expects(:add_moderator_post).twice
|
||||||
|
moved_to = topic.move_posts(user, [p1.id, p2.id, p3.id, p4.id], destination_topic_id: destination_topic.id)
|
||||||
|
expect(moved_to).to be_present
|
||||||
|
|
||||||
|
topic.reload
|
||||||
|
expect(topic.closed).to eq(true)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "moving the first post" do
|
context "moving the first post" do
|
||||||
|
|
||||||
let!(:new_topic) { topic.move_posts(user, [p1.id, p2.id], title: "new testing topic name") }
|
|
||||||
|
|
||||||
it "copies the OP, doesn't delete it" do
|
it "copies the OP, doesn't delete it" do
|
||||||
|
topic.expects(:add_moderator_post).once
|
||||||
|
new_topic = topic.move_posts(user, [p1.id, p2.id], title: "new testing topic name")
|
||||||
|
|
||||||
expect(new_topic).to be_present
|
expect(new_topic).to be_present
|
||||||
new_topic.posts.reload
|
new_topic.posts.reload
|
||||||
expect(new_topic.posts.by_post_number.first.raw).to eq(p1.raw)
|
expect(new_topic.posts.by_post_number.first.raw).to eq(p1.raw)
|
||||||
|
@ -187,6 +207,10 @@ describe PostMover do
|
||||||
|
|
||||||
context "to an existing topic with a deleted post" do
|
context "to an existing topic with a deleted post" do
|
||||||
|
|
||||||
|
before do
|
||||||
|
topic.expects(:add_moderator_post)
|
||||||
|
end
|
||||||
|
|
||||||
let!(:destination_topic) { Fabricate(:topic, user: user ) }
|
let!(:destination_topic) { Fabricate(:topic, user: user ) }
|
||||||
let!(:destination_op) { Fabricate(:post, topic: destination_topic, user: user) }
|
let!(:destination_op) { Fabricate(:post, topic: destination_topic, user: user) }
|
||||||
let!(:destination_deleted_reply) { Fabricate(:post, topic: destination_topic, user: another_user) }
|
let!(:destination_deleted_reply) { Fabricate(:post, topic: destination_topic, user: another_user) }
|
||||||
|
|
Loading…
Reference in a new issue