Sha256: 463d8ea9de799c9a66a63b1f2f2302dc1a21da8fb43b48f43b0cb9d3886cb771

Contents?: true

Size: 1.68 KB

Versions: 7

Compression:

Stored size: 1.68 KB

Contents

require File.join(File.dirname(__FILE__), "spec_helper")

describe "Sequel::Plugins::AssociationProxies" do
  before do
    class ::Tag < Sequel::Model
    end
    class ::Item < Sequel::Model
      plugin :association_proxies
      many_to_many :tags
    end
    @i = Item.load(:id=>1)
    @t = @i.tags
    Item.db.reset
  end 
  after do
    Object.send(:remove_const, :Tag)
    Object.send(:remove_const, :Item)
  end

  it "should send method calls to the associated object array if sent an array method" do
    @i.associations.has_key?(:tags).should == false
    @t.select{|x| false}.should == []
    @i.associations.has_key?(:tags).should == true
  end
  
  it "should send method calls to the association dataset sent another method" do
    @i.associations.has_key?(:tags).should == false
    @t.filter(:a=>1).sql.should == "SELECT tags.* FROM tags INNER JOIN items_tags ON ((items_tags.tag_id = tags.id) AND (items_tags.item_id = 1)) WHERE (a = 1)"
    @i.associations.has_key?(:tags).should == false
  end
  
  it "should reload the cached association if sent an array method and the reload flag was given" do
    @t.select{|x| false}.should == []
    Item.db.sqls.length == 1
    @t.select{|x| false}.should == []
    Item.db.sqls.length == 1
    @i.tags(true).select{|x| false}.should == []
    Item.db.sqls.length == 2
    @t.filter(:a=>1).sql.should == "SELECT tags.* FROM tags INNER JOIN items_tags ON ((items_tags.tag_id = tags.id) AND (items_tags.item_id = 1)) WHERE (a = 1)"
    Item.db.sqls.length == 2
  end
  
  it "should not return a proxy object for associations that do not return an array" do
    Item.many_to_one :tag
    proc{@i.tag.filter(:a=>1)}.should raise_error(NoMethodError)
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
sequel-3.9.0 spec/extensions/association_proxies_spec.rb
sequel-3.8.0 spec/extensions/association_proxies_spec.rb
sequel-3.7.0 spec/extensions/association_proxies_spec.rb
sequel-3.6.0 spec/extensions/association_proxies_spec.rb
sequel-3.5.0 spec/extensions/association_proxies_spec.rb
sequel-3.4.0 spec/extensions/association_proxies_spec.rb
sequel-3.3.0 spec/extensions/association_proxies_spec.rb