comparison test/unit/custom_field_test.rb @ 1464:261b3d9a4903 redmine-2.4

Update to Redmine 2.4 branch rev 12663
author Chris Cannam
date Tue, 14 Jan 2014 14:37:42 +0000
parents 433d4f72a19b
children e248c7af89ec
comparison
equal deleted inserted replaced
1296:038ba2d95de8 1464:261b3d9a4903
1 # Redmine - project management software 1 # Redmine - project management software
2 # Copyright (C) 2006-2012 Jean-Philippe Lang 2 # Copyright (C) 2006-2013 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::CustomFieldFormat.register 'foobar'
67
68 field = CustomField.new(:name => 'Some Custom Field', :field_format => 'foobar')
69 assert field.valid?, 'field should be valid'
70 ensure
71 Redmine::CustomFieldFormat.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
207 221
208 assert f.valid_field_value?(['value1', 'value2']) 222 assert f.valid_field_value?(['value1', 'value2'])
209 assert !f.valid_field_value?(['value1', 'abc']) 223 assert !f.valid_field_value?(['value1', 'abc'])
210 end 224 end
211 225
226 def test_changing_multiple_to_false_should_delete_multiple_values
227 field = ProjectCustomField.create!(:name => 'field', :field_format => 'list', :multiple => 'true', :possible_values => ['field1', 'field2'])
228 other = ProjectCustomField.create!(:name => 'other', :field_format => 'list', :multiple => 'true', :possible_values => ['other1', 'other2'])
229
230 item_with_multiple_values = Project.generate!(:custom_field_values => {field.id => ['field1', 'field2'], other.id => ['other1', 'other2']})
231 item_with_single_values = Project.generate!(:custom_field_values => {field.id => ['field1'], other.id => ['other2']})
232
233 assert_difference 'CustomValue.count', -1 do
234 field.multiple = false
235 field.save!
236 end
237
238 item_with_multiple_values = Project.find(item_with_multiple_values.id)
239 assert_kind_of String, item_with_multiple_values.custom_field_value(field)
240 assert_kind_of Array, item_with_multiple_values.custom_field_value(other)
241 assert_equal 2, item_with_multiple_values.custom_field_value(other).size
242 end
243
212 def test_value_class_should_return_the_class_used_for_fields_values 244 def test_value_class_should_return_the_class_used_for_fields_values
213 assert_equal User, CustomField.new(:field_format => 'user').value_class 245 assert_equal User, CustomField.new(:field_format => 'user').value_class
214 assert_equal Version, CustomField.new(:field_format => 'version').value_class 246 assert_equal Version, CustomField.new(:field_format => 'version').value_class
215 end 247 end
216 248
221 253
222 def test_value_from_keyword_for_list_custom_field 254 def test_value_from_keyword_for_list_custom_field
223 field = CustomField.find(1) 255 field = CustomField.find(1)
224 assert_equal 'PostgreSQL', field.value_from_keyword('postgresql', Issue.find(1)) 256 assert_equal 'PostgreSQL', field.value_from_keyword('postgresql', Issue.find(1))
225 end 257 end
258
259 def test_visibile_scope_with_admin_should_return_all_custom_fields
260 CustomField.delete_all
261 fields = [
262 CustomField.generate!(:visible => true),
263 CustomField.generate!(:visible => false),
264 CustomField.generate!(:visible => false, :role_ids => [1, 3]),
265 CustomField.generate!(:visible => false, :role_ids => [1, 2]),
266 ]
267
268 assert_equal 4, CustomField.visible(User.find(1)).count
269 end
270
271 def test_visibile_scope_with_non_admin_user_should_return_visible_custom_fields
272 CustomField.delete_all
273 fields = [
274 CustomField.generate!(:visible => true),
275 CustomField.generate!(:visible => false),
276 CustomField.generate!(:visible => false, :role_ids => [1, 3]),
277 CustomField.generate!(:visible => false, :role_ids => [1, 2]),
278 ]
279 user = User.generate!
280 User.add_to_project(user, Project.first, Role.find(3))
281
282 assert_equal [fields[0], fields[2]], CustomField.visible(user).order("id").to_a
283 end
284
285 def test_visibile_scope_with_anonymous_user_should_return_visible_custom_fields
286 CustomField.delete_all
287 fields = [
288 CustomField.generate!(:visible => true),
289 CustomField.generate!(:visible => false),
290 CustomField.generate!(:visible => false, :role_ids => [1, 3]),
291 CustomField.generate!(:visible => false, :role_ids => [1, 2]),
292 ]
293
294 assert_equal [fields[0]], CustomField.visible(User.anonymous).order("id").to_a
295 end
226 end 296 end