2010-01-07 12:44:35 -05:00
|
|
|
# encoding: utf-8
|
|
|
|
require 'cases/helper'
|
|
|
|
require 'models/person'
|
2011-02-05 19:00:57 -05:00
|
|
|
require 'models/topic'
|
2010-01-07 12:44:35 -05:00
|
|
|
require 'models/person_with_validator'
|
|
|
|
require 'validators/email_validator'
|
2010-12-09 13:30:02 -05:00
|
|
|
require 'validators/namespace/email_validator'
|
2010-01-07 12:44:35 -05:00
|
|
|
|
2010-01-07 13:22:32 -05:00
|
|
|
class ValidatesTest < ActiveModel::TestCase
|
|
|
|
setup :reset_callbacks
|
|
|
|
teardown :reset_callbacks
|
|
|
|
|
|
|
|
def reset_callbacks
|
|
|
|
Person.reset_callbacks(:validate)
|
2011-02-05 19:00:57 -05:00
|
|
|
Topic.reset_callbacks(:validate)
|
2010-01-08 02:37:58 -05:00
|
|
|
PersonWithValidator.reset_callbacks(:validate)
|
2010-01-07 13:22:32 -05:00
|
|
|
end
|
|
|
|
|
2011-12-16 14:17:14 -05:00
|
|
|
def test_validates_with_messages_empty
|
|
|
|
Person.validates :title, :presence => {:message => "" }
|
2011-12-17 06:17:51 -05:00
|
|
|
person = Person.new
|
2011-12-16 14:17:14 -05:00
|
|
|
assert !person.valid?, 'person should not be valid.'
|
|
|
|
end
|
|
|
|
|
2010-01-07 12:44:35 -05:00
|
|
|
def test_validates_with_built_in_validation
|
|
|
|
Person.validates :title, :numericality => true
|
|
|
|
person = Person.new
|
|
|
|
person.valid?
|
2010-01-08 02:37:58 -05:00
|
|
|
assert_equal ['is not a number'], person.errors[:title]
|
2010-01-07 12:44:35 -05:00
|
|
|
end
|
2010-01-07 13:22:32 -05:00
|
|
|
|
2011-02-05 18:37:38 -05:00
|
|
|
def test_validates_with_attribute_specified_as_string
|
|
|
|
Person.validates "title", :numericality => true
|
|
|
|
person = Person.new
|
|
|
|
person.valid?
|
|
|
|
assert_equal ['is not a number'], person.errors[:title]
|
|
|
|
|
|
|
|
person = Person.new
|
|
|
|
person.title = 123
|
|
|
|
assert person.valid?
|
|
|
|
end
|
|
|
|
|
2010-01-07 12:44:35 -05:00
|
|
|
def test_validates_with_built_in_validation_and_options
|
2010-01-08 02:37:58 -05:00
|
|
|
Person.validates :salary, :numericality => { :message => 'my custom message' }
|
2010-01-07 12:44:35 -05:00
|
|
|
person = Person.new
|
|
|
|
person.valid?
|
2010-01-08 02:37:58 -05:00
|
|
|
assert_equal ['my custom message'], person.errors[:salary]
|
2010-01-07 12:44:35 -05:00
|
|
|
end
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2010-01-07 12:44:35 -05:00
|
|
|
def test_validates_with_validator_class
|
|
|
|
Person.validates :karma, :email => true
|
|
|
|
person = Person.new
|
2010-12-09 13:30:02 -05:00
|
|
|
person.valid?
|
|
|
|
assert_equal ['is not an email'], person.errors[:karma]
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_validates_with_namespaced_validator_class
|
|
|
|
Person.validates :karma, :'namespace/email' => true
|
|
|
|
person = Person.new
|
2010-01-07 12:44:35 -05:00
|
|
|
person.valid?
|
2010-01-08 02:37:58 -05:00
|
|
|
assert_equal ['is not an email'], person.errors[:karma]
|
2010-01-07 12:44:35 -05:00
|
|
|
end
|
2010-01-07 13:22:32 -05:00
|
|
|
|
|
|
|
def test_validates_with_if_as_local_conditions
|
|
|
|
Person.validates :karma, :presence => true, :email => { :unless => :condition_is_true }
|
|
|
|
person = Person.new
|
|
|
|
person.valid?
|
2010-01-08 02:37:58 -05:00
|
|
|
assert_equal ["can't be blank"], person.errors[:karma]
|
2010-01-07 13:22:32 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_validates_with_if_as_shared_conditions
|
|
|
|
Person.validates :karma, :presence => true, :email => true, :if => :condition_is_true
|
|
|
|
person = Person.new
|
|
|
|
person.valid?
|
2010-05-16 09:37:57 -04:00
|
|
|
assert_equal ["can't be blank", "is not an email"], person.errors[:karma].sort
|
2010-01-07 13:22:32 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_validates_with_unless_shared_conditions
|
|
|
|
Person.validates :karma, :presence => true, :email => true, :unless => :condition_is_true
|
|
|
|
person = Person.new
|
|
|
|
assert person.valid?
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_validates_with_allow_nil_shared_conditions
|
|
|
|
Person.validates :karma, :length => { :minimum => 20 }, :email => true, :allow_nil => true
|
|
|
|
person = Person.new
|
|
|
|
assert person.valid?
|
|
|
|
end
|
|
|
|
|
2010-01-08 02:37:58 -05:00
|
|
|
def test_validates_with_regexp
|
|
|
|
Person.validates :karma, :format => /positive|negative/
|
|
|
|
person = Person.new
|
|
|
|
assert person.invalid?
|
|
|
|
assert_equal ['is invalid'], person.errors[:karma]
|
|
|
|
person.karma = "positive"
|
|
|
|
assert person.valid?
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_validates_with_array
|
2010-01-08 18:17:16 -05:00
|
|
|
Person.validates :gender, :inclusion => %w(m f)
|
2010-01-08 02:37:58 -05:00
|
|
|
person = Person.new
|
|
|
|
assert person.invalid?
|
2010-01-08 18:17:16 -05:00
|
|
|
assert_equal ['is not included in the list'], person.errors[:gender]
|
|
|
|
person.gender = "m"
|
2010-01-08 02:37:58 -05:00
|
|
|
assert person.valid?
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_validates_with_range
|
2010-01-08 18:17:16 -05:00
|
|
|
Person.validates :karma, :length => 6..20
|
2010-01-08 02:37:58 -05:00
|
|
|
person = Person.new
|
|
|
|
assert person.invalid?
|
2010-01-08 18:17:16 -05:00
|
|
|
assert_equal ['is too short (minimum is 6 characters)'], person.errors[:karma]
|
|
|
|
person.karma = 'something'
|
2010-01-08 02:37:58 -05:00
|
|
|
assert person.valid?
|
|
|
|
end
|
|
|
|
|
2010-01-07 12:44:35 -05:00
|
|
|
def test_validates_with_validator_class_and_options
|
|
|
|
Person.validates :karma, :email => { :message => 'my custom message' }
|
|
|
|
person = Person.new
|
|
|
|
person.valid?
|
2010-01-08 02:37:58 -05:00
|
|
|
assert_equal ['my custom message'], person.errors[:karma]
|
2010-01-07 12:44:35 -05:00
|
|
|
end
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2010-01-07 12:44:35 -05:00
|
|
|
def test_validates_with_unknown_validator
|
|
|
|
assert_raise(ArgumentError) { Person.validates :karma, :unknown => true }
|
|
|
|
end
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2010-01-07 12:44:35 -05:00
|
|
|
def test_validates_with_included_validator
|
|
|
|
PersonWithValidator.validates :title, :presence => true
|
|
|
|
person = PersonWithValidator.new
|
|
|
|
person.valid?
|
2010-01-08 02:37:58 -05:00
|
|
|
assert_equal ['Local validator'], person.errors[:title]
|
2010-01-07 12:44:35 -05:00
|
|
|
end
|
2010-08-14 01:13:00 -04:00
|
|
|
|
2010-01-07 12:44:35 -05:00
|
|
|
def test_validates_with_included_validator_and_options
|
|
|
|
PersonWithValidator.validates :title, :presence => { :custom => ' please' }
|
|
|
|
person = PersonWithValidator.new
|
|
|
|
person.valid?
|
2010-01-08 02:37:58 -05:00
|
|
|
assert_equal ['Local validator please'], person.errors[:title]
|
2010-01-07 12:44:35 -05:00
|
|
|
end
|
2010-09-20 21:35:41 -04:00
|
|
|
|
|
|
|
def test_validates_with_included_validator_and_wildcard_shortcut
|
2012-10-22 13:34:24 -04:00
|
|
|
# Shortcut for PersonWithValidator.validates :title, like: { with: "Mr." }
|
2010-09-20 21:35:41 -04:00
|
|
|
PersonWithValidator.validates :title, :like => "Mr."
|
|
|
|
person = PersonWithValidator.new
|
|
|
|
person.title = "Ms. Pacman"
|
|
|
|
person.valid?
|
|
|
|
assert_equal ['does not appear to be like Mr.'], person.errors[:title]
|
|
|
|
end
|
2011-02-05 19:00:57 -05:00
|
|
|
|
|
|
|
def test_defining_extra_default_keys_for_validates
|
|
|
|
Topic.validates :title, :confirmation => true, :message => 'Y U NO CONFIRM'
|
|
|
|
topic = Topic.new
|
|
|
|
topic.title = "What's happening"
|
|
|
|
topic.title_confirmation = "Not this"
|
|
|
|
assert !topic.valid?
|
2012-04-23 17:16:05 -04:00
|
|
|
assert_equal ['Y U NO CONFIRM'], topic.errors[:title_confirmation]
|
2011-02-05 19:00:57 -05:00
|
|
|
end
|
2010-05-16 09:37:57 -04:00
|
|
|
end
|