mirror of
https://github.com/discourse/discourse.git
synced 2024-11-23 09:26:54 -06:00
FIX: DiscourseEvent should not be triggered from within the controller.
This commit is contained in:
parent
ec90655c41
commit
aabb7a8592
@ -342,8 +342,6 @@ class TopicsController < ApplicationController
|
||||
first_post = topic.ordered_posts.first
|
||||
PostDestroyer.new(current_user, first_post, { context: params[:context] }).destroy
|
||||
|
||||
DiscourseEvent.trigger(:topic_destroyed, topic, current_user)
|
||||
|
||||
render nothing: true
|
||||
end
|
||||
|
||||
@ -354,8 +352,6 @@ class TopicsController < ApplicationController
|
||||
first_post = topic.posts.with_deleted.order(:post_number).first
|
||||
PostDestroyer.new(current_user, first_post).recover
|
||||
|
||||
DiscourseEvent.trigger(:topic_recovered, topic, current_user)
|
||||
|
||||
render nothing: true
|
||||
end
|
||||
|
||||
|
@ -47,6 +47,7 @@ class PostDestroyer
|
||||
mark_for_deletion
|
||||
end
|
||||
DiscourseEvent.trigger(:post_destroyed, @post, @opts, @user)
|
||||
DiscourseEvent.trigger(:topic_destroyed, @topic, @user) if @post.is_first_post?
|
||||
end
|
||||
|
||||
def recover
|
||||
@ -60,6 +61,7 @@ class PostDestroyer
|
||||
topic.update_statistics
|
||||
recover_user_actions
|
||||
DiscourseEvent.trigger(:post_recovered, @post, @opts, @user)
|
||||
DiscourseEvent.trigger(:topic_recovered, topic, @user) if @post.is_first_post?
|
||||
end
|
||||
|
||||
def staff_recovered
|
||||
|
@ -193,27 +193,50 @@ describe PostDestroyer do
|
||||
end
|
||||
|
||||
describe 'basic destroying' do
|
||||
|
||||
it "as the creator of the post, doesn't delete the post" do
|
||||
post2 = create_post
|
||||
begin
|
||||
post2 = create_post
|
||||
|
||||
@orig = post2.cooked
|
||||
PostDestroyer.new(post2.user, post2).destroy
|
||||
post2.reload
|
||||
called = 0
|
||||
topic_destroyed = -> (topic, user) do
|
||||
expect(topic).to eq(post2.topic)
|
||||
expect(user).to eq(post2.user)
|
||||
called += 1
|
||||
end
|
||||
|
||||
expect(post2.deleted_at).to be_blank
|
||||
expect(post2.deleted_by).to be_blank
|
||||
expect(post2.user_deleted).to eq(true)
|
||||
expect(post2.raw).to eq(I18n.t('js.post.deleted_by_author', {count: 24}))
|
||||
expect(post2.version).to eq(2)
|
||||
DiscourseEvent.on(:topic_destroyed, &topic_destroyed)
|
||||
|
||||
# lets try to recover
|
||||
PostDestroyer.new(post2.user, post2).recover
|
||||
post2.reload
|
||||
expect(post2.version).to eq(3)
|
||||
expect(post2.user_deleted).to eq(false)
|
||||
expect(post2.cooked).to eq(@orig)
|
||||
@orig = post2.cooked
|
||||
PostDestroyer.new(post2.user, post2).destroy
|
||||
post2.reload
|
||||
|
||||
expect(post2.deleted_at).to be_blank
|
||||
expect(post2.deleted_by).to be_blank
|
||||
expect(post2.user_deleted).to eq(true)
|
||||
expect(post2.raw).to eq(I18n.t('js.post.deleted_by_author', {count: 24}))
|
||||
expect(post2.version).to eq(2)
|
||||
expect(called).to eq(1)
|
||||
|
||||
called = 0
|
||||
topic_recovered = -> (topic, user) do
|
||||
expect(topic).to eq(post2.topic)
|
||||
expect(user).to eq(post2.user)
|
||||
called += 1
|
||||
end
|
||||
|
||||
DiscourseEvent.on(:topic_recovered, &topic_recovered)
|
||||
|
||||
# lets try to recover
|
||||
PostDestroyer.new(post2.user, post2).recover
|
||||
post2.reload
|
||||
expect(post2.version).to eq(3)
|
||||
expect(post2.user_deleted).to eq(false)
|
||||
expect(post2.cooked).to eq(@orig)
|
||||
expect(called).to eq(1)
|
||||
ensure
|
||||
DiscourseEvent.off(:topic_destroyed, &topic_destroyed)
|
||||
DiscourseEvent.off(:topic_recovered, &topic_recovered)
|
||||
end
|
||||
end
|
||||
|
||||
context "as a moderator" do
|
||||
|
Loading…
Reference in New Issue
Block a user