FEATURE: Count only approved flagged posts in user pages (#22799)
FEATURE: Only approved flags for post counters * Why was this change necessary? The counters for flagged posts in the user's profile and user index from the admin view include flags that were rejected, ignored or pending review. This introduces unnecessary noise. Also the flagged posts counter in the user's profile includes custom flags which add further noise to this signal. * How does it address the problem? * Modifying User#flags_received_count to return posts with only approved standard flags * Refactoring User#number_of_flagged_posts to alias to User#flags_received_count * Updating the flagged post staff counter hyperlink to navigate to a filtered view of that user's approved flagged posts to maintain consistency with the counter * Adding system tests for the profile page to cover the flagged posts staff counter
This commit is contained in:
parent
2f5e66b6f8
commit
5f0bc4557f
|
@ -734,7 +734,7 @@
|
||||||
@query={{hash
|
@query={{hash
|
||||||
username=this.model.username
|
username=this.model.username
|
||||||
type="ReviewableFlaggedPost"
|
type="ReviewableFlaggedPost"
|
||||||
status="all"
|
status="approved"
|
||||||
}}
|
}}
|
||||||
class="btn"
|
class="btn"
|
||||||
>
|
>
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
@route="review"
|
@route="review"
|
||||||
@query={{hash
|
@query={{hash
|
||||||
username=this.model.username
|
username=this.model.username
|
||||||
status="all"
|
status="approved"
|
||||||
type="ReviewableFlaggedPost"
|
type="ReviewableFlaggedPost"
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
|
|
|
@ -1202,13 +1202,6 @@ class User < ActiveRecord::Base
|
||||||
user_warnings.count
|
user_warnings.count
|
||||||
end
|
end
|
||||||
|
|
||||||
def flags_received_count
|
|
||||||
posts
|
|
||||||
.includes(:post_actions)
|
|
||||||
.where("post_actions.post_action_type_id" => PostActionType.flag_types_without_custom.values)
|
|
||||||
.count
|
|
||||||
end
|
|
||||||
|
|
||||||
def private_topics_count
|
def private_topics_count
|
||||||
topics_allowed.where(archetype: Archetype.private_message).count
|
topics_allowed.where(archetype: Archetype.private_message).count
|
||||||
end
|
end
|
||||||
|
@ -1539,8 +1532,14 @@ class User < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def number_of_flagged_posts
|
def number_of_flagged_posts
|
||||||
ReviewableFlaggedPost.where(target_created_by: self.id).count
|
posts
|
||||||
|
.with_deleted
|
||||||
|
.includes(:post_actions)
|
||||||
|
.where("post_actions.post_action_type_id" => PostActionType.flag_types_without_custom.values)
|
||||||
|
.where("post_actions.agreed_at IS NOT NULL")
|
||||||
|
.count
|
||||||
end
|
end
|
||||||
|
alias_method :flags_received_count, :number_of_flagged_posts
|
||||||
|
|
||||||
def number_of_rejected_posts
|
def number_of_rejected_posts
|
||||||
ReviewableQueuedPost.rejected.where(target_created_by_id: self.id).count
|
ReviewableQueuedPost.rejected.where(target_created_by_id: self.id).count
|
||||||
|
|
|
@ -2002,16 +2002,43 @@ RSpec.describe User do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "#number_of_flagged_posts" do
|
describe "#number_of_flagged_posts" do
|
||||||
it "counts flagged posts from the user" do
|
fab!(:admin) { Fabricate(:admin) }
|
||||||
Fabricate(:reviewable_flagged_post, target_created_by: user)
|
|
||||||
|
|
||||||
expect(user.number_of_flagged_posts).to eq(1)
|
it "counts only approved standard flagged posts from the user" do
|
||||||
|
%i[disagree ignore delete_and_ignore].each do |review_action|
|
||||||
|
PostActionCreator
|
||||||
|
.off_topic(admin, Fabricate(:post, user: user))
|
||||||
|
.reviewable
|
||||||
|
.perform(admin, review_action)
|
||||||
|
end
|
||||||
|
%i[agree_and_keep delete_and_agree].each do |approval_action|
|
||||||
|
PostActionCreator
|
||||||
|
.off_topic(admin, Fabricate(:post, user: user))
|
||||||
|
.reviewable
|
||||||
|
.perform(admin, approval_action)
|
||||||
|
end
|
||||||
|
|
||||||
|
expect(user.number_of_flagged_posts).to eq 2
|
||||||
|
end
|
||||||
|
|
||||||
|
it "ignores custom flags from the user" do
|
||||||
|
PostActionCreator
|
||||||
|
.notify_moderators(admin, Fabricate(:post, user: user))
|
||||||
|
.reviewable
|
||||||
|
.perform(admin, :agree_and_keep)
|
||||||
|
expect(user.number_of_flagged_posts).to be_zero
|
||||||
end
|
end
|
||||||
|
|
||||||
it "ignores flagged posts from another user" do
|
it "ignores flagged posts from another user" do
|
||||||
Fabricate(:reviewable_flagged_post, target_created_by: Fabricate(:user))
|
other_user = Fabricate(:user)
|
||||||
|
%i[disagree ignore delete_and_ignore agree_and_keep].each do |review_action|
|
||||||
|
PostActionCreator
|
||||||
|
.off_topic(admin, Fabricate(:post, user: other_user))
|
||||||
|
.reviewable
|
||||||
|
.perform(admin, review_action)
|
||||||
|
end
|
||||||
|
|
||||||
expect(user.number_of_flagged_posts).to eq(0)
|
expect(user.number_of_flagged_posts).to be_zero
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -35,6 +35,28 @@ module PageObjects
|
||||||
button.click if button["aria-expanded"] == "false"
|
button.click if button["aria-expanded"] == "false"
|
||||||
self
|
self
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def has_reviewable_flagged_posts_path?(user)
|
||||||
|
params = {
|
||||||
|
status: "approved",
|
||||||
|
sort_order: "score",
|
||||||
|
type: "ReviewableFlaggedPost",
|
||||||
|
username: user.username,
|
||||||
|
}
|
||||||
|
page.has_current_path?("/review?#{params.to_query}")
|
||||||
|
end
|
||||||
|
|
||||||
|
def staff_info_flagged_posts_counter
|
||||||
|
page.find(".staff-counters .flagged-posts")
|
||||||
|
end
|
||||||
|
|
||||||
|
def has_staff_info_flagged_posts_count?(count:)
|
||||||
|
staff_info_flagged_posts_counter.text.to_i == count
|
||||||
|
end
|
||||||
|
|
||||||
|
def has_no_staff_info_flagged_posts_counter?
|
||||||
|
page.has_no_css?(".staff-counters .flagged-posts")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -17,4 +17,43 @@ describe "Viewing user staff info as an admin", type: :system do
|
||||||
expect(user_page).to have_warning_messages_path(user)
|
expect(user_page).to have_warning_messages_path(user)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "for flagged posts" do
|
||||||
|
before do
|
||||||
|
%i[disagree ignore delete_and_ignore].each do |review_action|
|
||||||
|
PostActionCreator
|
||||||
|
.off_topic(admin, Fabricate(:post, user: user))
|
||||||
|
.reviewable
|
||||||
|
.perform(admin, review_action)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when there are no approved flagged posts" do
|
||||||
|
it "should not display a flagged-posts staff counter" do
|
||||||
|
user_page.visit(user)
|
||||||
|
expect(user_page).to have_no_staff_info_flagged_posts_counter
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when there are approved flagged posts" do
|
||||||
|
before do
|
||||||
|
2.times do
|
||||||
|
PostActionCreator
|
||||||
|
.off_topic(admin, Fabricate(:post, user: user))
|
||||||
|
.reviewable
|
||||||
|
.perform(admin, :agree_and_keep)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should display a flagged-posts staff counter with the right count and link to user's flagged posts" do
|
||||||
|
user_page.visit(user)
|
||||||
|
|
||||||
|
expect(user_page).to have_staff_info_flagged_posts_count(count: 2)
|
||||||
|
|
||||||
|
user_page.staff_info_flagged_posts_counter.click
|
||||||
|
|
||||||
|
expect(user_page).to have_reviewable_flagged_posts_path(user)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue