##// END OF EJS Templates
Fixed that non-empty blank strings as custom field values are not properly validated (#16169)....
Jean-Philippe Lang -
r12663:4c7a76785d9f
parent child
Show More
@@ -241,9 +241,7 class CustomField < ActiveRecord::Base
241 241 errs << ::I18n.t('activerecord.errors.messages.blank')
242 242 end
243 243 end
244 if custom_value.value.present?
245 errs += format.validate_custom_value(custom_value)
246 end
244 errs += format.validate_custom_value(custom_value)
247 245 errs
248 246 end
249 247
@@ -131,7 +131,8 module Redmine
131 131 # Returns the validation error messages for custom_value
132 132 # Should return an empty array if custom_value is valid
133 133 def validate_custom_value(custom_value)
134 errors = Array.wrap(custom_value.value).reject(&:blank?).map do |value|
134 values = Array.wrap(custom_value.value).reject {|value| value.to_s == ''}
135 errors = values.map do |value|
135 136 validate_single_value(custom_value.custom_field, value, custom_value.customized)
136 137 end
137 138 errors.flatten.uniq
@@ -252,16 +253,15 module Redmine
252 253 class Unbounded < Base
253 254 def validate_single_value(custom_field, value, customized=nil)
254 255 errs = super
255 if value.present?
256 unless custom_field.regexp.blank? or value =~ Regexp.new(custom_field.regexp)
257 errs << ::I18n.t('activerecord.errors.messages.invalid')
258 end
259 if custom_field.min_length && value.length < custom_field.min_length
260 errs << ::I18n.t('activerecord.errors.messages.too_short', :count => custom_field.min_length)
261 end
262 if custom_field.max_length && custom_field.max_length > 0 && value.length > custom_field.max_length
263 errs << ::I18n.t('activerecord.errors.messages.too_long', :count => custom_field.max_length)
264 end
256 value = value.to_s
257 unless custom_field.regexp.blank? or value =~ Regexp.new(custom_field.regexp)
258 errs << ::I18n.t('activerecord.errors.messages.invalid')
259 end
260 if custom_field.min_length && value.length < custom_field.min_length
261 errs << ::I18n.t('activerecord.errors.messages.too_short', :count => custom_field.min_length)
262 end
263 if custom_field.max_length && custom_field.max_length > 0 && value.length > custom_field.max_length
264 errs << ::I18n.t('activerecord.errors.messages.too_long', :count => custom_field.max_length)
265 265 end
266 266 errs
267 267 end
@@ -528,8 +528,9 module Redmine
528 528 end
529 529
530 530 def validate_custom_value(custom_value)
531 invalid_values = Array.wrap(custom_value.value) - Array.wrap(custom_value.value_was) - custom_value.custom_field.possible_values
532 if invalid_values.select(&:present?).any?
531 values = Array.wrap(custom_value.value).reject {|value| value.to_s == ''}
532 invalid_values = values - Array.wrap(custom_value.value_was) - custom_value.custom_field.possible_values
533 if invalid_values.any?
533 534 [::I18n.t('activerecord.errors.messages.inclusion')]
534 535 else
535 536 []
@@ -146,6 +146,7 class CustomFieldTest < ActiveSupport::TestCase
146 146
147 147 assert f.valid_field_value?(nil)
148 148 assert f.valid_field_value?('')
149 assert !f.valid_field_value?(' ')
149 150 assert f.valid_field_value?('a' * 2)
150 151 assert !f.valid_field_value?('a')
151 152 assert !f.valid_field_value?('a' * 6)
@@ -156,6 +157,7 class CustomFieldTest < ActiveSupport::TestCase
156 157
157 158 assert f.valid_field_value?(nil)
158 159 assert f.valid_field_value?('')
160 assert !f.valid_field_value?(' ')
159 161 assert f.valid_field_value?('ABC')
160 162 assert !f.valid_field_value?('abc')
161 163 end
@@ -165,6 +167,7 class CustomFieldTest < ActiveSupport::TestCase
165 167
166 168 assert f.valid_field_value?(nil)
167 169 assert f.valid_field_value?('')
170 assert !f.valid_field_value?(' ')
168 171 assert f.valid_field_value?('1975-07-14')
169 172 assert !f.valid_field_value?('1975-07-33')
170 173 assert !f.valid_field_value?('abc')
@@ -175,6 +178,7 class CustomFieldTest < ActiveSupport::TestCase
175 178
176 179 assert f.valid_field_value?(nil)
177 180 assert f.valid_field_value?('')
181 assert !f.valid_field_value?(' ')
178 182 assert f.valid_field_value?('value2')
179 183 assert !f.valid_field_value?('abc')
180 184 end
@@ -184,6 +188,7 class CustomFieldTest < ActiveSupport::TestCase
184 188
185 189 assert f.valid_field_value?(nil)
186 190 assert f.valid_field_value?('')
191 assert !f.valid_field_value?(' ')
187 192 assert f.valid_field_value?('123')
188 193 assert f.valid_field_value?('+123')
189 194 assert f.valid_field_value?('-123')
@@ -195,6 +200,7 class CustomFieldTest < ActiveSupport::TestCase
195 200
196 201 assert f.valid_field_value?(nil)
197 202 assert f.valid_field_value?('')
203 assert !f.valid_field_value?(' ')
198 204 assert f.valid_field_value?('11.2')
199 205 assert f.valid_field_value?('-6.250')
200 206 assert f.valid_field_value?('5')
@@ -206,9 +212,11 class CustomFieldTest < ActiveSupport::TestCase
206 212
207 213 assert f.valid_field_value?(nil)
208 214 assert f.valid_field_value?('')
215 assert !f.valid_field_value?(' ')
209 216 assert f.valid_field_value?([])
210 217 assert f.valid_field_value?([nil])
211 218 assert f.valid_field_value?([''])
219 assert !f.valid_field_value?([' '])
212 220
213 221 assert f.valid_field_value?('value2')
214 222 assert !f.valid_field_value?('abc')
General Comments 0
You need to be logged in to leave comments. Login now