test/functional/validatable_test.rb in validatable-1.1.2 vs test/functional/validatable_test.rb in validatable-1.2.1
- old
+ new
@@ -20,9 +20,138 @@
instance.valid?
assert_equal "is invalid", instance.errors.on(:address)
assert_equal "can't be empty", instance.errors.on(:name)
end
+ test "given a child class with validations, the error is in the parent objects error collection as the mapped attribute" do
+ child_class = Class.new do
+ include Validatable
+ attr_accessor :name, :address
+ validates_presence_of :name
+ end
+ klass = Class.new do
+ include Validatable
+ include_validations_for :child, :map => {:name => :namen}
+ define_method :child do
+ child_class.new
+ end
+ end
+ instance = klass.new
+ instance.valid?
+ assert_equal "can't be empty", instance.errors.on(:namen)
+ end
+
+ test "given a child class with validations, the error is in the parent objects error collection when the 'if' evals to true" do
+ child_class = Class.new do
+ include Validatable
+ attr_accessor :name, :address
+ validates_presence_of :name
+ end
+ klass = Class.new do
+ include Validatable
+ include_validations_for :child, :if => lambda { true }
+ define_method :child do
+ child_class.new
+ end
+ end
+ instance = klass.new
+ instance.valid?
+ assert_equal "can't be empty", instance.errors.on(:name)
+ end
+
+ test "given a child class with validations, the error is not in the parent objects error collection when the if evals to false" do
+ child_class = Class.new do
+ include Validatable
+ attr_accessor :name, :address
+ validates_presence_of :name
+ end
+ klass = Class.new do
+ include Validatable
+ include_validations_for :child, :if => lambda { false }
+ define_method :child do
+ child_class.new
+ end
+ end
+ instance = klass.new
+ assert_equal true, instance.valid?
+ 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
+ end
+ instance = klass.new
+ assert_equal true, instance.valid?(:group_two)
+ end
+
+ test "after validate is called following a validation" do
+ klass = Class.new do
+ include Validatable
+ validates_presence_of :name
+ attr_accessor :name
+ end
+
+ Validatable::ValidationBase.class_eval do
+ after_validate do |result, instance, attribute|
+ instance.errors.add(attribute, instance.errors.on(attribute) + " changed message")
+ end
+ end
+ Validatable::ValidatesPresenceOf.class_eval do
+ after_validate do |result, instance, attribute|
+ instance.errors.add(attribute, instance.errors.on(attribute) + " twice")
+ end
+ end
+ instance = klass.new
+ instance.valid?
+ assert_equal "can't be empty twice changed message", instance.errors.on(:name)
+ Validatable::ValidatesPresenceOf.after_validations.clear
+ Validatable::ValidationBase.after_validations.clear
+ end
+
+ test "matching groups are used as validations when multiple groups are given to valid" 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?(: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)
+ 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
validates_presence_of :name, :times => 1
attr_accessor :name
\ No newline at end of file