posts: fixup flagger: metatag.

Fix regression in 01a22930e.
This commit is contained in:
evazion
2022-04-06 23:48:41 -05:00
parent 01a22930e7
commit 86de5cb5d2
3 changed files with 22 additions and 6 deletions

View File

@@ -215,7 +215,7 @@ class PostQueryBuilder
when "approver"
relation.approver_matches(value)
when "flagger"
relation.flagger_matches(value)
relation.flagger_matches(value, current_user)
when "appealer"
relation.user_subquery_matches(PostAppeal.unscoped, value)
when "commenter", "comm"

View File

@@ -1311,7 +1311,7 @@ class Post < ApplicationRecord
end
end
def flagger_matches(username)
def flagger_matches(username, current_user)
flags = PostFlag.unscoped.category_matches("normal")
user_subquery_matches(flags, username) do |username|
@@ -1323,9 +1323,9 @@ class Post < ApplicationRecord
def user_subquery_matches(subquery, username, field: :creator, &block)
subquery = subquery.where("post_id = posts.id").select(1)
if username == "any"
if username.downcase == "any"
where("EXISTS (#{subquery.to_sql})")
elsif username == "none"
elsif username.downcase == "none"
where("NOT EXISTS (#{subquery.to_sql})")
elsif block.nil?
user = User.find_by_name(username)

View File

@@ -1,8 +1,8 @@
require 'test_helper'
class PostQueryBuilderTest < ActiveSupport::TestCase
def assert_tag_match(posts, query, **options)
assert_equal(posts.map(&:id), Post.user_tag_match(query, CurrentUser.user, **options).pluck(:id))
def assert_tag_match(posts, query, current_user: CurrentUser.user, **options)
assert_equal(posts.map(&:id), Post.user_tag_match(query, current_user, **options).pluck(:id))
end
def assert_fast_count(count, query, query_options = {}, fast_count_options = {})
@@ -451,6 +451,22 @@ class PostQueryBuilderTest < ActiveSupport::TestCase
assert_tag_match([], "approver:does_not_exist")
end
should "return posts for the flagger:<name> metatag" do
posts = create_list(:post, 2)
flag = create(:post_flag, post: posts[0])
assert_tag_match([posts[0]], "flagger:#{flag.creator.name}", current_user: flag.creator)
assert_tag_match([posts[1]], "-flagger:#{flag.creator.name}", current_user: flag.creator)
assert_tag_match([], "flagger:#{flag.creator.name}", current_user: User.anonymous)
assert_tag_match([posts[1], posts[0]], "-flagger:#{flag.creator.name}", current_user: User.anonymous)
assert_tag_match([posts[0]], "flagger:any")
assert_tag_match([posts[1]], "flagger:none")
assert_tag_match([posts[1]], "flagger:NONE")
assert_tag_match([], "flagger:does_not_exist")
end
should "return posts for the commenter:<name> metatag" do
users = create_list(:user, 2, created_at: 2.weeks.ago)
posts = create_list(:post, 2)