Chris@909: # Redmine - project management software Chris@909: # Copyright (C) 2006-2011 Jean-Philippe Lang Chris@0: # Chris@0: # This program is free software; you can redistribute it and/or Chris@0: # modify it under the terms of the GNU General Public License Chris@0: # as published by the Free Software Foundation; either version 2 Chris@0: # of the License, or (at your option) any later version. Chris@909: # Chris@0: # This program is distributed in the hope that it will be useful, Chris@0: # but WITHOUT ANY WARRANTY; without even the implied warranty of Chris@0: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Chris@0: # GNU General Public License for more details. Chris@909: # Chris@0: # You should have received a copy of the GNU General Public License Chris@0: # along with this program; if not, write to the Free Software Chris@0: # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Chris@0: Chris@119: require File.expand_path('../../test_helper', __FILE__) Chris@0: Chris@0: class CustomValueTest < ActiveSupport::TestCase Chris@0: fixtures :custom_fields, :custom_values, :users Chris@0: Chris@0: def test_string_field_validation_with_blank_value Chris@0: f = CustomField.new(:field_format => 'string') Chris@0: v = CustomValue.new(:custom_field => f) Chris@909: Chris@0: v.value = nil Chris@0: assert v.valid? Chris@0: v.value = '' Chris@0: assert v.valid? Chris@0: Chris@0: f.is_required = true Chris@0: v.value = nil Chris@0: assert !v.valid? Chris@0: v.value = '' Chris@0: assert !v.valid? Chris@0: end Chris@909: Chris@0: def test_string_field_validation_with_min_and_max_lengths Chris@0: f = CustomField.new(:field_format => 'string', :min_length => 2, :max_length => 5) Chris@0: v = CustomValue.new(:custom_field => f, :value => '') Chris@0: assert v.valid? Chris@0: v.value = 'a' Chris@0: assert !v.valid? Chris@0: v.value = 'a' * 2 Chris@0: assert v.valid? Chris@0: v.value = 'a' * 6 Chris@0: assert !v.valid? Chris@0: end Chris@909: Chris@0: def test_string_field_validation_with_regexp Chris@0: f = CustomField.new(:field_format => 'string', :regexp => '^[A-Z0-9]*$') Chris@0: v = CustomValue.new(:custom_field => f, :value => '') Chris@0: assert v.valid? Chris@0: v.value = 'abc' Chris@0: assert !v.valid? Chris@0: v.value = 'ABC' Chris@0: assert v.valid? Chris@0: end Chris@0: Chris@0: def test_date_field_validation Chris@0: f = CustomField.new(:field_format => 'date') Chris@0: v = CustomValue.new(:custom_field => f, :value => '') Chris@0: assert v.valid? Chris@0: v.value = 'abc' Chris@0: assert !v.valid? Chris@909: v.value = '1975-07-33' Chris@909: assert !v.valid? Chris@0: v.value = '1975-07-14' Chris@0: assert v.valid? Chris@0: end Chris@0: Chris@0: def test_list_field_validation Chris@0: f = CustomField.new(:field_format => 'list', :possible_values => ['value1', 'value2']) Chris@0: v = CustomValue.new(:custom_field => f, :value => '') Chris@0: assert v.valid? Chris@0: v.value = 'abc' Chris@0: assert !v.valid? Chris@0: v.value = 'value2' Chris@0: assert v.valid? Chris@0: end Chris@0: Chris@0: def test_int_field_validation Chris@0: f = CustomField.new(:field_format => 'int') Chris@0: v = CustomValue.new(:custom_field => f, :value => '') Chris@0: assert v.valid? Chris@0: v.value = 'abc' Chris@0: assert !v.valid? Chris@0: v.value = '123' Chris@0: assert v.valid? Chris@0: v.value = '+123' Chris@0: assert v.valid? Chris@0: v.value = '-123' Chris@0: assert v.valid? Chris@0: end Chris@909: Chris@0: def test_float_field_validation Chris@0: v = CustomValue.new(:customized => User.find(:first), :custom_field => UserCustomField.find_by_name('Money')) Chris@0: v.value = '11.2' Chris@0: assert v.save Chris@0: v.value = '' Chris@0: assert v.save Chris@0: v.value = '-6.250' Chris@0: assert v.save Chris@0: v.value = '6a' Chris@0: assert !v.save Chris@0: end Chris@909: Chris@0: def test_default_value Chris@0: field = CustomField.find_by_default_value('Default string') Chris@0: assert_not_nil field Chris@909: Chris@0: v = CustomValue.new(:custom_field => field) Chris@0: assert_equal 'Default string', v.value Chris@0: Chris@0: v = CustomValue.new(:custom_field => field, :value => 'Not empty') Chris@0: assert_equal 'Not empty', v.value Chris@0: end Chris@909: Chris@0: def test_sti_polymorphic_association Chris@0: # Rails uses top level sti class for polymorphic association. See #3978. Chris@0: assert !User.find(4).custom_values.empty? Chris@0: assert !CustomValue.find(2).customized.nil? Chris@0: end Chris@0: end