From 58ee62e23990799f1c6d733e1a9a7f046d004816 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Tue, 7 Mar 2017 17:51:27 +0000 Subject: [PATCH] Issue description filter's 'none' operator does not match issues with blank descriptions (#25077). Patch by Marius BALTEANU. git-svn-id: http://svn.redmine.org/redmine/trunk@16378 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/query.rb | 4 ++-- test/unit/query_test.rb | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/app/models/query.rb b/app/models/query.rb index 4f183329a..321821a93 100644 --- a/app/models/query.rb +++ b/app/models/query.rb @@ -984,7 +984,7 @@ class Query < ActiveRecord::Base " SELECT customized_id FROM #{CustomValue.table_name}" + " WHERE customized_type='#{target_class}' AND custom_field_id=#{chained_custom_field_id}" + " AND #{sql_for_field(field, operator, value, CustomValue.table_name, 'value')}))" - + end def sql_for_custom_field_attribute(field, operator, value, custom_field_id, attribute) @@ -1048,7 +1048,7 @@ class Query < ActiveRecord::Base end when "!*" sql = "#{db_table}.#{db_field} IS NULL" - sql << " OR #{db_table}.#{db_field} = ''" if is_custom_filter + sql << " OR #{db_table}.#{db_field} = ''" if (is_custom_filter || [:text, :string].include?(type_for(field))) when "*" sql = "#{db_table}.#{db_field} IS NOT NULL" sql << " AND #{db_table}.#{db_field} <> ''" if is_custom_filter diff --git a/test/unit/query_test.rb b/test/unit/query_test.rb index 5a3283900..7f2ef3d1c 100644 --- a/test/unit/query_test.rb +++ b/test/unit/query_test.rb @@ -217,6 +217,18 @@ class QueryTest < ActiveSupport::TestCase assert issues.all? {|i| i.custom_field_value(2).blank?} end + def test_operator_none_for_text + query = IssueQuery.new(:name => '_') + query.add_filter('status_id', '*', ['']) + query.add_filter('description', '!*', ['']) + assert query.has_filter?('description') + issues = find_issues_with_query(query) + + assert issues.any? + assert issues.all? {|i| i.description.blank?} + assert_equal [11, 12], issues.map(&:id).sort + end + def test_operator_all query = IssueQuery.new(:project => Project.find(1), :name => '_') query.add_filter('fixed_version_id', '*', ['']) -- 2.39.5