From 986bc6e314430738a6d20c5d0be560f3a8efff12 Mon Sep 17 00:00:00 2001 From: evazion Date: Thu, 30 Apr 2020 01:27:38 -0500 Subject: [PATCH] search: fix bug in normalize_query for negated metatags. Forgot to account for negated metatags in normalize_query after e987f070. Fixes a bug where wrong page counts were displayed for searches involving negated metatags due to incorrect query normalization. --- app/logical/post_query_builder.rb | 10 +++++++--- test/unit/post_query_builder_test.rb | 6 ++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/app/logical/post_query_builder.rb b/app/logical/post_query_builder.rb index a9b007ac0..7baaf62df 100644 --- a/app/logical/post_query_builder.rb +++ b/app/logical/post_query_builder.rb @@ -656,10 +656,14 @@ class PostQueryBuilder def split_query scan_query.map do |term| - if term.type == :metatag && term.value.include?(" ") - "#{term.name}:\"#{term.value}\"" - elsif term.type == :metatag + if term.type == :metatag && !term.negated && !term.quoted "#{term.name}:#{term.value}" + elsif term.type == :metatag && !term.negated && term.quoted + "#{term.name}:\"#{term.value}\"" + elsif term.type == :metatag && term.negated && !term.quoted + "-#{term.name}:#{term.value}" + elsif term.type == :metatag && term.negated && term.quoted + "-#{term.name}:\"#{term.value}\"" elsif term.type == :tag && term.negated "-#{term.name}" elsif term.type == :tag && term.optional diff --git a/test/unit/post_query_builder_test.rb b/test/unit/post_query_builder_test.rb index 2e346494f..8606011ff 100644 --- a/test/unit/post_query_builder_test.rb +++ b/test/unit/post_query_builder_test.rb @@ -1041,6 +1041,12 @@ class PostQueryBuilderTest < ActiveSupport::TestCase assert_equal("gray", PostQueryBuilder.new("gray").normalize_query) assert_equal("grey", PostQueryBuilder.new("gray").normalize_query(normalize_aliases: true)) assert_equal("aaa bbb", PostQueryBuilder.new("bbb aaa").normalize_query) + assert_equal("-aaa bbb", PostQueryBuilder.new("bbb -aaa").normalize_query) + assert_equal("~aaa ~bbb", PostQueryBuilder.new("~bbb ~aaa").normalize_query) + assert_equal("bbb commentary:true", PostQueryBuilder.new("bbb commentary:true").normalize_query) + assert_equal('bbb commentary:"true"', PostQueryBuilder.new("bbb commentary:'true'").normalize_query) + assert_equal('-commentary:true bbb', PostQueryBuilder.new("bbb -commentary:true").normalize_query) + assert_equal('-commentary:"true" bbb', PostQueryBuilder.new("bbb -commentary:'true'").normalize_query) end end end