Mercurial > hg > soundsoftware-site
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 |