diff --git a/activerecord/test/cases/validations_test.rb b/activerecord/test/cases/validations_test.rb index c20f5ae..6c3f41c 100644 --- a/activerecord/test/cases/validations_test.rb +++ b/activerecord/test/cases/validations_test.rb @@ -916,6 +916,31 @@ class ValidationsTest < ActiveRecord::TestCase end end + def test_validates_size_of_association_using_nested_attributes + require 'models/pirate' + require 'models/bird' + repair_validations(Pirate) do + # A validation that does not work: + # assert_nothing_raised { Pirate.validates_size_of :birds, :minimum => 1 } + # A validation that works: + # assert_nothing_raised do + # Pirate.validates_each(:birds) do |record, attr, value| + # record.errors.add attr, 'is too short.' if value.reject { |v| v.marked_for_destruction? }.size < 1 + # end + # end + p = Pirate.new('catchphrase' => 'hey!!') + assert !p.save + assert p.errors.on(:birds) + bird = p.birds.build('name' => 'birdname') + assert p.valid? + assert p.save + bird = p.birds.first + p.attributes = {:birds_attributes => { '1' => {:_delete => 1, :id => bird.id} } } + assert !p.valid? + assert p.errors.on(:birds) + end + end + def test_validates_size_of_association_using_within repair_validations(Owner) do assert_nothing_raised { Owner.validates_size_of :pets, :within => 1..2 }