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