annotate .svn/pristine/ec/ecd4b60dc00a13b08ce25da84aad8d2582d6ea63.svn-base @ 1298:4f746d8966dd redmine_2.3_integration

Merge from redmine-2.3 branch to create new branch redmine-2.3-integration
author Chris Cannam
date Fri, 14 Jun 2013 09:28:30 +0100
parents 622f24f53b42
children
rev   line source
Chris@1295 1 # Redmine - project management software
Chris@1295 2 # Copyright (C) 2006-2012 Jean-Philippe Lang
Chris@1295 3 #
Chris@1295 4 # This program is free software; you can redistribute it and/or
Chris@1295 5 # modify it under the terms of the GNU General Public License
Chris@1295 6 # as published by the Free Software Foundation; either version 2
Chris@1295 7 # of the License, or (at your option) any later version.
Chris@1295 8 #
Chris@1295 9 # This program is distributed in the hope that it will be useful,
Chris@1295 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
Chris@1295 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Chris@1295 12 # GNU General Public License for more details.
Chris@1295 13 #
Chris@1295 14 # You should have received a copy of the GNU General Public License
Chris@1295 15 # along with this program; if not, write to the Free Software
Chris@1295 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Chris@1295 17
Chris@1295 18 require File.expand_path('../../test_helper', __FILE__)
Chris@1295 19
Chris@1295 20 class CustomFieldTest < ActiveSupport::TestCase
Chris@1295 21 fixtures :custom_fields
Chris@1295 22
Chris@1295 23 def test_create
Chris@1295 24 field = UserCustomField.new(:name => 'Money money money', :field_format => 'float')
Chris@1295 25 assert field.save
Chris@1295 26 end
Chris@1295 27
Chris@1295 28 def test_before_validation
Chris@1295 29 field = CustomField.new(:name => 'test_before_validation', :field_format => 'int')
Chris@1295 30 field.searchable = true
Chris@1295 31 assert field.save
Chris@1295 32 assert_equal false, field.searchable
Chris@1295 33 field.searchable = true
Chris@1295 34 assert field.save
Chris@1295 35 assert_equal false, field.searchable
Chris@1295 36 end
Chris@1295 37
Chris@1295 38 def test_regexp_validation
Chris@1295 39 field = IssueCustomField.new(:name => 'regexp', :field_format => 'text', :regexp => '[a-z0-9')
Chris@1295 40 assert !field.save
Chris@1295 41 assert_include I18n.t('activerecord.errors.messages.invalid'),
Chris@1295 42 field.errors[:regexp]
Chris@1295 43 field.regexp = '[a-z0-9]'
Chris@1295 44 assert field.save
Chris@1295 45 end
Chris@1295 46
Chris@1295 47 def test_default_value_should_be_validated
Chris@1295 48 field = CustomField.new(:name => 'Test', :field_format => 'int')
Chris@1295 49 field.default_value = 'abc'
Chris@1295 50 assert !field.valid?
Chris@1295 51 field.default_value = '6'
Chris@1295 52 assert field.valid?
Chris@1295 53 end
Chris@1295 54
Chris@1295 55 def test_default_value_should_not_be_validated_when_blank
Chris@1295 56 field = CustomField.new(:name => 'Test', :field_format => 'list', :possible_values => ['a', 'b'], :is_required => true, :default_value => '')
Chris@1295 57 assert field.valid?
Chris@1295 58 end
Chris@1295 59
Chris@1295 60 def test_should_not_change_field_format_of_existing_custom_field
Chris@1295 61 field = CustomField.find(1)
Chris@1295 62 field.field_format = 'int'
Chris@1295 63 assert_equal 'list', field.field_format
Chris@1295 64 end
Chris@1295 65
Chris@1295 66 def test_possible_values_should_accept_an_array
Chris@1295 67 field = CustomField.new
Chris@1295 68 field.possible_values = ["One value", ""]
Chris@1295 69 assert_equal ["One value"], field.possible_values
Chris@1295 70 end
Chris@1295 71
Chris@1295 72 def test_possible_values_should_accept_a_string
Chris@1295 73 field = CustomField.new
Chris@1295 74 field.possible_values = "One value"
Chris@1295 75 assert_equal ["One value"], field.possible_values
Chris@1295 76 end
Chris@1295 77
Chris@1295 78 def test_possible_values_should_accept_a_multiline_string
Chris@1295 79 field = CustomField.new
Chris@1295 80 field.possible_values = "One value\nAnd another one \r\n \n"
Chris@1295 81 assert_equal ["One value", "And another one"], field.possible_values
Chris@1295 82 end
Chris@1295 83
Chris@1295 84 if "string".respond_to?(:encoding)
Chris@1295 85 def test_possible_values_stored_as_binary_should_be_utf8_encoded
Chris@1295 86 field = CustomField.find(11)
Chris@1295 87 assert_kind_of Array, field.possible_values
Chris@1295 88 assert field.possible_values.size > 0
Chris@1295 89 field.possible_values.each do |value|
Chris@1295 90 assert_equal "UTF-8", value.encoding.name
Chris@1295 91 end
Chris@1295 92 end
Chris@1295 93 end
Chris@1295 94
Chris@1295 95 def test_destroy
Chris@1295 96 field = CustomField.find(1)
Chris@1295 97 assert field.destroy
Chris@1295 98 end
Chris@1295 99
Chris@1295 100 def test_new_subclass_instance_should_return_an_instance
Chris@1295 101 f = CustomField.new_subclass_instance('IssueCustomField')
Chris@1295 102 assert_kind_of IssueCustomField, f
Chris@1295 103 end
Chris@1295 104
Chris@1295 105 def test_new_subclass_instance_should_set_attributes
Chris@1295 106 f = CustomField.new_subclass_instance('IssueCustomField', :name => 'Test')
Chris@1295 107 assert_kind_of IssueCustomField, f
Chris@1295 108 assert_equal 'Test', f.name
Chris@1295 109 end
Chris@1295 110
Chris@1295 111 def test_new_subclass_instance_with_invalid_class_name_should_return_nil
Chris@1295 112 assert_nil CustomField.new_subclass_instance('WrongClassName')
Chris@1295 113 end
Chris@1295 114
Chris@1295 115 def test_new_subclass_instance_with_non_subclass_name_should_return_nil
Chris@1295 116 assert_nil CustomField.new_subclass_instance('Project')
Chris@1295 117 end
Chris@1295 118
Chris@1295 119 def test_string_field_validation_with_blank_value
Chris@1295 120 f = CustomField.new(:field_format => 'string')
Chris@1295 121
Chris@1295 122 assert f.valid_field_value?(nil)
Chris@1295 123 assert f.valid_field_value?('')
Chris@1295 124
Chris@1295 125 f.is_required = true
Chris@1295 126 assert !f.valid_field_value?(nil)
Chris@1295 127 assert !f.valid_field_value?('')
Chris@1295 128 end
Chris@1295 129
Chris@1295 130 def test_string_field_validation_with_min_and_max_lengths
Chris@1295 131 f = CustomField.new(:field_format => 'string', :min_length => 2, :max_length => 5)
Chris@1295 132
Chris@1295 133 assert f.valid_field_value?(nil)
Chris@1295 134 assert f.valid_field_value?('')
Chris@1295 135 assert f.valid_field_value?('a' * 2)
Chris@1295 136 assert !f.valid_field_value?('a')
Chris@1295 137 assert !f.valid_field_value?('a' * 6)
Chris@1295 138 end
Chris@1295 139
Chris@1295 140 def test_string_field_validation_with_regexp
Chris@1295 141 f = CustomField.new(:field_format => 'string', :regexp => '^[A-Z0-9]*$')
Chris@1295 142
Chris@1295 143 assert f.valid_field_value?(nil)
Chris@1295 144 assert f.valid_field_value?('')
Chris@1295 145 assert f.valid_field_value?('ABC')
Chris@1295 146 assert !f.valid_field_value?('abc')
Chris@1295 147 end
Chris@1295 148
Chris@1295 149 def test_date_field_validation
Chris@1295 150 f = CustomField.new(:field_format => 'date')
Chris@1295 151
Chris@1295 152 assert f.valid_field_value?(nil)
Chris@1295 153 assert f.valid_field_value?('')
Chris@1295 154 assert f.valid_field_value?('1975-07-14')
Chris@1295 155 assert !f.valid_field_value?('1975-07-33')
Chris@1295 156 assert !f.valid_field_value?('abc')
Chris@1295 157 end
Chris@1295 158
Chris@1295 159 def test_list_field_validation
Chris@1295 160 f = CustomField.new(:field_format => 'list', :possible_values => ['value1', 'value2'])
Chris@1295 161
Chris@1295 162 assert f.valid_field_value?(nil)
Chris@1295 163 assert f.valid_field_value?('')
Chris@1295 164 assert f.valid_field_value?('value2')
Chris@1295 165 assert !f.valid_field_value?('abc')
Chris@1295 166 end
Chris@1295 167
Chris@1295 168 def test_int_field_validation
Chris@1295 169 f = CustomField.new(:field_format => 'int')
Chris@1295 170
Chris@1295 171 assert f.valid_field_value?(nil)
Chris@1295 172 assert f.valid_field_value?('')
Chris@1295 173 assert f.valid_field_value?('123')
Chris@1295 174 assert f.valid_field_value?('+123')
Chris@1295 175 assert f.valid_field_value?('-123')
Chris@1295 176 assert !f.valid_field_value?('6abc')
Chris@1295 177 end
Chris@1295 178
Chris@1295 179 def test_float_field_validation
Chris@1295 180 f = CustomField.new(:field_format => 'float')
Chris@1295 181
Chris@1295 182 assert f.valid_field_value?(nil)
Chris@1295 183 assert f.valid_field_value?('')
Chris@1295 184 assert f.valid_field_value?('11.2')
Chris@1295 185 assert f.valid_field_value?('-6.250')
Chris@1295 186 assert f.valid_field_value?('5')
Chris@1295 187 assert !f.valid_field_value?('6abc')
Chris@1295 188 end
Chris@1295 189
Chris@1295 190 def test_multi_field_validation
Chris@1295 191 f = CustomField.new(:field_format => 'list', :multiple => 'true', :possible_values => ['value1', 'value2'])
Chris@1295 192
Chris@1295 193 assert f.valid_field_value?(nil)
Chris@1295 194 assert f.valid_field_value?('')
Chris@1295 195 assert f.valid_field_value?([])
Chris@1295 196 assert f.valid_field_value?([nil])
Chris@1295 197 assert f.valid_field_value?([''])
Chris@1295 198
Chris@1295 199 assert f.valid_field_value?('value2')
Chris@1295 200 assert !f.valid_field_value?('abc')
Chris@1295 201
Chris@1295 202 assert f.valid_field_value?(['value2'])
Chris@1295 203 assert !f.valid_field_value?(['abc'])
Chris@1295 204
Chris@1295 205 assert f.valid_field_value?(['', 'value2'])
Chris@1295 206 assert !f.valid_field_value?(['', 'abc'])
Chris@1295 207
Chris@1295 208 assert f.valid_field_value?(['value1', 'value2'])
Chris@1295 209 assert !f.valid_field_value?(['value1', 'abc'])
Chris@1295 210 end
Chris@1295 211
Chris@1295 212 def test_value_class_should_return_the_class_used_for_fields_values
Chris@1295 213 assert_equal User, CustomField.new(:field_format => 'user').value_class
Chris@1295 214 assert_equal Version, CustomField.new(:field_format => 'version').value_class
Chris@1295 215 end
Chris@1295 216
Chris@1295 217 def test_value_class_should_return_nil_for_other_fields
Chris@1295 218 assert_nil CustomField.new(:field_format => 'text').value_class
Chris@1295 219 assert_nil CustomField.new.value_class
Chris@1295 220 end
Chris@1295 221
Chris@1295 222 def test_value_from_keyword_for_list_custom_field
Chris@1295 223 field = CustomField.find(1)
Chris@1295 224 assert_equal 'PostgreSQL', field.value_from_keyword('postgresql', Issue.find(1))
Chris@1295 225 end
Chris@1295 226 end