require 'spec_helper' describe Picky::Results::ExactFirst do before(:each) do @exact = stub :exact @partial = stub :partial @category = stub :category, :exact => @exact, :partial => @partial @category.extend described_class end describe "self.wrap" do context "index" do it "wraps each category" do index = Picky::Index.new :some_index index.category :some_category index.extend described_class index.categories.categories.each do |category| category.should be_kind_of(described_class) end end it "returns the index" do index = Picky::Index.new :some_index index.category :some_category index.extend(described_class).should == index end end context "category" do it "wraps the category" do @category.should be_kind_of(described_class) end end end describe 'ids' do it "uses first the exact, then the partial ids" do @exact.stub! :ids => [1,4,5,6] @partial.stub! :ids => [2,3,7] @category.ids(stub(:token, :text => :anything, :partial? => true)).should == [1,4,5,6,2,3,7] end it "uses only the exact ids" do @exact.stub! :ids => [1,4,5,6] @partial.stub! :ids => [2,3,7] @category.ids(stub(:token, :text => :anything, :partial? => false)).should == [1,4,5,6] end end describe 'weight' do context "exact with weight" do before(:each) do @exact.stub! :weight => 0.12 end context "partial with weight" do before(:each) do @partial.stub! :weight => 1.23 end it "uses the higher weight" do @category.weight(stub(:token, :text => :anything, :partial? => true)).should == 1.23 end it "uses the exact weight" do @category.weight(stub(:token, :text => :anything, :partial? => false)).should == 0.12 end end context "partial without weight" do before(:each) do @partial.stub! :weight => nil end it "uses the exact weight" do @category.weight(stub(:token, :text => :anything, :partial? => true)).should == 0.12 end it "uses the exact weight" do @category.weight(stub(:token, :text => :anything, :partial? => false)).should == 0.12 end end end context "exact without weight" do before(:each) do @exact.stub! :weight => nil end context "partial with weight" do before(:each) do @partial.stub! :weight => 0.12 end it "uses the partial weight" do @category.weight(stub(:token, :text => :anything, :partial? => true)).should == 0.12 end it "uses the exact weight" do @category.weight(stub(:token, :text => :anything, :partial? => false)).should == nil end end context "partial without weight" do before(:each) do @partial.stub! :weight => nil end it "is nil" do @category.weight(stub(:token, :text => :anything, :partial? => true)).should == nil end it "is nil" do @category.weight(stub(:token, :text => :anything, :partial? => false)).should == nil end end end end end