FIX: Embedded comments should only return regular posts (#11773)

There shoudln't be a situation where you'd want to see moderator actions
or small posts.
This commit is contained in:
Robin Ward 2021-01-21 12:47:03 -05:00 committed by GitHub
parent fb9e422bd6
commit 53ab3dda5d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 22 additions and 1 deletions

View File

@ -74,6 +74,7 @@ class EmbedController < ApplicationController
@topic_view = TopicView.new(topic_id, @topic_view = TopicView.new(topic_id,
current_user, current_user,
limit: SiteSetting.embed_post_limit, limit: SiteSetting.embed_post_limit,
only_regular: true,
exclude_first: true, exclude_first: true,
exclude_deleted_users: true, exclude_deleted_users: true,
exclude_hidden: true) exclude_hidden: true)

View File

@ -686,8 +686,9 @@ class TopicView
end end
def filter_post_types(posts) def filter_post_types(posts)
visible_types = Topic.visible_post_types(@user) return posts.where(post_type: Post.types[:regular]) if @only_regular
visible_types = Topic.visible_post_types(@user)
if @user.present? if @user.present?
posts.where("posts.user_id = ? OR post_type IN (?)", @user.id, visible_types) posts.where("posts.user_id = ? OR post_type IN (?)", @user.id, visible_types)
else else

View File

@ -36,6 +36,25 @@ describe TopicView do
expect { TopicView.new(topic.id, admin) }.not_to raise_error expect { TopicView.new(topic.id, admin) }.not_to raise_error
end end
context "filter options" do
fab!(:p0) { Fabricate(:post, topic: topic) }
fab!(:p1) { Fabricate(:post, topic: topic, post_type: Post.types[:moderator_action]) }
fab!(:p2) { Fabricate(:post, topic: topic, post_type: Post.types[:small_action]) }
it "omits moderator actions and small posts when only_regular is set" do
tv = TopicView.new(topic.id, nil)
expect(tv.filtered_post_ids).to eq([p0.id, p1.id, p2.id])
tv = TopicView.new(topic.id, nil, only_regular: true)
expect(tv.filtered_post_ids).to eq([p0.id])
end
it "omits the first post when exclude_first is set" do
tv = TopicView.new(topic.id, nil, exclude_first: true)
expect(tv.filtered_post_ids).to eq([p0.id, p1.id, p2.id])
end
end
context "setup_filtered_posts" do context "setup_filtered_posts" do
describe "filters posts with ignored users" do describe "filters posts with ignored users" do
fab!(:ignored_user) { Fabricate(:ignored_user, user: evil_trout, ignored_user: user) } fab!(:ignored_user) { Fabricate(:ignored_user, user: evil_trout, ignored_user: user) }