diff test/unit/custom_value_test.rb @ 0:513646585e45

* Import Redmine trunk SVN rev 3859
author Chris Cannam
date Fri, 23 Jul 2010 15:52:44 +0100
parents
children af80e5618e9b
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/unit/custom_value_test.rb	Fri Jul 23 15:52:44 2010 +0100
@@ -0,0 +1,123 @@
+# redMine - project management software
+# Copyright (C) 2006-2007  Jean-Philippe Lang
+#
+# 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.
+# 
+# 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.
+# 
+# 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.
+
+require File.dirname(__FILE__) + '/../test_helper'
+
+class CustomValueTest < ActiveSupport::TestCase
+  fixtures :custom_fields, :custom_values, :users
+
+  def test_string_field_validation_with_blank_value
+    f = CustomField.new(:field_format => 'string')
+    v = CustomValue.new(:custom_field => f)
+    
+    v.value = nil
+    assert v.valid?
+    v.value = ''
+    assert v.valid?
+
+    f.is_required = true
+    v.value = nil
+    assert !v.valid?
+    v.value = ''
+    assert !v.valid?
+  end
+  
+  def test_string_field_validation_with_min_and_max_lengths
+    f = CustomField.new(:field_format => 'string', :min_length => 2, :max_length => 5)
+    v = CustomValue.new(:custom_field => f, :value => '')
+    assert v.valid?
+    v.value = 'a'
+    assert !v.valid?
+    v.value = 'a' * 2
+    assert v.valid?
+    v.value = 'a' * 6
+    assert !v.valid?
+  end
+  
+  def test_string_field_validation_with_regexp
+    f = CustomField.new(:field_format => 'string', :regexp => '^[A-Z0-9]*$')
+    v = CustomValue.new(:custom_field => f, :value => '')
+    assert v.valid?
+    v.value = 'abc'
+    assert !v.valid?
+    v.value = 'ABC'
+    assert v.valid?
+  end
+
+  def test_date_field_validation
+    f = CustomField.new(:field_format => 'date')
+    v = CustomValue.new(:custom_field => f, :value => '')
+    assert v.valid?
+    v.value = 'abc'
+    assert !v.valid?
+    v.value = '1975-07-14'
+    assert v.valid?
+  end
+
+  def test_list_field_validation
+    f = CustomField.new(:field_format => 'list', :possible_values => ['value1', 'value2'])
+    v = CustomValue.new(:custom_field => f, :value => '')
+    assert v.valid?
+    v.value = 'abc'
+    assert !v.valid?
+    v.value = 'value2'
+    assert v.valid?
+  end
+
+  def test_int_field_validation
+    f = CustomField.new(:field_format => 'int')
+    v = CustomValue.new(:custom_field => f, :value => '')
+    assert v.valid?
+    v.value = 'abc'
+    assert !v.valid?
+    v.value = '123'
+    assert v.valid?
+    v.value = '+123'
+    assert v.valid?
+    v.value = '-123'
+    assert v.valid?
+  end
+  
+  def test_float_field_validation
+    v = CustomValue.new(:customized => User.find(:first), :custom_field => UserCustomField.find_by_name('Money'))
+    v.value = '11.2'
+    assert v.save
+    v.value = ''
+    assert v.save
+    v.value = '-6.250'
+    assert v.save
+    v.value = '6a'
+    assert !v.save
+  end
+  
+  def test_default_value
+    field = CustomField.find_by_default_value('Default string')
+    assert_not_nil field
+    
+    v = CustomValue.new(:custom_field => field)
+    assert_equal 'Default string', v.value
+
+    v = CustomValue.new(:custom_field => field, :value => 'Not empty')
+    assert_equal 'Not empty', v.value
+  end
+  
+  def test_sti_polymorphic_association
+    # Rails uses top level sti class for polymorphic association. See #3978.
+    assert !User.find(4).custom_values.empty?
+    assert !CustomValue.find(2).customized.nil?
+  end
+end