FIX: exclude moderator_action post for reply count in user summary. (#14991)
Previously, incorrect reply counts are displayed in the "top categories" section of the user summary page since we included the `moderator_action` and `small_action` post types. Co-authored-by: Alan Guo Xiang Tan <gxtan1990@gmail.com>
This commit is contained in:
parent
20f5474be9
commit
fc1c76cfcc
|
@ -392,9 +392,10 @@ class Topic < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.visible_post_types(viewed_by = nil)
|
def self.visible_post_types(viewed_by = nil, include_moderator_actions: true)
|
||||||
types = Post.types
|
types = Post.types
|
||||||
result = [types[:regular], types[:moderator_action], types[:small_action]]
|
result = [types[:regular]]
|
||||||
|
result += [types[:moderator_action], types[:small_action]] if include_moderator_actions
|
||||||
result << types[:whisper] if viewed_by&.staff?
|
result << types[:whisper] if viewed_by&.staff?
|
||||||
result
|
result
|
||||||
end
|
end
|
||||||
|
|
|
@ -25,12 +25,7 @@ class UserSummary
|
||||||
end
|
end
|
||||||
|
|
||||||
def replies
|
def replies
|
||||||
Post
|
post_query
|
||||||
.joins(:topic)
|
|
||||||
.includes(:topic)
|
|
||||||
.secured(@guardian)
|
|
||||||
.merge(Topic.listable_topics.visible.secured(@guardian))
|
|
||||||
.where(user: @user)
|
|
||||||
.where('post_number > 1')
|
.where('post_number > 1')
|
||||||
.order('posts.like_count DESC, posts.created_at DESC')
|
.order('posts.like_count DESC, posts.created_at DESC')
|
||||||
.limit(MAX_SUMMARY_RESULTS)
|
.limit(MAX_SUMMARY_RESULTS)
|
||||||
|
@ -88,13 +83,8 @@ class UserSummary
|
||||||
def most_replied_to_users
|
def most_replied_to_users
|
||||||
replied_users = {}
|
replied_users = {}
|
||||||
|
|
||||||
Post
|
post_query
|
||||||
.joins(:topic)
|
|
||||||
.joins('JOIN posts replies ON posts.topic_id = replies.topic_id AND posts.reply_to_post_number = replies.post_number')
|
.joins('JOIN posts replies ON posts.topic_id = replies.topic_id AND posts.reply_to_post_number = replies.post_number')
|
||||||
.includes(:topic)
|
|
||||||
.secured(@guardian)
|
|
||||||
.merge(Topic.listable_topics.visible.secured(@guardian))
|
|
||||||
.where(user: @user)
|
|
||||||
.where('replies.user_id <> ?', @user.id)
|
.where('replies.user_id <> ?', @user.id)
|
||||||
.group('replies.user_id')
|
.group('replies.user_id')
|
||||||
.order('COUNT(*) DESC')
|
.order('COUNT(*) DESC')
|
||||||
|
@ -135,13 +125,7 @@ class UserSummary
|
||||||
end
|
end
|
||||||
|
|
||||||
def top_categories
|
def top_categories
|
||||||
post_count_query = Post
|
post_count_query = post_query.group('topics.category_id')
|
||||||
.joins(:topic)
|
|
||||||
.includes(:topic)
|
|
||||||
.secured(@guardian)
|
|
||||||
.merge(Topic.listable_topics.visible.secured(@guardian))
|
|
||||||
.where(user: @user)
|
|
||||||
.group('topics.category_id')
|
|
||||||
|
|
||||||
top_categories = {}
|
top_categories = {}
|
||||||
|
|
||||||
|
@ -211,4 +195,13 @@ protected
|
||||||
end.compact.sort_by { |u| -u[:count] }
|
end.compact.sort_by { |u| -u[:count] }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def post_query
|
||||||
|
Post
|
||||||
|
.joins(:topic)
|
||||||
|
.includes(:topic)
|
||||||
|
.where('posts.post_type IN (?)', Topic.visible_post_types(@guardian&.user, include_moderator_actions: false))
|
||||||
|
.merge(Topic.listable_topics.visible.secured(@guardian))
|
||||||
|
.where(user: @user)
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -78,4 +78,19 @@ describe UserSummary do
|
||||||
expect(summary.top_categories.length).to eq(UserSummary::MAX_SUMMARY_RESULTS)
|
expect(summary.top_categories.length).to eq(UserSummary::MAX_SUMMARY_RESULTS)
|
||||||
expect(summary.top_categories.first[:id]).to eq(top_category.id)
|
expect(summary.top_categories.first[:id]).to eq(top_category.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "excludes moderator action posts" do
|
||||||
|
topic = create_post.topic
|
||||||
|
user = topic.user
|
||||||
|
create_post(user: user, topic: topic)
|
||||||
|
Fabricate(:small_action, topic: topic, user: user)
|
||||||
|
|
||||||
|
summary = UserSummary.new(user, Guardian.new)
|
||||||
|
|
||||||
|
expect(summary.topics.length).to eq(1)
|
||||||
|
expect(summary.replies.length).to eq(1)
|
||||||
|
expect(summary.top_categories.length).to eq(1)
|
||||||
|
expect(summary.top_categories.first[:topic_count]).to eq(1)
|
||||||
|
expect(summary.top_categories.first[:post_count]).to eq(1)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue