comparison test/unit/custom_field_test.rb @ 1526:404aa68d4227

Merge from live branch
author Chris Cannam
date Thu, 11 Sep 2014 12:46:20 +0100
parents dffacf8a6908
children
comparison
equal deleted inserted replaced
1493:a5f2bdf3b486 1526:404aa68d4227
1 # Redmine - project management software 1 # Redmine - project management software
2 # Copyright (C) 2006-2012 Jean-Philippe Lang 2 # Copyright (C) 2006-2014 Jean-Philippe Lang
3 # 3 #
4 # This program is free software; you can redistribute it and/or 4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License 5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2 6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version. 7 # of the License, or (at your option) any later version.
55 def test_default_value_should_not_be_validated_when_blank 55 def test_default_value_should_not_be_validated_when_blank
56 field = CustomField.new(:name => 'Test', :field_format => 'list', :possible_values => ['a', 'b'], :is_required => true, :default_value => '') 56 field = CustomField.new(:name => 'Test', :field_format => 'list', :possible_values => ['a', 'b'], :is_required => true, :default_value => '')
57 assert field.valid? 57 assert field.valid?
58 end 58 end
59 59
60 def test_field_format_should_be_validated
61 field = CustomField.new(:name => 'Test', :field_format => 'foo')
62 assert !field.valid?
63 end
64
65 def test_field_format_validation_should_accept_formats_added_at_runtime
66 Redmine::FieldFormat.add 'foobar', Class.new(Redmine::FieldFormat::Base)
67
68 field = CustomField.new(:name => 'Some Custom Field', :field_format => 'foobar')
69 assert field.valid?, 'field should be valid'
70 ensure
71 Redmine::FieldFormat.delete 'foobar'
72 end
73
60 def test_should_not_change_field_format_of_existing_custom_field 74 def test_should_not_change_field_format_of_existing_custom_field
61 field = CustomField.find(1) 75 field = CustomField.find(1)
62 field.field_format = 'int' 76 field.field_format = 'int'
63 assert_equal 'list', field.field_format 77 assert_equal 'list', field.field_format
64 end 78 end
130 def test_string_field_validation_with_min_and_max_lengths 144 def test_string_field_validation_with_min_and_max_lengths
131 f = CustomField.new(:field_format => 'string', :min_length => 2, :max_length => 5) 145 f = CustomField.new(:field_format => 'string', :min_length => 2, :max_length => 5)
132 146
133 assert f.valid_field_value?(nil) 147 assert f.valid_field_value?(nil)
134 assert f.valid_field_value?('') 148 assert f.valid_field_value?('')
149 assert !f.valid_field_value?(' ')
135 assert f.valid_field_value?('a' * 2) 150 assert f.valid_field_value?('a' * 2)
136 assert !f.valid_field_value?('a') 151 assert !f.valid_field_value?('a')
137 assert !f.valid_field_value?('a' * 6) 152 assert !f.valid_field_value?('a' * 6)
138 end 153 end
139 154
140 def test_string_field_validation_with_regexp 155 def test_string_field_validation_with_regexp
141 f = CustomField.new(:field_format => 'string', :regexp => '^[A-Z0-9]*$') 156 f = CustomField.new(:field_format => 'string', :regexp => '^[A-Z0-9]*$')
142 157
143 assert f.valid_field_value?(nil) 158 assert f.valid_field_value?(nil)
144 assert f.valid_field_value?('') 159 assert f.valid_field_value?('')
160 assert !f.valid_field_value?(' ')
145 assert f.valid_field_value?('ABC') 161 assert f.valid_field_value?('ABC')
146 assert !f.valid_field_value?('abc') 162 assert !f.valid_field_value?('abc')
147 end 163 end
148 164
149 def test_date_field_validation 165 def test_date_field_validation
150 f = CustomField.new(:field_format => 'date') 166 f = CustomField.new(:field_format => 'date')
151 167
152 assert f.valid_field_value?(nil) 168 assert f.valid_field_value?(nil)
153 assert f.valid_field_value?('') 169 assert f.valid_field_value?('')
170 assert !f.valid_field_value?(' ')
154 assert f.valid_field_value?('1975-07-14') 171 assert f.valid_field_value?('1975-07-14')
155 assert !f.valid_field_value?('1975-07-33') 172 assert !f.valid_field_value?('1975-07-33')
156 assert !f.valid_field_value?('abc') 173 assert !f.valid_field_value?('abc')
157 end 174 end
158 175
159 def test_list_field_validation 176 def test_list_field_validation
160 f = CustomField.new(:field_format => 'list', :possible_values => ['value1', 'value2']) 177 f = CustomField.new(:field_format => 'list', :possible_values => ['value1', 'value2'])
161 178
162 assert f.valid_field_value?(nil) 179 assert f.valid_field_value?(nil)
163 assert f.valid_field_value?('') 180 assert f.valid_field_value?('')
181 assert !f.valid_field_value?(' ')
164 assert f.valid_field_value?('value2') 182 assert f.valid_field_value?('value2')
165 assert !f.valid_field_value?('abc') 183 assert !f.valid_field_value?('abc')
166 end 184 end
167 185
168 def test_int_field_validation 186 def test_int_field_validation
169 f = CustomField.new(:field_format => 'int') 187 f = CustomField.new(:field_format => 'int')
170 188
171 assert f.valid_field_value?(nil) 189 assert f.valid_field_value?(nil)
172 assert f.valid_field_value?('') 190 assert f.valid_field_value?('')
191 assert !f.valid_field_value?(' ')
173 assert f.valid_field_value?('123') 192 assert f.valid_field_value?('123')
174 assert f.valid_field_value?('+123') 193 assert f.valid_field_value?('+123')
175 assert f.valid_field_value?('-123') 194 assert f.valid_field_value?('-123')
176 assert !f.valid_field_value?('6abc') 195 assert !f.valid_field_value?('6abc')
177 end 196 end
179 def test_float_field_validation 198 def test_float_field_validation
180 f = CustomField.new(:field_format => 'float') 199 f = CustomField.new(:field_format => 'float')
181 200
182 assert f.valid_field_value?(nil) 201 assert f.valid_field_value?(nil)
183 assert f.valid_field_value?('') 202 assert f.valid_field_value?('')
203 assert !f.valid_field_value?(' ')
184 assert f.valid_field_value?('11.2') 204 assert f.valid_field_value?('11.2')
185 assert f.valid_field_value?('-6.250') 205 assert f.valid_field_value?('-6.250')
186 assert f.valid_field_value?('5') 206 assert f.valid_field_value?('5')
187 assert !f.valid_field_value?('6abc') 207 assert !f.valid_field_value?('6abc')
188 end 208 end
190 def test_multi_field_validation 210 def test_multi_field_validation
191 f = CustomField.new(:field_format => 'list', :multiple => 'true', :possible_values => ['value1', 'value2']) 211 f = CustomField.new(:field_format => 'list', :multiple => 'true', :possible_values => ['value1', 'value2'])
192 212
193 assert f.valid_field_value?(nil) 213 assert f.valid_field_value?(nil)
194 assert f.valid_field_value?('') 214 assert f.valid_field_value?('')
215 assert !f.valid_field_value?(' ')
195 assert f.valid_field_value?([]) 216 assert f.valid_field_value?([])
196 assert f.valid_field_value?([nil]) 217 assert f.valid_field_value?([nil])
197 assert f.valid_field_value?(['']) 218 assert f.valid_field_value?([''])
219 assert !f.valid_field_value?([' '])
198 220
199 assert f.valid_field_value?('value2') 221 assert f.valid_field_value?('value2')
200 assert !f.valid_field_value?('abc') 222 assert !f.valid_field_value?('abc')
201 223
202 assert f.valid_field_value?(['value2']) 224 assert f.valid_field_value?(['value2'])
205 assert f.valid_field_value?(['', 'value2']) 227 assert f.valid_field_value?(['', 'value2'])
206 assert !f.valid_field_value?(['', 'abc']) 228 assert !f.valid_field_value?(['', 'abc'])
207 229
208 assert f.valid_field_value?(['value1', 'value2']) 230 assert f.valid_field_value?(['value1', 'value2'])
209 assert !f.valid_field_value?(['value1', 'abc']) 231 assert !f.valid_field_value?(['value1', 'abc'])
232 end
233
234 def test_changing_multiple_to_false_should_delete_multiple_values
235 field = ProjectCustomField.create!(:name => 'field', :field_format => 'list', :multiple => 'true', :possible_values => ['field1', 'field2'])
236 other = ProjectCustomField.create!(:name => 'other', :field_format => 'list', :multiple => 'true', :possible_values => ['other1', 'other2'])
237
238 item_with_multiple_values = Project.generate!(:custom_field_values => {field.id => ['field1', 'field2'], other.id => ['other1', 'other2']})
239 item_with_single_values = Project.generate!(:custom_field_values => {field.id => ['field1'], other.id => ['other2']})
240
241 assert_difference 'CustomValue.count', -1 do
242 field.multiple = false
243 field.save!
244 end
245
246 item_with_multiple_values = Project.find(item_with_multiple_values.id)
247 assert_kind_of String, item_with_multiple_values.custom_field_value(field)
248 assert_kind_of Array, item_with_multiple_values.custom_field_value(other)
249 assert_equal 2, item_with_multiple_values.custom_field_value(other).size
210 end 250 end
211 251
212 def test_value_class_should_return_the_class_used_for_fields_values 252 def test_value_class_should_return_the_class_used_for_fields_values
213 assert_equal User, CustomField.new(:field_format => 'user').value_class 253 assert_equal User, CustomField.new(:field_format => 'user').value_class
214 assert_equal Version, CustomField.new(:field_format => 'version').value_class 254 assert_equal Version, CustomField.new(:field_format => 'version').value_class
221 261
222 def test_value_from_keyword_for_list_custom_field 262 def test_value_from_keyword_for_list_custom_field
223 field = CustomField.find(1) 263 field = CustomField.find(1)
224 assert_equal 'PostgreSQL', field.value_from_keyword('postgresql', Issue.find(1)) 264 assert_equal 'PostgreSQL', field.value_from_keyword('postgresql', Issue.find(1))
225 end 265 end
266
267 def test_visibile_scope_with_admin_should_return_all_custom_fields
268 CustomField.delete_all
269 fields = [
270 CustomField.generate!(:visible => true),
271 CustomField.generate!(:visible => false),
272 CustomField.generate!(:visible => false, :role_ids => [1, 3]),
273 CustomField.generate!(:visible => false, :role_ids => [1, 2]),
274 ]
275
276 assert_equal 4, CustomField.visible(User.find(1)).count
277 end
278
279 def test_visibile_scope_with_non_admin_user_should_return_visible_custom_fields
280 CustomField.delete_all
281 fields = [
282 CustomField.generate!(:visible => true),
283 CustomField.generate!(:visible => false),
284 CustomField.generate!(:visible => false, :role_ids => [1, 3]),
285 CustomField.generate!(:visible => false, :role_ids => [1, 2]),
286 ]
287 user = User.generate!
288 User.add_to_project(user, Project.first, Role.find(3))
289
290 assert_equal [fields[0], fields[2]], CustomField.visible(user).order("id").to_a
291 end
292
293 def test_visibile_scope_with_anonymous_user_should_return_visible_custom_fields
294 CustomField.delete_all
295 fields = [
296 CustomField.generate!(:visible => true),
297 CustomField.generate!(:visible => false),
298 CustomField.generate!(:visible => false, :role_ids => [1, 3]),
299 CustomField.generate!(:visible => false, :role_ids => [1, 2]),
300 ]
301
302 assert_equal [fields[0]], CustomField.visible(User.anonymous).order("id").to_a
303 end
304
305 def test_float_cast_blank_value_should_return_nil
306 field = CustomField.new(:field_format => 'float')
307 assert_equal nil, field.cast_value(nil)
308 assert_equal nil, field.cast_value('')
309 end
310
311 def test_float_cast_valid_value_should_return_float
312 field = CustomField.new(:field_format => 'float')
313 assert_equal 12.0, field.cast_value('12')
314 assert_equal 12.5, field.cast_value('12.5')
315 assert_equal 12.5, field.cast_value('+12.5')
316 assert_equal -12.5, field.cast_value('-12.5')
317 end
226 end 318 end