FIX: Topic map was incorrectly counting assign actions (#10360)

The assign plugin is one of two situations where a post can be both a whisper and a small-action. Check the action_code field to filter out small-actions.
This commit is contained in:
Kane York 2020-08-04 18:51:28 -07:00 committed by GitHub
parent f78792c779
commit 13feb300a8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 4 additions and 6 deletions

View File

@ -366,11 +366,6 @@ class TopicView
if is_mega_topic? if is_mega_topic?
{} {}
else else
post_types = [Post.types[:regular], Post.types[:moderator_action]]
if @guardian.can_see_whispers?(@topic)
post_types << Post.types[:whisper]
end
sql = <<~SQL sql = <<~SQL
SELECT user_id, count(*) AS count_all SELECT user_id, count(*) AS count_all
FROM posts FROM posts
@ -378,12 +373,13 @@ class TopicView
AND post_type IN (:post_types) AND post_type IN (:post_types)
AND user_id IS NOT NULL AND user_id IS NOT NULL
AND posts.deleted_at IS NULL AND posts.deleted_at IS NULL
AND action_code IS NULL
GROUP BY user_id GROUP BY user_id
ORDER BY count_all DESC ORDER BY count_all DESC
LIMIT #{MAX_PARTICIPANTS} LIMIT #{MAX_PARTICIPANTS}
SQL SQL
Hash[*DB.query_single(sql, topic_id: @topic.id, post_types: post_types)] Hash[*DB.query_single(sql, topic_id: @topic.id, post_types: Topic.visible_post_types(@guardian&.user))]
end end
end end
end end

View File

@ -286,6 +286,8 @@ describe TopicView do
context '.post_counts_by_user' do context '.post_counts_by_user' do
it 'returns the two posters with their appropriate counts' do it 'returns the two posters with their appropriate counts' do
Fabricate(:post, topic: topic, user: evil_trout, post_type: Post.types[:whisper]) Fabricate(:post, topic: topic, user: evil_trout, post_type: Post.types[:whisper])
# Should not be counted
Fabricate(:post, topic: topic, user: evil_trout, post_type: Post.types[:whisper], action_code: 'assign')
expect(TopicView.new(topic.id, admin).post_counts_by_user.to_a).to match_array([[first_poster.id, 2], [evil_trout.id, 2]]) expect(TopicView.new(topic.id, admin).post_counts_by_user.to_a).to match_array([[first_poster.id, 2], [evil_trout.id, 2]])