Namespace
Methods
- N
- T
-
- teardown,
- test_accessing_instance_of_validator_on_an_attribute,
- test_callback_options_to_validate,
- test_does_not_modify_options_argument,
- test_double_attr_validation_and_error_msg,
- test_dup_validity_is_independent,
- 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_invalid_options_to_validate,
- 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_numericality_validation_with_mutation,
- test_save_without_validation,
- test_single_attr_validation_and_error_msg,
- test_single_error_per_attr_iteration,
- test_single_field_validation,
- test_strict_validation_custom_exception,
- 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_valid_uses_create_context_when_new,
- test_valid_uses_update_context_when_persisted,
- test_valid_using_special_context,
- test_validate,
- test_validate_block,
- test_validate_block_with_params,
- test_validate_with_bang,
- test_validate_with_bang_and_context,
- test_validates_acceptance_of_as_database_column,
- test_validates_acceptance_of_with_non_existent_table,
- test_validates_each,
- test_validates_each_custom_reader,
- test_validates_with_bang,
- test_validates_with_false_hash_value,
- test_validation_order,
- test_validation_with_if_and_on,
- test_validation_with_message_as_proc,
- test_validations_on_the_instance_level,
- test_validators
- V
Class Public methods
new(*)
Link
Instance Public methods
teardown()
Link
test_accessing_instance_of_validator_on_an_attribute()
Link
test_callback_options_to_validate()
Link
# File activemodel/test/cases/validations_test.rb, line 177 def test_callback_options_to_validate klass = Class.new(Topic) do attr_reader :call_sequence def initialize(*) super @call_sequence = [] end private def validator_a @call_sequence << :a end def validator_b @call_sequence << :b end def validator_c @call_sequence << :c end end assert_nothing_raised do klass.validate :validator_a, if: ->{ true } klass.validate :validator_b, prepend: true klass.validate :validator_c, unless: ->{ true } end t = klass.new assert_predicate t, :valid? assert_equal [:b, :a], t.call_sequence end
test_does_not_modify_options_argument()
Link
test_double_attr_validation_and_error_msg()
Link
# File activemodel/test/cases/validations_test.rb, line 37 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_validity_is_independent()
Link
# File activemodel/test/cases/validations_test.rb, line 414 def test_dup_validity_is_independent Topic.validates_presence_of :title topic = Topic.new("title" => "Literature") 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_errors_conversions()
Link
# File activemodel/test/cases/validations_test.rb, line 212 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 = {} 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 79 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 94 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_invalid_options_to_validate()
Link
# File activemodel/test/cases/validations_test.rb, line 168 def test_invalid_options_to_validate error = assert_raises(ArgumentError) do # A common mistake -- we meant to call 'validates' Topic.validate :title, presence: true end message = 'Unknown key: :presence. Valid keys are: :on, :if, :unless, :prepend. Perhaps you meant to call `validates` instead of `validate`?' assert_equal message, error.message end
test_invalid_record_exception()
Link
# File activerecord/test/cases/validations_test.rb, line 70 def test_invalid_record_exception assert_raise(ActiveRecord::RecordInvalid) { WrongReply.create! } assert_raise(ActiveRecord::RecordInvalid) { WrongReply.new.save! } r = WrongReply.new invalid = assert_raise ActiveRecord::RecordInvalid do r.save! end assert_equal r, invalid.record 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 286 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 294 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 309 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 60 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_numericality_validation_with_mutation()
Link
# File activerecord/test/cases/validations_test.rb, line 151 def test_numericality_validation_with_mutation Topic.class_eval do attribute :wibble, ActiveRecord::Type::String.new validates_numericality_of :wibble, only_integer: true end topic = Topic.new(wibble: '123-4567') topic.wibble.gsub!('-', '') assert topic.valid? ensure Topic.reset_column_information end
test_save_without_validation()
Link
test_single_attr_validation_and_error_msg()
Link
# File activemodel/test/cases/validations_test.rb, line 28 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 50 def test_single_error_per_attr_iteration r = Reply.new r.valid? errors = r.errors.collect {|attr, messages| [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 17 def test_single_field_validation r = Reply.new r.title = "There's no content!" assert r.invalid?, "A reply without content should be invalid" assert r.after_validation_performed, "after_validation callback should be called" r.content = "Messa content!" assert r.valid?, "A reply with content should be valid" assert r.after_validation_performed, "after_validation callback should be called" end
test_strict_validation_custom_exception()
Link
test_strict_validation_error_message()
Link
# File activemodel/test/cases/validations_test.rb, line 399 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_valid_uses_create_context_when_new()
Link
# File activerecord/test/cases/validations_test.rb, line 17 def test_valid_uses_create_context_when_new r = WrongReply.new r.title = "Wrong Create" assert_not r.valid? 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_valid_uses_update_context_when_persisted()
Link
# File activerecord/test/cases/validations_test.rb, line 25 def test_valid_uses_update_context_when_persisted r = WrongReply.new r.title = "Bad" r.content = "Good" assert r.save, "First validation should be successful" r.title = "Wrong Update" assert_not r.valid?, "Second validation 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_valid_using_special_context()
Link
# File activerecord/test/cases/validations_test.rb, line 38 def test_valid_using_special_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_not r.valid?(:special_case) assert_equal "Invalid", r.errors[:author_name].join r.author_name = "secret" assert r.valid?(:special_case) end
test_validate()
Link
# File activemodel/test/cases/validations_test.rb, line 341 def test_validate Topic.validate do validates_presence_of :title, :author_name validates_length_of :content, minimum: 10 end topic = Topic.new assert_empty topic.errors topic.validate assert_not_empty topic.errors end
test_validate_block()
Link
# File activemodel/test/cases/validations_test.rb, line 144 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 152 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_with_bang()
Link
test_validate_with_bang_and_context()
Link
# File activerecord/test/cases/validations_test.rb, line 87 def test_validate_with_bang_and_context assert_raise(ActiveRecord::RecordInvalid) do WrongReply.new.validate!(:special_case) end r = WrongReply.new(:title => "Valid title", :author_name => "secret", :content => "Good") assert r.validate!(:special_case) end
test_validates_acceptance_of_as_database_column()
Link
test_validates_acceptance_of_with_non_existent_table()
Link
# File activerecord/test/cases/validations_test.rb, line 123 def test_validates_acceptance_of_with_non_existent_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 116 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 129 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] ensure CustomReader.clear_validators! end
test_validates_with_bang()
Link
test_validates_with_false_hash_value()
Link
test_validation_order()
Link
# File activemodel/test/cases/validations_test.rb, line 228 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_if_and_on()
Link
# File activemodel/test/cases/validations_test.rb, line 253 def test_validation_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_validation_with_message_as_proc()
Link
test_validations_on_the_instance_level()
Link
# File activemodel/test/cases/validations_test.rb, line 327 def test_validations_on_the_instance_level Topic.validates :title, :author_name, presence: true Topic.validates :content, length: { minimum: 10 } topic = Topic.new assert topic.invalid? assert_equal 3, topic.errors.size topic.title = 'Some Title' topic.author_name = 'Some Author' topic.content = 'Some Content Whose Length is more than 10.' assert topic.valid? end
test_validators()
Link
validator_a()
Link
validator_b()
Link