##// END OF EJS Templates
Speeds up rendering of the project list for users who belong to hundreds of projects....
Speeds up rendering of the project list for users who belong to hundreds of projects. git-svn-id: http://svn.redmine.org/redmine/trunk@16123 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r15678:bf5dade8df89
r15741:f8df935dcada
Show More
custom_field_test.rb
335 lines | 11.6 KiB | text/x-ruby | RubyLexer
/ test / unit / custom_field_test.rb
Jean-Philippe Lang
Validate custom field regexp (#8865)....
r6178 # Redmine - project management software
Jean-Philippe Lang
Updates copyright for 2016....
r14856 # Copyright (C) 2006-2016 Jean-Philippe Lang
Jean-Philippe Lang
Added "Float" as a custom field format....
r857 #
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
Toshi MARUYAMA
remove trailing white-spaces from test/unit/custom_field_test.rb....
r6602 #
Jean-Philippe Lang
Added "Float" as a custom field format....
r857 # This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
Toshi MARUYAMA
remove trailing white-spaces from test/unit/custom_field_test.rb....
r6602 #
Jean-Philippe Lang
Added "Float" as a custom field format....
r857 # You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Jean-Baptiste Barth
Use absolute paths in test/**/* requires for Ruby 1.9.2 compatibility. #4050...
r4395 require File.expand_path('../../test_helper', __FILE__)
Jean-Philippe Lang
Added "Float" as a custom field format....
r857
Eric Davis
Upgraded to Rails 2.3.4 (#3597)...
r2773 class CustomFieldTest < ActiveSupport::TestCase
Toshi MARUYAMA
prevent test failures with "trackers is invalid"...
r13190 fixtures :custom_fields, :roles, :projects,
:trackers, :issue_statuses,
:issues
Toshi MARUYAMA
remove trailing white-spaces from test/unit/custom_field_test.rb....
r6602
Jean-Philippe Lang
Added "Float" as a custom field format....
r857 def test_create
field = UserCustomField.new(:name => 'Money money money', :field_format => 'float')
assert field.save
end
Toshi MARUYAMA
remove trailing white-spaces from test/unit/custom_field_test.rb....
r6602
Toshi MARUYAMA
add unit test of CustomField model before_validation...
r8070 def test_before_validation
field = CustomField.new(:name => 'test_before_validation', :field_format => 'int')
field.searchable = true
assert field.save
assert_equal false, field.searchable
field.searchable = true
assert field.save
assert_equal false, field.searchable
end
Jean-Philippe Lang
Validate custom field regexp (#8865)....
r6178 def test_regexp_validation
field = IssueCustomField.new(:name => 'regexp', :field_format => 'text', :regexp => '[a-z0-9')
assert !field.save
Jean-Philippe Lang
Changed assertions to make them work with Rails2/3 ruby1.8/1.9 different behaviours....
r8988 assert_include I18n.t('activerecord.errors.messages.invalid'),
field.errors[:regexp]
Jean-Philippe Lang
Validate custom field regexp (#8865)....
r6178 field.regexp = '[a-z0-9]'
assert field.save
end
Toshi MARUYAMA
remove trailing white-spaces from test/unit/custom_field_test.rb....
r6602
Jean-Philippe Lang
Extracts custom field values validation from CustomValue so that they can be validated globally from the customized object (#1189)....
r8597 def test_default_value_should_be_validated
field = CustomField.new(:name => 'Test', :field_format => 'int')
field.default_value = 'abc'
assert !field.valid?
field.default_value = '6'
assert field.valid?
end
Jean-Philippe Lang
Do not validate blank default custom field value....
r8602 def test_default_value_should_not_be_validated_when_blank
field = CustomField.new(:name => 'Test', :field_format => 'list', :possible_values => ['a', 'b'], :is_required => true, :default_value => '')
assert field.valid?
end
Jean-Philippe Lang
Accept custom field format added at runtime (#15277)....
r12018 def test_field_format_should_be_validated
field = CustomField.new(:name => 'Test', :field_format => 'foo')
assert !field.valid?
end
def test_field_format_validation_should_accept_formats_added_at_runtime
Jean-Philippe Lang
Merged custom fields format refactoring....
r12125 Redmine::FieldFormat.add 'foobar', Class.new(Redmine::FieldFormat::Base)
Jean-Philippe Lang
Accept custom field format added at runtime (#15277)....
r12018
field = CustomField.new(:name => 'Some Custom Field', :field_format => 'foobar')
assert field.valid?, 'field should be valid'
ensure
Jean-Philippe Lang
Merged custom fields format refactoring....
r12125 Redmine::FieldFormat.delete 'foobar'
Jean-Philippe Lang
Accept custom field format added at runtime (#15277)....
r12018 end
Jean-Philippe Lang
Make sure that custom field format cannot be changed....
r10413 def test_should_not_change_field_format_of_existing_custom_field
field = CustomField.find(1)
field.field_format = 'int'
assert_equal 'list', field.field_format
end
Jean-Philippe Lang
Use a textarea for custom fields possible values (#2472)....
r2265 def test_possible_values_should_accept_an_array
field = CustomField.new
field.possible_values = ["One value", ""]
assert_equal ["One value"], field.possible_values
end
Toshi MARUYAMA
remove trailing white-spaces from test/unit/custom_field_test.rb....
r6602
Jean-Philippe Lang
CustomField#possible_values may raise undefined method `force_encoding' error (#19316)....
r13697 def test_possible_values_should_stringify_values
field = CustomField.new
field.possible_values = [1, 2]
assert_equal ["1", "2"], field.possible_values
end
Jean-Philippe Lang
Use a textarea for custom fields possible values (#2472)....
r2265 def test_possible_values_should_accept_a_string
field = CustomField.new
field.possible_values = "One value"
assert_equal ["One value"], field.possible_values
end
Toshi MARUYAMA
remove trailing white-spaces from test/unit/custom_field_test.rb....
r6602
Jean-Philippe Lang
CustomField#possible_values may raise undefined method `force_encoding' error (#19316)....
r13697 def test_possible_values_should_return_utf8_encoded_strings
field = CustomField.new
s = "Value".force_encoding('BINARY')
field.possible_values = s
assert_equal [s], field.possible_values
assert_equal 'UTF-8', field.possible_values.first.encoding.name
end
Jean-Philippe Lang
Use a textarea for custom fields possible values (#2472)....
r2265 def test_possible_values_should_accept_a_multiline_string
field = CustomField.new
field.possible_values = "One value\nAnd another one \r\n \n"
assert_equal ["One value", "And another one"], field.possible_values
end
Toshi MARUYAMA
remove trailing white-spaces from test/unit/custom_field_test.rb....
r6602
Jean-Philippe Lang
Merged rails-4.1 branch (#14534)....
r13100 def test_possible_values_stored_as_binary_should_be_utf8_encoded
field = CustomField.find(11)
assert_kind_of Array, field.possible_values
assert field.possible_values.size > 0
field.possible_values.each do |value|
assert_equal "UTF-8", value.encoding.name
Jean-Philippe Lang
Merged rails-3.2 branch....
r9346 end
end
Jean-Philippe Lang
Added "Float" as a custom field format....
r857 def test_destroy
field = CustomField.find(1)
assert field.destroy
end
Jean-Philippe Lang
Resourcified custom fields....
r8024
def test_new_subclass_instance_should_return_an_instance
f = CustomField.new_subclass_instance('IssueCustomField')
assert_kind_of IssueCustomField, f
end
def test_new_subclass_instance_should_set_attributes
f = CustomField.new_subclass_instance('IssueCustomField', :name => 'Test')
assert_kind_of IssueCustomField, f
assert_equal 'Test', f.name
end
def test_new_subclass_instance_with_invalid_class_name_should_return_nil
assert_nil CustomField.new_subclass_instance('WrongClassName')
end
def test_new_subclass_instance_with_non_subclass_name_should_return_nil
assert_nil CustomField.new_subclass_instance('Project')
end
Jean-Philippe Lang
Extracts custom field values validation from CustomValue so that they can be validated globally from the customized object (#1189)....
r8597
def test_string_field_validation_with_blank_value
f = CustomField.new(:field_format => 'string')
assert f.valid_field_value?(nil)
assert f.valid_field_value?('')
f.is_required = true
assert !f.valid_field_value?(nil)
assert !f.valid_field_value?('')
end
def test_string_field_validation_with_min_and_max_lengths
f = CustomField.new(:field_format => 'string', :min_length => 2, :max_length => 5)
assert f.valid_field_value?(nil)
assert f.valid_field_value?('')
Jean-Philippe Lang
Fixed that non-empty blank strings as custom field values are not properly validated (#16169)....
r12663 assert !f.valid_field_value?(' ')
Jean-Philippe Lang
Extracts custom field values validation from CustomValue so that they can be validated globally from the customized object (#1189)....
r8597 assert f.valid_field_value?('a' * 2)
assert !f.valid_field_value?('a')
assert !f.valid_field_value?('a' * 6)
end
def test_string_field_validation_with_regexp
f = CustomField.new(:field_format => 'string', :regexp => '^[A-Z0-9]*$')
assert f.valid_field_value?(nil)
assert f.valid_field_value?('')
Jean-Philippe Lang
Fixed that non-empty blank strings as custom field values are not properly validated (#16169)....
r12663 assert !f.valid_field_value?(' ')
Jean-Philippe Lang
Extracts custom field values validation from CustomValue so that they can be validated globally from the customized object (#1189)....
r8597 assert f.valid_field_value?('ABC')
assert !f.valid_field_value?('abc')
end
def test_date_field_validation
f = CustomField.new(:field_format => 'date')
assert f.valid_field_value?(nil)
assert f.valid_field_value?('')
Jean-Philippe Lang
Fixed that non-empty blank strings as custom field values are not properly validated (#16169)....
r12663 assert !f.valid_field_value?(' ')
Jean-Philippe Lang
Extracts custom field values validation from CustomValue so that they can be validated globally from the customized object (#1189)....
r8597 assert f.valid_field_value?('1975-07-14')
assert !f.valid_field_value?('1975-07-33')
assert !f.valid_field_value?('abc')
end
def test_list_field_validation
f = CustomField.new(:field_format => 'list', :possible_values => ['value1', 'value2'])
assert f.valid_field_value?(nil)
assert f.valid_field_value?('')
Jean-Philippe Lang
Fixed that non-empty blank strings as custom field values are not properly validated (#16169)....
r12663 assert !f.valid_field_value?(' ')
Jean-Philippe Lang
Extracts custom field values validation from CustomValue so that they can be validated globally from the customized object (#1189)....
r8597 assert f.valid_field_value?('value2')
assert !f.valid_field_value?('abc')
end
def test_int_field_validation
f = CustomField.new(:field_format => 'int')
assert f.valid_field_value?(nil)
assert f.valid_field_value?('')
Jean-Philippe Lang
Fixed that non-empty blank strings as custom field values are not properly validated (#16169)....
r12663 assert !f.valid_field_value?(' ')
Jean-Philippe Lang
Extracts custom field values validation from CustomValue so that they can be validated globally from the customized object (#1189)....
r8597 assert f.valid_field_value?('123')
assert f.valid_field_value?('+123')
assert f.valid_field_value?('-123')
assert !f.valid_field_value?('6abc')
Jean-Philippe Lang
Fixed: Redmine::FieldFormat::IntFormat does not accept "real" Integer values (#18781)....
r13481 assert f.valid_field_value?(123)
Jean-Philippe Lang
Extracts custom field values validation from CustomValue so that they can be validated globally from the customized object (#1189)....
r8597 end
def test_float_field_validation
f = CustomField.new(:field_format => 'float')
assert f.valid_field_value?(nil)
assert f.valid_field_value?('')
Jean-Philippe Lang
Fixed that non-empty blank strings as custom field values are not properly validated (#16169)....
r12663 assert !f.valid_field_value?(' ')
Jean-Philippe Lang
Extracts custom field values validation from CustomValue so that they can be validated globally from the customized object (#1189)....
r8597 assert f.valid_field_value?('11.2')
assert f.valid_field_value?('-6.250')
assert f.valid_field_value?('5')
assert !f.valid_field_value?('6abc')
Jean-Philippe Lang
Fixed: Redmine::FieldFormat::IntFormat does not accept "real" Integer values (#18781)....
r13481 assert f.valid_field_value?(11.2)
Jean-Philippe Lang
Extracts custom field values validation from CustomValue so that they can be validated globally from the customized object (#1189)....
r8597 end
Jean-Philippe Lang
Adds support for multiselect custom fields (#1189)....
r8601
def test_multi_field_validation
f = CustomField.new(:field_format => 'list', :multiple => 'true', :possible_values => ['value1', 'value2'])
assert f.valid_field_value?(nil)
assert f.valid_field_value?('')
Jean-Philippe Lang
Fixed that non-empty blank strings as custom field values are not properly validated (#16169)....
r12663 assert !f.valid_field_value?(' ')
Jean-Philippe Lang
Adds support for multiselect custom fields (#1189)....
r8601 assert f.valid_field_value?([])
assert f.valid_field_value?([nil])
assert f.valid_field_value?([''])
Jean-Philippe Lang
Fixed that non-empty blank strings as custom field values are not properly validated (#16169)....
r12663 assert !f.valid_field_value?([' '])
Jean-Philippe Lang
Adds support for multiselect custom fields (#1189)....
r8601
assert f.valid_field_value?('value2')
assert !f.valid_field_value?('abc')
assert f.valid_field_value?(['value2'])
assert !f.valid_field_value?(['abc'])
assert f.valid_field_value?(['', 'value2'])
assert !f.valid_field_value?(['', 'abc'])
assert f.valid_field_value?(['value1', 'value2'])
assert !f.valid_field_value?(['value1', 'abc'])
end
Jean-Philippe Lang
Ability to group and sort the issue list by user/version custom field (#9419)....
r9890
Jean-Philippe Lang
Ability to uncheck "Multiple values" for existing custom fields (#12251)....
r10937 def test_changing_multiple_to_false_should_delete_multiple_values
field = ProjectCustomField.create!(:name => 'field', :field_format => 'list', :multiple => 'true', :possible_values => ['field1', 'field2'])
other = ProjectCustomField.create!(:name => 'other', :field_format => 'list', :multiple => 'true', :possible_values => ['other1', 'other2'])
item_with_multiple_values = Project.generate!(:custom_field_values => {field.id => ['field1', 'field2'], other.id => ['other1', 'other2']})
item_with_single_values = Project.generate!(:custom_field_values => {field.id => ['field1'], other.id => ['other2']})
assert_difference 'CustomValue.count', -1 do
field.multiple = false
field.save!
end
item_with_multiple_values = Project.find(item_with_multiple_values.id)
assert_kind_of String, item_with_multiple_values.custom_field_value(field)
assert_kind_of Array, item_with_multiple_values.custom_field_value(other)
assert_equal 2, item_with_multiple_values.custom_field_value(other).size
end
Jean-Philippe Lang
Ability to group and sort the issue list by user/version custom field (#9419)....
r9890 def test_value_class_should_return_the_class_used_for_fields_values
Jean-Philippe Lang
Fixed broken test....
r9892 assert_equal User, CustomField.new(:field_format => 'user').value_class
assert_equal Version, CustomField.new(:field_format => 'version').value_class
Jean-Philippe Lang
Ability to group and sort the issue list by user/version custom field (#9419)....
r9890 end
def test_value_class_should_return_nil_for_other_fields
Jean-Philippe Lang
Fixed broken test....
r9892 assert_nil CustomField.new(:field_format => 'text').value_class
assert_nil CustomField.new.value_class
Jean-Philippe Lang
Ability to group and sort the issue list by user/version custom field (#9419)....
r9890 end
Jean-Philippe Lang
Fixed that validation fails when receiving an email with list custom fields (#12400)....
r10763
def test_value_from_keyword_for_list_custom_field
field = CustomField.find(1)
assert_equal 'PostgreSQL', field.value_from_keyword('postgresql', Issue.find(1))
end
Jean-Philippe Lang
Role-based issue custom field visibility (#5037)....
r11782
def test_visibile_scope_with_admin_should_return_all_custom_fields
Jean-Philippe Lang
Don't rely on users fixtures....
r13130 admin = User.generate! {|user| user.admin = true}
Jean-Philippe Lang
Role-based issue custom field visibility (#5037)....
r11782 CustomField.delete_all
fields = [
CustomField.generate!(:visible => true),
CustomField.generate!(:visible => false),
CustomField.generate!(:visible => false, :role_ids => [1, 3]),
CustomField.generate!(:visible => false, :role_ids => [1, 2]),
]
Jean-Philippe Lang
Don't rely on users fixtures....
r13130 assert_equal 4, CustomField.visible(admin).count
Jean-Philippe Lang
Role-based issue custom field visibility (#5037)....
r11782 end
def test_visibile_scope_with_non_admin_user_should_return_visible_custom_fields
CustomField.delete_all
fields = [
CustomField.generate!(:visible => true),
CustomField.generate!(:visible => false),
CustomField.generate!(:visible => false, :role_ids => [1, 3]),
CustomField.generate!(:visible => false, :role_ids => [1, 2]),
]
user = User.generate!
User.add_to_project(user, Project.first, Role.find(3))
assert_equal [fields[0], fields[2]], CustomField.visible(user).order("id").to_a
end
def test_visibile_scope_with_anonymous_user_should_return_visible_custom_fields
CustomField.delete_all
fields = [
CustomField.generate!(:visible => true),
CustomField.generate!(:visible => false),
CustomField.generate!(:visible => false, :role_ids => [1, 3]),
CustomField.generate!(:visible => false, :role_ids => [1, 2]),
]
assert_equal [fields[0]], CustomField.visible(User.anonymous).order("id").to_a
end
Jean-Philippe Lang
Merged custom fields format refactoring....
r12125
def test_float_cast_blank_value_should_return_nil
field = CustomField.new(:field_format => 'float')
Jean-Philippe Lang
Use assert_nil instead of assert_equal....
r15678 assert_nil field.cast_value(nil)
assert_nil field.cast_value('')
Jean-Philippe Lang
Merged custom fields format refactoring....
r12125 end
def test_float_cast_valid_value_should_return_float
field = CustomField.new(:field_format => 'float')
assert_equal 12.0, field.cast_value('12')
assert_equal 12.5, field.cast_value('12.5')
assert_equal 12.5, field.cast_value('+12.5')
assert_equal -12.5, field.cast_value('-12.5')
end
Jean-Philippe Lang
Added "Float" as a custom field format....
r857 end