require File.expand_path(File.dirname(__FILE__) + '/spec_helper') class Beer end class OrderedBeerCollection < ActiveCollection::Base model "Beer" order_by "name" end class InheritedOrderedBeerCollection < OrderedBeerCollection end class OverloadedInheritedOrderedBeerCollection < OrderedBeerCollection order_by "created_at DESC" end class NotOrderedBeerCollection < ActiveCollection::Base model "Beer" end describe ActiveCollection, "(order_by)" do context "(without class order_by)" do subject { NotOrderedBeerCollection.new } it "does not have any order on load" do Beer.should_receive(:all).with({}).and_return([]) subject.to_a end it "adds order on instance" do subject.order_by! "id DESC" Beer.should_receive(:all).with(:order => "id DESC").and_return([]) subject.to_a end it "creates a new object with the order_by on #order_by" do col = subject.order_by "id DESC" Beer.should_receive(:all).with(:order => "id DESC").and_return([]) col.to_a end it "doesn't affect the existing object on #order_by" do col = subject.order_by "id DESC" Beer.should_receive(:all).with({}).and_return([]) subject.to_a end end context "(with class order_by)" do subject { OrderedBeerCollection.new } it "sends order when collection loads" do Beer.should_receive(:all).with(:order => "name").and_return([]) subject.to_a end it "does not send order with count" do Beer.should_receive(:count).with({}).and_return(0) subject.empty? end it "overloads order when added to instance" do subject.order_by! "id DESC" Beer.should_receive(:all).with(:order => "id DESC").and_return([]) subject.to_a end end context "(inherited from a class with order_by)" do subject { InheritedOrderedBeerCollection.new } it "sends superclass order on collection loads" do Beer.should_receive(:all).with(:order => "name").and_return([]) subject.to_a end it "overloads order when added to instance" do subject.order_by! "id DESC" Beer.should_receive(:all).with(:order => "id DESC").and_return([]) subject.to_a end end context "(inherited adding order_by)" do subject { OverloadedInheritedOrderedBeerCollection.new } it "overloads superclasses' order" do Beer.should_receive(:all).with(:order => "created_at DESC").and_return([]) subject.to_a end it "overloads order when added to instance" do subject.order_by! "id DESC" Beer.should_receive(:all).with(:order => "id DESC").and_return([]) subject.to_a end end end