diff --git a/app/logical/post_query_builder.rb b/app/logical/post_query_builder.rb index ddc739f39..2d7fb99f9 100644 --- a/app/logical/post_query_builder.rb +++ b/app/logical/post_query_builder.rb @@ -97,15 +97,15 @@ class PostQueryBuilder negated_tags = negated_tags.map(&:name) optional_tags = optional_tags.map(&:name) required_tags = required_tags.map(&:name) - + matched_negated_wildcard_tags = negated_wildcard_tags.flat_map { |tag| Tag.wildcard_matches(tag.name).limit(MAX_WILDCARD_TAGS).pluck(:name) } matched_optional_wildcard_tags = optional_wildcard_tags.flat_map { |tag| Tag.wildcard_matches(tag.name).limit(MAX_WILDCARD_TAGS).pluck(:name) } matched_required_wildcard_tags = required_wildcard_tags.flat_map { |tag| Tag.wildcard_matches(tag.name).limit(MAX_WILDCARD_TAGS).pluck(:name) } - + negated_tags += (matched_negated_wildcard_tags.empty? && !negated_wildcard_tags.empty?) ? negated_wildcard_tags.map(&:name) : matched_negated_wildcard_tags optional_tags += (matched_optional_wildcard_tags.empty? && !optional_wildcard_tags.empty?) ? optional_wildcard_tags.map(&:name) : matched_optional_wildcard_tags optional_tags += (matched_required_wildcard_tags.empty? && !required_wildcard_tags.empty?) ? required_wildcard_tags.map(&:name) : matched_required_wildcard_tags - + tsquery << "!(#{negated_tags.sort.uniq.map(&:to_escaped_for_tsquery).join(" | ")})" if negated_tags.present? tsquery << "(#{optional_tags.sort.uniq.map(&:to_escaped_for_tsquery).join(" | ")})" if optional_tags.present? tsquery << "(#{required_tags.sort.uniq.map(&:to_escaped_for_tsquery).join(" & ")})" if required_tags.present? @@ -321,10 +321,9 @@ class PostQueryBuilder def disapproved_matches(query) if query.downcase.in?(PostDisapproval::REASONS) Post.where(disapprovals: PostDisapproval.where(reason: query.downcase)) - elsif User.normalize_name(query) == current_user.name - Post.where(disapprovals: PostDisapproval.where(user: current_user)) else - Post.none + user = User.find_by_name(query) + Post.where(disapprovals: PostDisapproval.creator_matches(user, current_user)) end end @@ -949,7 +948,7 @@ class PostQueryBuilder metatags.any? do |metatag| metatag.name.in?(%w[upvoter upvote downvoter downvote search flagger fav ordfav favgroup ordfavgroup]) || metatag.name == "status" && metatag.value == "unmoderated" || - metatag.name == "disapproved" && User.normalize_name(metatag.value) == current_user.name + metatag.name == "disapproved" && !metatag.value.downcase.in?(PostDisapproval::REASONS) end end end diff --git a/test/unit/post_query_builder_test.rb b/test/unit/post_query_builder_test.rb index f6ea43beb..bb43a2de8 100644 --- a/test/unit/post_query_builder_test.rb +++ b/test/unit/post_query_builder_test.rb @@ -874,22 +874,31 @@ class PostQueryBuilderTest < ActiveSupport::TestCase end should "return posts for a disapproved: metatag" do - CurrentUser.scoped(create(:mod_user)) do - pending = create(:post, is_pending: true) - disapproved = create(:post, is_pending: true) - disapproval = create(:post_disapproval, user: CurrentUser.user, post: disapproved, reason: "disinterest") + disapprover = create(:user) + pending = create(:post, is_pending: true) + disapproved = create(:post, is_pending: true) + disapproval = create(:post_disapproval, user: disapprover, post: disapproved, reason: "disinterest") - assert_tag_match([disapproved], "disapproved:#{CurrentUser.user.name}") - assert_tag_match([disapproved], "disapproved:#{CurrentUser.user.name.upcase}") + as(disapprover) do + assert_tag_match([disapproved], "disapproved:#{disapprover.name}") + assert_tag_match([disapproved], "disapproved:#{disapprover.name.upcase}") assert_tag_match([disapproved], "disapproved:disinterest") assert_tag_match([disapproved], "disapproved:DISINTEREST") assert_tag_match([], "disapproved:breaks_rules") assert_tag_match([], "disapproved:breaks_rules disapproved:disinterest") - assert_tag_match([pending], "-disapproved:#{CurrentUser.user.name}") + assert_tag_match([pending], "-disapproved:#{disapprover.name}") assert_tag_match([pending], "-disapproved:disinterest") assert_tag_match([disapproved, pending], "-disapproved:breaks_rules") end + + as(create(:user)) do + assert_tag_match([], "disapproved:#{disapprover.name}") + end + + as(create(:mod_user)) do + assert_tag_match([disapproved], "disapproved:#{disapprover.name}") + end end should "return posts ordered by a particular attribute" do