posts: fix incorrect post counts for -pool:, -fav: searches

Fix `-pool:1234` and `-fav:evazion` searches incorrectly returning the
same post count as `pool:1234` and `fav:evazion` searches.
This commit is contained in:
evazion
2022-08-28 22:50:33 -05:00
parent fa0d7990fb
commit 4448b3d15b
2 changed files with 13 additions and 6 deletions

View File

@@ -111,12 +111,12 @@ class PostQuery
ast.none? ast.none?
end end
# True if the search is a single metatag search for the given metatag. # True if the search is a single, non-negated metatag search for the given metatag. Assumes the query has been normalized.
def is_metatag?(name, value = nil) def is_metatag?(name, value = nil)
if value.nil? if value.nil?
is_single_term? && has_metatag?(name) metatag? && has_metatag?(name)
else else
is_single_term? && find_metatag(name) == value.to_s metatag? && find_metatag(name) == value.to_s
end end
end end

View File

@@ -1480,14 +1480,21 @@ class PostQueryBuilderTest < ActiveSupport::TestCase
assert_fast_count(3, "pool:#{pool.id}") assert_fast_count(3, "pool:#{pool.id}")
assert_fast_count(3, "pool:#{pool.name}") assert_fast_count(3, "pool:#{pool.name}")
assert_fast_count(3, "ordpool:#{pool.id}")
assert_fast_count(3, "ordpool:#{pool.name}")
assert_fast_count(Post.count, "-pool:#{pool.id}")
assert_fast_count(Post.count, "-pool:#{pool.name}")
end end
should "return the correct favorite count for a fav:<name> search" do should "return the correct favorite count for a fav:<name> search" do
fav = create(:favorite) fav = create(:favorite)
fav.user.update!(favorite_count: 1) User.where(id: fav.user).update_all(favorite_count: 42) # XXX favorite_count is readonly; update it this way to bypass the readonly check.
assert_fast_count(1, "fav:#{fav.user.name}") assert_fast_count(42, "fav:#{fav.user.name}")
assert_fast_count(1, "ordfav:#{fav.user.name}") assert_fast_count(42, "ordfav:#{fav.user.name}")
assert_fast_count(1, "-fav:#{fav.user.name}")
end end
should "return the correct favorite count for a fav:<name> search for a user with private favorites" do should "return the correct favorite count for a fav:<name> search for a user with private favorites" do