From 93201d8dbec8cfd9531743f55f43ae0445ecfb0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9gis=20Hanol?= Date: Thu, 16 Aug 2018 18:11:29 +0200 Subject: [PATCH] FIX: don't trigger 'flag_reviewed' when no flags were reviewed --- app/models/post_action.rb | 21 +++++++++++++++------ spec/integration/flags_spec.rb | 18 ++++++++++++++++++ spec/models/post_action_spec.rb | 21 ++++++++++++--------- 3 files changed, 45 insertions(+), 15 deletions(-) create mode 100644 spec/integration/flags_spec.rb diff --git a/app/models/post_action.rb b/app/models/post_action.rb index e4bf8986f7a..bda0d9f2231 100644 --- a/app/models/post_action.rb +++ b/app/models/post_action.rb @@ -165,8 +165,11 @@ class PostAction < ActiveRecord::Base end DiscourseEvent.trigger(:confirmed_spam_post, post) if trigger_spam - DiscourseEvent.trigger(:flag_reviewed, post) - DiscourseEvent.trigger(:flag_agreed, actions.first) if actions.first.present? + + if actions.first.present? + DiscourseEvent.trigger(:flag_reviewed, post) + DiscourseEvent.trigger(:flag_agreed, actions.first) + end update_flagged_posts_count end @@ -199,8 +202,11 @@ class PostAction < ActiveRecord::Base end Post.with_deleted.where(id: post.id).update_all(cached) - DiscourseEvent.trigger(:flag_reviewed, post) - DiscourseEvent.trigger(:flag_disagreed, actions.first) if actions.first.present? + + if actions.first.present? + DiscourseEvent.trigger(:flag_reviewed, post) + DiscourseEvent.trigger(:flag_disagreed, actions.first) + end update_flagged_posts_count end @@ -218,8 +224,11 @@ class PostAction < ActiveRecord::Base action.add_moderator_post_if_needed(moderator, :deferred, delete_post) end - DiscourseEvent.trigger(:flag_reviewed, post) - DiscourseEvent.trigger(:flag_deferred, actions.first) if actions.first.present? + if actions.first.present? + DiscourseEvent.trigger(:flag_reviewed, post) + DiscourseEvent.trigger(:flag_deferred, actions.first) + end + update_flagged_posts_count end diff --git a/spec/integration/flags_spec.rb b/spec/integration/flags_spec.rb new file mode 100644 index 00000000000..76a303a2f3e --- /dev/null +++ b/spec/integration/flags_spec.rb @@ -0,0 +1,18 @@ +require "rails_helper" + +describe PostAction do + + it "triggers the 'flag_reviewed' event when there was at least one flag" do + admin = Fabricate(:admin) + + post = Fabricate(:post) + events = DiscourseEvent.track_events { PostDestroyer.new(admin, post).destroy } + expect(events.map { |e| e[:event_name] }).to_not include(:flag_reviewed) + + flagged_post = Fabricate(:post) + PostAction.act(admin, flagged_post, PostActionType.types[:spam]) + events = DiscourseEvent.track_events { PostDestroyer.new(admin, flagged_post).destroy } + expect(events.map { |e| e[:event_name] }).to include(:flag_reviewed) + end + +end diff --git a/spec/models/post_action_spec.rb b/spec/models/post_action_spec.rb index 0659c327682..e616bd1eb13 100644 --- a/spec/models/post_action_spec.rb +++ b/spec/models/post_action_spec.rb @@ -754,21 +754,24 @@ describe PostAction do end it 'flag agreed' do - event = DiscourseEvent.track_events { PostAction.agree_flags!(post, moderator) }.last - expect(event[:event_name]).to eq(:flag_agreed) - expect(event[:params].first).to eq(@flag) + events = DiscourseEvent.track_events { PostAction.agree_flags!(post, moderator) }.last(2) + expect(events[0][:event_name]).to eq(:flag_reviewed) + expect(events[1][:event_name]).to eq(:flag_agreed) + expect(events[1][:params].first).to eq(@flag) end it 'flag disagreed' do - event = DiscourseEvent.track_events { PostAction.clear_flags!(post, moderator) }.last - expect(event[:event_name]).to eq(:flag_disagreed) - expect(event[:params].first).to eq(@flag) + events = DiscourseEvent.track_events { PostAction.clear_flags!(post, moderator) }.last(2) + expect(events[0][:event_name]).to eq(:flag_reviewed) + expect(events[1][:event_name]).to eq(:flag_disagreed) + expect(events[1][:params].first).to eq(@flag) end it 'flag deferred' do - event = DiscourseEvent.track_events { PostAction.defer_flags!(post, moderator) }.last - expect(event[:event_name]).to eq(:flag_deferred) - expect(event[:params].first).to eq(@flag) + events = DiscourseEvent.track_events { PostAction.defer_flags!(post, moderator) }.last(2) + expect(events[0][:event_name]).to eq(:flag_reviewed) + expect(events[1][:event_name]).to eq(:flag_deferred) + expect(events[1][:params].first).to eq(@flag) end end end