test/functional/validatable_test.rb in validatable-1.2.1 vs test/functional/validatable_test.rb in validatable-1.2.2
- old
+ new
@@ -1,9 +1,22 @@
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
module Functional
class ValidatableTest < Test::Unit::TestCase
+ test "validations are only executed once" do
+ if_condition = mock
+ if_condition.expects(:where?).times 2
+ klass = Class.new do
+ include Validatable
+ attr_accessor :name, :address
+ validates_presence_of :name, :if => lambda { if_condition.where? }
+ validates_presence_of :address, :if => lambda { if_condition.where? }
+ end
+ instance = klass.new
+ instance.valid?
+ end
+
test "given a child class with validations, when parent class is validated, then the error is in the parent objects error collection" do
child_class = Class.new do
include Validatable
attr_accessor :name, :address
validates_presence_of :name
@@ -73,18 +86,34 @@
end
instance = klass.new
assert_equal true, instance.valid?
end
+ test "classes only have valid_for_* methods for groups that appear in their validations" do
+ class_with_group_one = Class.new do
+ include Validatable
+ validates_presence_of :name, :groups => :group_one
+ attr_accessor :name
+ end
+ class_with_group_two = Class.new do
+ include Validatable
+ validates_presence_of :name, :groups => :group_two
+ attr_accessor :name
+ end
+ assert_equal false, class_with_group_one.public_instance_methods.include?(:valid_for_group_two?)
+ assert_equal false, class_with_group_two.public_instance_methods.include?(:valid_for_group_one?)
+ end
+
test "nonmatching groups are not used as validations" do
klass = Class.new do
include Validatable
validates_presence_of :name, :groups => :group_one
- attr_accessor :name
+ validates_presence_of :address, :groups => :group_two
+ attr_accessor :name, :address
end
instance = klass.new
- assert_equal true, instance.valid?(:group_two)
+ assert_equal nil, instance.errors.on(:name)
end
test "after validate is called following a validation" do
klass = Class.new do
include Validatable
@@ -114,42 +143,30 @@
include Validatable
validates_presence_of :name, :groups => :group_one
attr_accessor :name
end
instance = klass.new
- assert_equal false, instance.valid?(:group_one)
+ assert_equal false, instance.valid_for_group_one?
end
test "matching groups are used as validations when validations are part of multiple groups" do
klass = Class.new do
include Validatable
validates_presence_of :name, :groups => [:group_one, :group_two]
attr_accessor :name
end
instance = klass.new
- assert_equal false, instance.valid?(:group_one)
+ assert_equal false, instance.valid_for_group_one?
end
test "no group given then all validations are used" do
klass = Class.new do
include Validatable
validates_presence_of :name, :groups => :group_one
attr_accessor :name
end
instance = klass.new
assert_equal false, instance.valid?
- end
-
- test "matching multiple groups for validations" do
- klass = Class.new do
- include Validatable
- validates_presence_of :name, :groups => :group_one
- validates_presence_of :address, :groups => :group_two
- attr_accessor :name, :address
- end
- instance = klass.new
- instance.valid?(:group_one, :group_two)
- assert_equal 2, instance.errors.size
end
expect true do
klass = Class.new do
include Validatable
\ No newline at end of file