summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGo MAEDA <maeda@farend.jp>2024-01-02 00:41:00 +0000
committerGo MAEDA <maeda@farend.jp>2024-01-02 00:41:00 +0000
commit73477b41eb2c5062431c82e8718eb2ef89d7be99 (patch)
treeaafcda037deb88d311f763f498febdcc06ebcecc
parent06f95674156fd9a78b60732cc920b02990bb9144 (diff)
downloadredmine-73477b41eb2c5062431c82e8718eb2ef89d7be99.tar.gz
redmine-73477b41eb2c5062431c82e8718eb2ef89d7be99.zip
Fix "any" operator for text filters to exclude empty text values (#39991).
Patch by Go MAEDA (@maeda). git-svn-id: https://svn.redmine.org/redmine/trunk@22583 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--app/models/query.rb2
-rw-r--r--test/unit/query_test.rb15
2 files changed, 15 insertions, 2 deletions
diff --git a/app/models/query.rb b/app/models/query.rb
index 9f3ce4c08..b9a7181fa 100644
--- a/app/models/query.rb
+++ b/app/models/query.rb
@@ -1276,7 +1276,7 @@ class Query < ActiveRecord::Base
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
+ sql += " AND #{db_table}.#{db_field} <> ''" if is_custom_filter || [:text, :string].include?(type_for(field))
when ">="
if [:date, :date_past].include?(type_for(field))
sql = date_clause(db_table, db_field, parse_date(value.first), nil, is_custom_filter)
diff --git a/test/unit/query_test.rb b/test/unit/query_test.rb
index a1c528e26..462934f1e 100644
--- a/test/unit/query_test.rb
+++ b/test/unit/query_test.rb
@@ -214,7 +214,7 @@ class QueryTest < ActiveSupport::TestCase
assert issues.all? {|i| i.custom_field_value(2).blank?}
end
- def test_operator_none_for_text
+ def test_operator_none_for_blank_text
query = IssueQuery.new(:name => '_')
query.add_filter('status_id', '*', [''])
query.add_filter('description', '!*', [''])
@@ -226,6 +226,19 @@ class QueryTest < ActiveSupport::TestCase
assert_equal [11, 12], issues.map(&:id).sort
end
+ def test_operator_any_for_blank_text
+ Issue.where(id: [1, 2]).update_all(description: '')
+ 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.present?}
+ assert_empty issues.map(&:id) & [1, 2]
+ end
+
def test_operator_all
query = IssueQuery.new(:project => Project.find(1), :name => '_')
query.add_filter('fixed_version_id', '*', [''])