From c1996e4f063a7f5a741a0d40d1a7d8439801bd35 Mon Sep 17 00:00:00 2001 From: Talulah Date: Tue, 12 Apr 2022 23:01:19 -0300 Subject: [PATCH] favgroups: allow favgroup:any/none searches --- app/models/post.rb | 13 +++++++++++-- test/unit/post_query_builder_test.rb | 4 ++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/app/models/post.rb b/app/models/post.rb index 9f981b194..1b9d30aa4 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -1251,8 +1251,17 @@ class Post < ApplicationRecord end def favgroup_matches(query, current_user) - favgroup = FavoriteGroup.visible(current_user).name_or_id_matches(query, current_user) - where(id: favgroup.select("unnest(post_ids)")) + case query.downcase + when "none" + favgroups = FavoriteGroup.where(creator: current_user) + where.not(id: favgroups.select("unnest(post_ids)")) + when "any" + favgroups = FavoriteGroup.where(creator: current_user) + where(id: favgroups.select("unnest(post_ids)")) + else + favgroup = FavoriteGroup.visible(current_user).name_or_id_matches(query, current_user) + where(id: favgroup.select("unnest(post_ids)")) + end end def ordfavgroup_matches(query, current_user) diff --git a/test/unit/post_query_builder_test.rb b/test/unit/post_query_builder_test.rb index fbd40d059..e2af7cc5b 100644 --- a/test/unit/post_query_builder_test.rb +++ b/test/unit/post_query_builder_test.rb @@ -387,11 +387,14 @@ class PostQueryBuilderTest < ActiveSupport::TestCase assert_tag_match([post1], "favgroup:#{favgroup1.id}") assert_tag_match([post2], "favgroup:#{favgroup2.name}") + assert_tag_match([post2, post1], "favgroup:any") assert_tag_match([], "favgroup:#{favgroup3.name}") assert_tag_match([], "favgroup:dne") assert_tag_match([post3, post2], "-favgroup:#{favgroup1.id}") assert_tag_match([post3, post1], "-favgroup:#{favgroup2.name}") + assert_tag_match([post3], "-favgroup:any") + assert_tag_match([post3], "favgroup:none") assert_tag_match([post3, post2, post1], "-favgroup:#{favgroup3.name}") assert_tag_match([post3, post2, post1], "-favgroup:dne") @@ -405,6 +408,7 @@ class PostQueryBuilderTest < ActiveSupport::TestCase assert_tag_match([], "favgroup:#{favgroup1.name}") assert_tag_match([], "favgroup:#{favgroup2.name}") assert_tag_match([post3], "favgroup:#{favgroup3.name}") + assert_tag_match([post3], "favgroup:any") end end