##// END OF EJS Templates
Fixed: Can't filter for negative numeric custom field (#11307)....
Jean-Philippe Lang -
r9725:d00ba6d2bb7c
parent child
Show More
@@ -174,9 +174,9 class Query < ActiveRecord::Base
174 if values_for(field)
174 if values_for(field)
175 case type_for(field)
175 case type_for(field)
176 when :integer
176 when :integer
177 add_filter_error(field, :invalid) if values_for(field).detect {|v| v.present? && !v.match(/^\d+$/) }
177 add_filter_error(field, :invalid) if values_for(field).detect {|v| v.present? && !v.match(/^[+-]?\d+$/) }
178 when :float
178 when :float
179 add_filter_error(field, :invalid) if values_for(field).detect {|v| v.present? && !v.match(/^\d+(\.\d*)?$/) }
179 add_filter_error(field, :invalid) if values_for(field).detect {|v| v.present? && !v.match(/^[+-]?\d+(\.\d*)?$/) }
180 when :date, :date_past
180 when :date, :date_past
181 case operator_for(field)
181 case operator_for(field)
182 when "=", ">=", "<=", "><"
182 when "=", ">=", "<=", "><"
@@ -179,6 +179,20 class QueryTest < ActiveSupport::TestCase
179 assert_equal 2, issues.first.id
179 assert_equal 2, issues.first.id
180 end
180 end
181
181
182 def test_operator_is_on_integer_custom_field_should_accept_negative_value
183 f = IssueCustomField.create!(:name => 'filter', :field_format => 'int', :is_for_all => true, :is_filter => true)
184 CustomValue.create!(:custom_field => f, :customized => Issue.find(1), :value => '7')
185 CustomValue.create!(:custom_field => f, :customized => Issue.find(2), :value => '-12')
186 CustomValue.create!(:custom_field => f, :customized => Issue.find(3), :value => '')
187
188 query = Query.new(:name => '_')
189 query.add_filter("cf_#{f.id}", '=', ['-12'])
190 assert query.valid?
191 issues = find_issues_with_query(query)
192 assert_equal 1, issues.size
193 assert_equal 2, issues.first.id
194 end
195
182 def test_operator_is_on_float_custom_field
196 def test_operator_is_on_float_custom_field
183 f = IssueCustomField.create!(:name => 'filter', :field_format => 'float', :is_filter => true, :is_for_all => true)
197 f = IssueCustomField.create!(:name => 'filter', :field_format => 'float', :is_filter => true, :is_for_all => true)
184 CustomValue.create!(:custom_field => f, :customized => Issue.find(1), :value => '7.3')
198 CustomValue.create!(:custom_field => f, :customized => Issue.find(1), :value => '7.3')
@@ -192,6 +206,20 class QueryTest < ActiveSupport::TestCase
192 assert_equal 2, issues.first.id
206 assert_equal 2, issues.first.id
193 end
207 end
194
208
209 def test_operator_is_on_float_custom_field_should_accept_negative_value
210 f = IssueCustomField.create!(:name => 'filter', :field_format => 'float', :is_filter => true, :is_for_all => true)
211 CustomValue.create!(:custom_field => f, :customized => Issue.find(1), :value => '7.3')
212 CustomValue.create!(:custom_field => f, :customized => Issue.find(2), :value => '-12.7')
213 CustomValue.create!(:custom_field => f, :customized => Issue.find(3), :value => '')
214
215 query = Query.new(:name => '_')
216 query.add_filter("cf_#{f.id}", '=', ['-12.7'])
217 assert query.valid?
218 issues = find_issues_with_query(query)
219 assert_equal 1, issues.size
220 assert_equal 2, issues.first.id
221 end
222
195 def test_operator_is_on_multi_list_custom_field
223 def test_operator_is_on_multi_list_custom_field
196 f = IssueCustomField.create!(:name => 'filter', :field_format => 'list', :is_filter => true, :is_for_all => true,
224 f = IssueCustomField.create!(:name => 'filter', :field_format => 'list', :is_filter => true, :is_for_all => true,
197 :possible_values => ['value1', 'value2', 'value3'], :multiple => true)
225 :possible_values => ['value1', 'value2', 'value3'], :multiple => true)
General Comments 0
You need to be logged in to leave comments. Login now