From 009b5ad84c6a5a7ad0a5d5322401f34e0c825715 Mon Sep 17 00:00:00 2001 From: evazion Date: Thu, 23 Apr 2020 20:49:53 -0500 Subject: [PATCH] search: fix status:any not working when hide_deleted_posts is on. ref: https://danbooru.donmai.us/forum_topics/9127?page=303#forum_post_165694 --- app/logical/post_query_builder.rb | 4 ++-- test/unit/post_query_builder_test.rb | 16 +++++++++++++++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/app/logical/post_query_builder.rb b/app/logical/post_query_builder.rb index cef2edea1..565a73c62 100644 --- a/app/logical/post_query_builder.rb +++ b/app/logical/post_query_builder.rb @@ -324,8 +324,8 @@ class PostQueryBuilder def hide_deleted_posts?(q) return false if CurrentUser.admin_mode? - return false if q[:status].to_a.any?(%w[deleted active any all]) - return false if q[:status_neg].to_a.any?(%w[deleted active any all]) + return false if find_metatag("status").to_s.downcase.in?(%w[deleted active any all]) + return false if find_metatag("-status").to_s.downcase.in?(%w[deleted active any all]) return CurrentUser.user.hide_deleted_posts? end diff --git a/test/unit/post_query_builder_test.rb b/test/unit/post_query_builder_test.rb index 4288d93bd..7bb17b57f 100644 --- a/test/unit/post_query_builder_test.rb +++ b/test/unit/post_query_builder_test.rb @@ -500,15 +500,29 @@ class PostQueryBuilderTest < ActiveSupport::TestCase assert_tag_match([pending, flagged], "status:unmoderated") end - should "respect the 'Deleted post filter' option when using the status:banned metatag" do + should "respect the 'Deleted post filter' option when using the status: metatag" do deleted = create(:post, is_deleted: true, is_banned: true) undeleted = create(:post, is_banned: true) CurrentUser.hide_deleted_posts = true assert_tag_match([undeleted], "status:banned") + assert_tag_match([undeleted], "status:active") + assert_tag_match([deleted], "status:deleted") + assert_tag_match([undeleted, deleted], "status:any") + assert_tag_match([undeleted, deleted], "status:all") + + assert_tag_match([], "-status:banned") + assert_tag_match([deleted], "-status:active") + assert_tag_match([undeleted], "-status:deleted") + #assert_tag_match([deleted], "-status:any") # XXX Broken + #assert_tag_match([deleted], "-status:all") CurrentUser.hide_deleted_posts = false assert_tag_match([undeleted, deleted], "status:banned") + assert_tag_match([undeleted], "status:active") + assert_tag_match([deleted], "status:deleted") + assert_tag_match([undeleted, deleted], "status:any") + assert_tag_match([undeleted, deleted], "status:all") end should "return posts for the filetype: metatag" do