diff --git a/app/logical/concerns/searchable.rb b/app/logical/concerns/searchable.rb index 3612b1b64..9b94d7a40 100644 --- a/app/logical/concerns/searchable.rb +++ b/app/logical/concerns/searchable.rb @@ -6,6 +6,7 @@ module Searchable def negate_relation relation = unscoped relation = relation.from(all.from_clause.value) if all.from_clause.value.present? + relation = relation.joins(all.joins_values) if all.joins_values.present? relation.where(all.where_clause.invert.ast) end diff --git a/test/unit/post_query_builder_test.rb b/test/unit/post_query_builder_test.rb index 003f5cdd1..fb8b4072f 100644 --- a/test/unit/post_query_builder_test.rb +++ b/test/unit/post_query_builder_test.rb @@ -781,6 +781,11 @@ class PostQueryBuilderTest < ActiveSupport::TestCase assert_tag_match([post], "duration:>0.4") assert_tag_match([post], "duration:<0.5") assert_tag_match([], "duration:>1") + + assert_tag_match([post], "-duration:>0.5") + assert_tag_match([post], "-duration:<0.4") + assert_tag_match([], "-duration:<0.5") + assert_tag_match([], "-duration:>0.4") end should "return posts for the is: metatag" do @@ -1481,14 +1486,14 @@ class PostQueryBuilderTest < ActiveSupport::TestCase assert_tag_match([post2, post1], "id:#{post1.id} or rating:q") end - should "work on a relation with pre-existing scopes" do - post1 = create(:post, rating: "g", is_pending: true, tag_string: ["1girl"]) - post2 = create(:post, rating: "s", is_flagged: true, tag_string: ["1boy"]) + should "work on a relation with pre-existing filters" do + post1 = create(:post, rating: "g", is_pending: true, tag_string: "1girl") + post2 = create(:post, rating: "s", is_flagged: true, tag_string: "1boy") create(:post_disapproval, post: post2, reason: "poor_quality") assert_tag_match([post1], "1girl", relation: Post.pending) assert_tag_match([post1], "1girl", relation: Post.in_modqueue) - assert_tag_match([post1], "1boy", relation: Post.in_modqueue) + assert_tag_match([post2], "1boy", relation: Post.in_modqueue) assert_tag_match([post2, post1], "comments:0", relation: Post.in_modqueue) assert_tag_match([post2, post1], "comments:0 notes:0", relation: Post.in_modqueue)