@@ -215,7 +215,7 @@ class PostQueryBuilder
|
|||||||
when "approver"
|
when "approver"
|
||||||
relation.approver_matches(value)
|
relation.approver_matches(value)
|
||||||
when "flagger"
|
when "flagger"
|
||||||
relation.flagger_matches(value)
|
relation.flagger_matches(value, current_user)
|
||||||
when "appealer"
|
when "appealer"
|
||||||
relation.user_subquery_matches(PostAppeal.unscoped, value)
|
relation.user_subquery_matches(PostAppeal.unscoped, value)
|
||||||
when "commenter", "comm"
|
when "commenter", "comm"
|
||||||
|
|||||||
@@ -1311,7 +1311,7 @@ class Post < ApplicationRecord
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def flagger_matches(username)
|
def flagger_matches(username, current_user)
|
||||||
flags = PostFlag.unscoped.category_matches("normal")
|
flags = PostFlag.unscoped.category_matches("normal")
|
||||||
|
|
||||||
user_subquery_matches(flags, username) do |username|
|
user_subquery_matches(flags, username) do |username|
|
||||||
@@ -1323,9 +1323,9 @@ class Post < ApplicationRecord
|
|||||||
def user_subquery_matches(subquery, username, field: :creator, &block)
|
def user_subquery_matches(subquery, username, field: :creator, &block)
|
||||||
subquery = subquery.where("post_id = posts.id").select(1)
|
subquery = subquery.where("post_id = posts.id").select(1)
|
||||||
|
|
||||||
if username == "any"
|
if username.downcase == "any"
|
||||||
where("EXISTS (#{subquery.to_sql})")
|
where("EXISTS (#{subquery.to_sql})")
|
||||||
elsif username == "none"
|
elsif username.downcase == "none"
|
||||||
where("NOT EXISTS (#{subquery.to_sql})")
|
where("NOT EXISTS (#{subquery.to_sql})")
|
||||||
elsif block.nil?
|
elsif block.nil?
|
||||||
user = User.find_by_name(username)
|
user = User.find_by_name(username)
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
require 'test_helper'
|
require 'test_helper'
|
||||||
|
|
||||||
class PostQueryBuilderTest < ActiveSupport::TestCase
|
class PostQueryBuilderTest < ActiveSupport::TestCase
|
||||||
def assert_tag_match(posts, query, **options)
|
def assert_tag_match(posts, query, current_user: CurrentUser.user, **options)
|
||||||
assert_equal(posts.map(&:id), Post.user_tag_match(query, CurrentUser.user, **options).pluck(:id))
|
assert_equal(posts.map(&:id), Post.user_tag_match(query, current_user, **options).pluck(:id))
|
||||||
end
|
end
|
||||||
|
|
||||||
def assert_fast_count(count, query, query_options = {}, fast_count_options = {})
|
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")
|
assert_tag_match([], "approver:does_not_exist")
|
||||||
end
|
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
|
should "return posts for the commenter:<name> metatag" do
|
||||||
users = create_list(:user, 2, created_at: 2.weeks.ago)
|
users = create_list(:user, 2, created_at: 2.weeks.ago)
|
||||||
posts = create_list(:post, 2)
|
posts = create_list(:post, 2)
|
||||||
|
|||||||
Reference in New Issue
Block a user