summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2012-07-08 12:32:38 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2012-07-08 12:32:38 +0000
commit81553d396e4d18fde3c13f56770fc467e0e258b1 (patch)
tree969f334d690a3987d6f420006d24e21e8fdbdfab
parent77e03b508b96dc50babdc4c33dbcaca045268425 (diff)
downloadredmine-81553d396e4d18fde3c13f56770fc467e0e258b1.tar.gz
redmine-81553d396e4d18fde3c13f56770fc467e0e258b1.zip
Merged r9908 from trunk.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/1.4-stable@9955 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--app/models/query.rb4
-rw-r--r--doc/CHANGELOG1
-rw-r--r--test/unit/query_test.rb28
3 files changed, 31 insertions, 2 deletions
diff --git a/app/models/query.rb b/app/models/query.rb
index 7fffc136c..f07ba6ddf 100644
--- a/app/models/query.rb
+++ b/app/models/query.rb
@@ -174,9 +174,9 @@ class Query < ActiveRecord::Base
if values_for(field)
case type_for(field)
when :integer
- add_filter_error(field, :invalid) if values_for(field).detect {|v| v.present? && !v.match(/^\d+$/) }
+ add_filter_error(field, :invalid) if values_for(field).detect {|v| v.present? && !v.match(/^[+-]?\d+$/) }
when :float
- add_filter_error(field, :invalid) if values_for(field).detect {|v| v.present? && !v.match(/^\d+(\.\d*)?$/) }
+ add_filter_error(field, :invalid) if values_for(field).detect {|v| v.present? && !v.match(/^[+-]?\d+(\.\d*)?$/) }
when :date, :date_past
case operator_for(field)
when "=", ">=", "<=", "><"
diff --git a/doc/CHANGELOG b/doc/CHANGELOG
index 69b589306..8e4d303f0 100644
--- a/doc/CHANGELOG
+++ b/doc/CHANGELOG
@@ -7,6 +7,7 @@ http://www.redmine.org/
== TBD v1.4.5
* Defect #11192: Make repository identifier accept underscores
+* Defect #11307: Can't filter for negative numeric custom fields
* Patch #11328: Fix Japanese mistranslation for 'label_language_based'
== 2012-06-18 v1.4.4
diff --git a/test/unit/query_test.rb b/test/unit/query_test.rb
index 091030104..87b426ecb 100644
--- a/test/unit/query_test.rb
+++ b/test/unit/query_test.rb
@@ -178,6 +178,20 @@ class QueryTest < ActiveSupport::TestCase
assert_equal 2, issues.first.id
end
+ def test_operator_is_on_integer_custom_field_should_accept_negative_value
+ f = IssueCustomField.create!(:name => 'filter', :field_format => 'int', :is_for_all => true, :is_filter => true)
+ CustomValue.create!(:custom_field => f, :customized => Issue.find(1), :value => '7')
+ CustomValue.create!(:custom_field => f, :customized => Issue.find(2), :value => '-12')
+ CustomValue.create!(:custom_field => f, :customized => Issue.find(3), :value => '')
+
+ query = Query.new(:name => '_')
+ query.add_filter("cf_#{f.id}", '=', ['-12'])
+ assert query.valid?
+ issues = find_issues_with_query(query)
+ assert_equal 1, issues.size
+ assert_equal 2, issues.first.id
+ end
+
def test_operator_is_on_float_custom_field
f = IssueCustomField.create!(:name => 'filter', :field_format => 'float', :is_filter => true, :is_for_all => true)
CustomValue.create!(:custom_field => f, :customized => Issue.find(1), :value => '7.3')
@@ -191,6 +205,20 @@ class QueryTest < ActiveSupport::TestCase
assert_equal 2, issues.first.id
end
+ def test_operator_is_on_float_custom_field_should_accept_negative_value
+ f = IssueCustomField.create!(:name => 'filter', :field_format => 'float', :is_filter => true, :is_for_all => true)
+ CustomValue.create!(:custom_field => f, :customized => Issue.find(1), :value => '7.3')
+ CustomValue.create!(:custom_field => f, :customized => Issue.find(2), :value => '-12.7')
+ CustomValue.create!(:custom_field => f, :customized => Issue.find(3), :value => '')
+
+ query = Query.new(:name => '_')
+ query.add_filter("cf_#{f.id}", '=', ['-12.7'])
+ assert query.valid?
+ issues = find_issues_with_query(query)
+ assert_equal 1, issues.size
+ assert_equal 2, issues.first.id
+ end
+
def test_operator_is_on_multi_list_custom_field
f = IssueCustomField.create!(:name => 'filter', :field_format => 'list', :is_filter => true, :is_for_all => true,
:possible_values => ['value1', 'value2', 'value3'], :multiple => true)