Sha256: a5e45a8cab9bc33edde832b421f9b681e78daa1daeca7a30cc6c8979a47604d7

Contents?: true

Size: 2 KB

Versions: 45

Compression:

Stored size: 2 KB

Contents

require_relative "spec_helper"

describe "ValidatesAssociated plugin" do
  before do
    @db = Sequel.mock(:autoid=>1, :numrows=>1, :fetch=>{:id=>1, :name=>'a', :c_id=>nil})
    @c = Class.new(Sequel::Model(@db[:cs]))
    @c.plugin :validate_associated
    @c.columns :id, :name, :c_id
    @c.one_to_many :cs, :class=>@c, :key=>:c_id
    @o = @c.load(:id=>1, :name=>'a')
    @db.sqls
  end
  
  it "should return nil when saving if the associated object is invalid when raise_on_save_failure is false" do
    @c.raise_on_save_failure = false
    @c.send(:define_method, :validate){|*| errors.add(:name, 'is b') if name == 'b'}
    o = @c.load(:id=>2, :name=>'b')
    @o.send(:delay_validate_associated_object, @c.association_reflection(:cs), o)
    @o.save.must_be_nil
    @o.errors[:cs].must_equal ["name is b"]
    o.errors[:name].must_equal ['is b']
  end

  it "should support creating new one_to_many and one_to_one objects with presence validations on the foreign key" do
    @c.class_eval do
      plugin :validation_helpers
      def validate
        validates_integer :c_id
        super
      end
    end
    @o.c_id = 5
    @o.send(:delay_validate_associated_object, @c.association_reflection(:cs), @c.load(:id=>2, :name=>'b', :c_id=>2))
    @o.valid?.must_equal true
  end

  it "should should not remove existing values from object when validating" do
    o = @c.load(:id=>2, :name=>'b', :c_id=>3)
    @o.send(:delay_validate_associated_object, @c.association_reflection(:cs), o)
    @o.valid?.must_equal true
    o.c_id.must_equal 3
  end
  
  it "should not attempt to validate associated_object if the :validate=>false option is passed to save" do
    @c.one_to_many :cs, :class=>@c, :key=>:c_id
    @c.send(:define_method, :validate){|*| errors.add(:name, 'is b') if name == 'b'}
    o = @c.load(:id=>2, :name=>'b', :c_id=>3)
    @o.send(:delay_validate_associated_object, @c.association_reflection(:cs), o)
    @o.save(:validate=>false).must_equal @o
    @db.sqls.must_equal ["UPDATE cs SET name = 'a' WHERE (id = 1)"]
  end
end

Version data entries

45 entries across 41 versions & 2 rubygems

Version Path
tdiary-5.1.2 vendor/bundle/ruby/2.6.0/gems/sequel-5.26.0/spec/extensions/validate_associated_spec.rb
tdiary-5.1.1 vendor/bundle/ruby/2.6.0/gems/sequel-5.26.0/spec/extensions/validate_associated_spec.rb
tdiary-5.1.1 vendor/bundle/ruby/2.7.0/gems/sequel-5.29.0/spec/extensions/validate_associated_spec.rb
sequel-5.29.0 spec/extensions/validate_associated_spec.rb
sequel-5.28.0 spec/extensions/validate_associated_spec.rb
sequel-5.27.0 spec/extensions/validate_associated_spec.rb
tdiary-5.1.0 vendor/bundle/gems/sequel-5.26.0/spec/extensions/validate_associated_spec.rb
sequel-5.26.0 spec/extensions/validate_associated_spec.rb
sequel-5.25.0 spec/extensions/validate_associated_spec.rb
sequel-5.24.0 spec/extensions/validate_associated_spec.rb
sequel-5.23.0 spec/extensions/validate_associated_spec.rb
sequel-5.22.0 spec/extensions/validate_associated_spec.rb
sequel-5.21.0 spec/extensions/validate_associated_spec.rb
sequel-5.20.0 spec/extensions/validate_associated_spec.rb
tdiary-5.0.13 vendor/bundle/gems/sequel-5.18.0/spec/extensions/validate_associated_spec.rb
sequel-5.19.0 spec/extensions/validate_associated_spec.rb
tdiary-5.0.12.1 vendor/bundle/gems/sequel-5.18.0/spec/extensions/validate_associated_spec.rb
sequel-5.18.0 spec/extensions/validate_associated_spec.rb
sequel-5.17.0 spec/extensions/validate_associated_spec.rb
sequel-5.16.0 spec/extensions/validate_associated_spec.rb