The validations are tested thoroughly under ActiveModel::Validations This test case simply makes sure that they are all accessible by Active Resource objects.
Methods
- N
- S
- T
-
- teardown,
- test_accessing_instance_of_validator_on_an_attribute,
- test_client_side_validation_maximum,
- test_create_with_exceptions_using_scope_and_empty_attributes,
- test_create_with_exceptions_using_scope_for_protected_attributes,
- test_create_without_validation,
- test_double_attr_validation_and_error_msg,
- test_dup_call_parent_dup_when_include_validations,
- test_dup_validity_is_independent,
- test_error_on_create,
- test_error_on_given_context,
- test_error_on_update,
- test_errors_conversions,
- test_errors_empty_after_errors_on_check,
- test_errors_on_base,
- test_errors_on_base_with_symbol_message,
- test_errors_on_nested_attributes_expands_name,
- test_exception_on_create_bang_many,
- test_exception_on_create_bang_many_with_block,
- test_exception_on_create_bang_with_block,
- test_fails_save!,
- test_invalid_record_exception,
- test_invalid_should_be_the_opposite_of_valid,
- test_invalid_validator,
- test_list_of_validators_for_model,
- test_list_of_validators_on_an_attribute,
- test_list_of_validators_on_multiple_attributes,
- test_list_of_validators_will_be_empty_when_empty,
- test_multiple_errors_per_attr_iteration_with_full_error_composition,
- test_save_without_validation,
- test_scoped_create_without_attributes,
- test_single_attr_validation_and_error_msg,
- test_single_error_per_attr_iteration,
- test_single_field_validation,
- test_strict_validation_error_message,
- test_strict_validation_in_custom_validator_helper,
- test_strict_validation_in_validates,
- test_strict_validation_not_fails,
- test_strict_validation_particular_validator,
- test_throw_away_typing,
- test_validate_block,
- test_validate_block_with_params,
- test_validate_callback,
- test_validates_acceptance_of_as_database_column,
- test_validates_acceptance_of_with_non_existant_table,
- test_validates_each,
- test_validates_each_custom_reader,
- test_validates_presence_of,
- test_validates_with_bang,
- test_validation_order,
- test_validation_with_message_as_proc,
- test_validations_on_the_instance_level,
- test_validaton_with_if_and_on,
- test_validators
Constants
| VALID_PROJECT_HASH | = | { :name => "My Project", :description => "A project" } |
Instance Public methods
setup()
Link
teardown()
Link
Most of the tests mess with the validations of Topic, so lets repair it all the time. Other classes we mess with will be dealt with in the specific tests
test_accessing_instance_of_validator_on_an_attribute()
Link
test_client_side_validation_maximum()
Link
test_create_with_exceptions_using_scope_and_empty_attributes()
Link
# File activerecord/test/cases/validations_test.rb, line 110 def test_create_with_exceptions_using_scope_and_empty_attributes assert_nothing_raised do ProtectedPerson.send(:with_scope, :create => { :first_name => "Mary" } ) do person = ProtectedPerson.create! assert_equal person.first_name, "Mary", "should be ok when no attributes are passed to create!" end end end
test_create_with_exceptions_using_scope_for_protected_attributes()
Link
# File activerecord/test/cases/validations_test.rb, line 101 def test_create_with_exceptions_using_scope_for_protected_attributes assert_nothing_raised do ProtectedPerson.send(:with_scope, :create => { :first_name => "Mary" } ) do person = ProtectedPerson.create! :addon => "Addon" assert_equal person.first_name, "Mary", "scope should ignore attr_protected" end end end
test_create_without_validation()
Link
test_double_attr_validation_and_error_msg()
Link
# File activemodel/test/cases/validations_test.rb, line 44 def test_double_attr_validation_and_error_msg r = Reply.new assert r.invalid? assert r.errors[:title].any?, "A reply without title should mark that attribute as invalid" assert_equal ["is Empty"], r.errors["title"], "A reply without title should contain an error" assert r.errors[:content].any?, "A reply without content should mark that attribute as invalid" assert_equal ["is Empty"], r.errors["content"], "A reply without content should contain an error" assert_equal 2, r.errors.count end
test_dup_call_parent_dup_when_include_validations()
Link
# File activemodel/test/cases/validations_test.rb, line 358 def test_dup_call_parent_dup_when_include_validations book = Book.new book['title'] = "Litterature" book['author'] = "Foo" duped = book.dup assert_equal book.keys, duped.keys assert_equal book.values, duped.values end
test_dup_validity_is_independent()
Link
# File activemodel/test/cases/validations_test.rb, line 343 def test_dup_validity_is_independent Topic.validates_presence_of :title topic = Topic.new("title" => "Litterature") topic.valid? duped = topic.dup duped.title = nil assert duped.invalid? topic.title = nil duped.title = 'Mathematics' assert topic.invalid? assert duped.valid? end
test_error_on_create()
Link
# File activerecord/test/cases/validations_test.rb, line 22 def test_error_on_create r = WrongReply.new r.title = "Wrong Create" assert !r.save assert r.errors[:title].any?, "A reply with a bad title should mark that attribute as invalid" assert_equal ["is Wrong Create"], r.errors[:title], "A reply with a bad content should contain an error" end
test_error_on_given_context()
Link
# File activerecord/test/cases/validations_test.rb, line 43 def test_error_on_given_context r = WrongReply.new(:title => "Valid title") assert !r.valid?(:special_case) assert_equal "Invalid", r.errors[:author_name].join r.author_name = "secret" r.content = "Good" assert r.valid?(:special_case) r.author_name = nil assert !r.save(:context => :special_case) assert_equal "Invalid", r.errors[:author_name].join r.author_name = "secret" assert r.save(:context => :special_case) end
test_error_on_update()
Link
# File activerecord/test/cases/validations_test.rb, line 30 def test_error_on_update r = WrongReply.new r.title = "Bad" r.content = "Good" assert r.save, "First save should be successful" r.title = "Wrong Update" assert !r.save, "Second save should fail" assert r.errors[:title].any?, "A reply with a bad title should mark that attribute as invalid" assert_equal ["is Wrong Update"], r.errors[:title], "A reply with a bad content should contain an error" end
test_errors_conversions()
Link
# File activemodel/test/cases/validations_test.rb, line 174 def test_errors_conversions Topic.validates_presence_of %w(title content) t = Topic.new assert t.invalid? xml = t.errors.to_xml assert_match %r{<errors>}, xml assert_match %r{<error>Title can't be blank</error>}, xml assert_match %r{<error>Content can't be blank</error>}, xml hash = ActiveSupport::OrderedHash.new hash[:title] = ["can't be blank"] hash[:content] = ["can't be blank"] assert_equal t.errors.to_json, hash.to_json end
test_errors_empty_after_errors_on_check()
Link
test_errors_on_base()
Link
# File activemodel/test/cases/validations_test.rb, line 87 def test_errors_on_base r = Reply.new r.content = "Mismatch" r.valid? r.errors.add(:base, "Reply is not dignifying") errors = r.errors.to_a.inject([]) { |result, error| result + [error] } assert_equal ["Reply is not dignifying"], r.errors[:base] assert errors.include?("Title is Empty") assert errors.include?("Reply is not dignifying") assert_equal 2, r.errors.count end
test_errors_on_base_with_symbol_message()
Link
# File activemodel/test/cases/validations_test.rb, line 102 def test_errors_on_base_with_symbol_message r = Reply.new r.content = "Mismatch" r.valid? r.errors.add(:base, :invalid) errors = r.errors.to_a.inject([]) { |result, error| result + [error] } assert_equal ["is invalid"], r.errors[:base] assert errors.include?("Title is Empty") assert errors.include?("is invalid") assert_equal 2, r.errors.count end
test_errors_on_nested_attributes_expands_name()
Link
test_exception_on_create_bang_many()
Link
test_exception_on_create_bang_many_with_block()
Link
test_exception_on_create_bang_with_block()
Link
test_fails_save!()
Link
test_invalid_record_exception()
Link
# File activerecord/test/cases/validations_test.rb, line 60 def test_invalid_record_exception assert_raise(ActiveRecord::RecordInvalid) { WrongReply.create! } assert_raise(ActiveRecord::RecordInvalid) { WrongReply.new.save! } begin r = WrongReply.new r.save! flunk rescue ActiveRecord::RecordInvalid => invalid assert_equal r, invalid.record end end
test_invalid_should_be_the_opposite_of_valid()
Link
test_invalid_validator()
Link
test_list_of_validators_for_model()
Link
# File activemodel/test/cases/validations_test.rb, line 248 def test_list_of_validators_for_model Topic.validates_presence_of :title Topic.validates_length_of :title, :minimum => 2 assert_equal 2, Topic.validators.count assert_equal [:presence, :length], Topic.validators.map(&:kind) end
test_list_of_validators_on_an_attribute()
Link
# File activemodel/test/cases/validations_test.rb, line 256 def test_list_of_validators_on_an_attribute Topic.validates_presence_of :title, :content Topic.validates_length_of :title, :minimum => 2 assert_equal 2, Topic.validators_on(:title).count assert_equal [:presence, :length], Topic.validators_on(:title).map(&:kind) assert_equal 1, Topic.validators_on(:content).count assert_equal [:presence], Topic.validators_on(:content).map(&:kind) end
test_list_of_validators_on_multiple_attributes()
Link
# File activemodel/test/cases/validations_test.rb, line 271 def test_list_of_validators_on_multiple_attributes Topic.validates :title, :length => { :minimum => 10 } Topic.validates :author_name, :presence => true, :format => /a/ validators = Topic.validators_on(:title, :author_name) assert_equal [ ActiveModel::Validations::FormatValidator, ActiveModel::Validations::LengthValidator, ActiveModel::Validations::PresenceValidator ], validators.map { |v| v.class }.sort_by { |c| c.to_s } end
test_list_of_validators_will_be_empty_when_empty()
Link
test_multiple_errors_per_attr_iteration_with_full_error_composition()
Link
# File activemodel/test/cases/validations_test.rb, line 68 def test_multiple_errors_per_attr_iteration_with_full_error_composition r = Reply.new r.title = "" r.content = "" r.valid? errors = r.errors.to_a assert_equal "Content is Empty", errors[0] assert_equal "Title is Empty", errors[1] assert_equal 2, r.errors.count end
test_save_without_validation()
Link
test_scoped_create_without_attributes()
Link
test_single_attr_validation_and_error_msg()
Link
# File activemodel/test/cases/validations_test.rb, line 35 def test_single_attr_validation_and_error_msg r = Reply.new r.title = "There's no content!" assert r.invalid? assert r.errors[:content].any?, "A reply without content should mark that attribute as invalid" assert_equal ["is Empty"], r.errors["content"], "A reply without content should contain an error" assert_equal 1, r.errors.count end
test_single_error_per_attr_iteration()
Link
# File activemodel/test/cases/validations_test.rb, line 57 def test_single_error_per_attr_iteration r = Reply.new r.valid? errors = [] r.errors.each {|attr, messages| errors << [attr.to_s, messages] } assert errors.include?(["title", "is Empty"]) assert errors.include?(["content", "is Empty"]) end
test_single_field_validation()
Link
# File activemodel/test/cases/validations_test.rb, line 24 def test_single_field_validation r = Reply.new r.title = "There's no content!" assert r.invalid?, "A reply without content shouldn't be saveable" assert r.after_validation_performed, "after_validation callback should be called" r.content = "Messa content!" assert r.valid?, "A reply with content should be saveable" assert r.after_validation_performed, "after_validation callback should be called" end
test_strict_validation_error_message()
Link
# File activemodel/test/cases/validations_test.rb, line 334 def test_strict_validation_error_message Topic.validates :title, :strict => true, :presence => true exception = assert_raises(ActiveModel::StrictValidationFailed) do Topic.new.valid? end assert_equal "Title can't be blank", exception.message end
test_strict_validation_in_custom_validator_helper()
Link
test_strict_validation_in_validates()
Link
test_strict_validation_not_fails()
Link
test_strict_validation_particular_validator()
Link
test_throw_away_typing()
Link
test_validate_block()
Link
# File activemodel/test/cases/validations_test.rb, line 150 def test_validate_block Topic.validate { errors.add("title", "will never be valid") } t = Topic.new("title" => "Title", "content" => "whatever") assert t.invalid? assert t.errors[:title].any? assert_equal ["will never be valid"], t.errors["title"] end
test_validate_block_with_params()
Link
# File activemodel/test/cases/validations_test.rb, line 158 def test_validate_block_with_params Topic.validate { |topic| topic.errors.add("title", "will never be valid") } t = Topic.new("title" => "Title", "content" => "whatever") assert t.invalid? assert t.errors[:title].any? assert_equal ["will never be valid"], t.errors["title"] end
test_validate_callback()
Link
# File activeresource/test/cases/validations_test.rb, line 39 def test_validate_callback # we have a callback ensuring the description is longer than three letters p = new_project(:description => 'a') assert !p.valid?, "should not be a valid record when it fails a validation callback" assert !p.save, "should not have saved an invalid record" assert_equal ["must be greater than three letters long"], p.errors[:description], "should be an error on description" # should now allow this description p.description = 'abcd' assert p.save, "should have saved after fixing the validation, but had: #{p.errors.inspect}" end
test_validates_acceptance_of_as_database_column()
Link
test_validates_acceptance_of_with_non_existant_table()
Link
# File activerecord/test/cases/validations_test.rb, line 125 def test_validates_acceptance_of_with_non_existant_table Object.const_set :IncorporealModel, Class.new(ActiveRecord::Base) assert_nothing_raised ActiveRecord::StatementInvalid do IncorporealModel.validates_acceptance_of(:incorporeal_column) end end
test_validates_each()
Link
# File activemodel/test/cases/validations_test.rb, line 124 def test_validates_each hits = 0 Topic.validates_each(:title, :content, [:title, :content]) do |record, attr| record.errors.add attr, 'gotcha' hits += 1 end t = Topic.new("title" => "valid", "content" => "whatever") assert t.invalid? assert_equal 4, hits assert_equal %w(gotcha gotcha), t.errors[:title] assert_equal %w(gotcha gotcha), t.errors[:content] end
test_validates_each_custom_reader()
Link
# File activemodel/test/cases/validations_test.rb, line 137 def test_validates_each_custom_reader hits = 0 CustomReader.validates_each(:title, :content, [:title, :content]) do |record, attr| record.errors.add attr, 'gotcha' hits += 1 end t = CustomReader.new("title" => "valid", "content" => "whatever") assert t.invalid? assert_equal 4, hits assert_equal %w(gotcha gotcha), t.errors[:title] assert_equal %w(gotcha gotcha), t.errors[:content] end
test_validates_presence_of()
Link
# File activeresource/test/cases/validations_test.rb, line 17 def test_validates_presence_of p = new_project(:name => nil) assert !p.valid?, "should not be a valid record without name" assert !p.save, "should not have saved an invalid record" assert_equal ["can't be blank"], p.errors[:name], "should have an error on name" p.name = "something" assert p.save, "should have saved after fixing the validation, but had: #{p.errors.inspect}" end
test_validates_with_bang()
Link
test_validation_order()
Link
# File activemodel/test/cases/validations_test.rb, line 190 def test_validation_order Topic.validates_presence_of :title Topic.validates_length_of :title, :minimum => 2 t = Topic.new("title" => "") assert t.invalid? assert_equal "can't be blank", t.errors["title"].first Topic.validates_presence_of :title, :author_name Topic.validate {errors.add('author_email_address', 'will never be valid')} Topic.validates_length_of :title, :content, :minimum => 2 t = Topic.new :title => '' assert t.invalid? assert_equal :title, key = t.errors.keys[0] assert_equal "can't be blank", t.errors[key][0] assert_equal 'is too short (minimum is 2 characters)', t.errors[key][1] assert_equal :author_name, key = t.errors.keys[1] assert_equal "can't be blank", t.errors[key][0] assert_equal :author_email_address, key = t.errors.keys[2] assert_equal 'will never be valid', t.errors[key][0] assert_equal :content, key = t.errors.keys[3] assert_equal 'is too short (minimum is 2 characters)', t.errors[key][0] end
test_validation_with_message_as_proc()
Link
test_validations_on_the_instance_level()
Link
test_validaton_with_if_and_on()
Link
# File activemodel/test/cases/validations_test.rb, line 215 def test_validaton_with_if_and_on Topic.validates_presence_of :title, :if => Proc.new{|x| x.author_name = "bad"; true }, :on => :update t = Topic.new(:title => "") # If block should not fire assert t.valid? assert t.author_name.nil? # If block should fire assert t.invalid?(:update) assert t.author_name == "bad" end
test_validators()
Link
Instance Protected methods