spec/lib/simple_navigation/renderer/base_spec.rb in simple-navigation-2.1.0 vs spec/lib/simple_navigation/renderer/base_spec.rb in simple-navigation-2.2.0

- old
+ new

@@ -1,12 +1,13 @@ require File.dirname(__FILE__) + '/../../../spec_helper' describe SimpleNavigation::Renderer::Base do before(:each) do + @options = stub(:options, :null_object => true) @controller = stub(:controller) SimpleNavigation.stub!(:controller).and_return(@controller) - @base_renderer = SimpleNavigation::Renderer::Base.new + @base_renderer = SimpleNavigation::Renderer::Base.new(@options) end it "should inclue ActionView::Helpers::UrlHelper" do @base_renderer.should respond_to(:link_to) end it "should include ActionView::Helpers::TagHelper" do @@ -19,10 +20,11 @@ it {@base_renderer.should respond_to(:request_forgery_protection_token)} end describe 'initialize' do it {@base_renderer.controller.should == @controller} + it {@base_renderer.options.should == @options} end describe 'controller_method' do context 'delegate a single method' do before(:each) do @@ -52,9 +54,158 @@ end describe 'render' do it "be subclass responsability" do lambda {@base_renderer.render(:container)}.should raise_error('subclass responsibility') + end + end + + describe 'expand_all?' do + context 'option is set' do + context 'expand_all is true' do + before(:each) do + @base_renderer.stub!(:options => {:expand_all => true}) + end + it {@base_renderer.expand_all?.should be_true} + end + context 'expand_all is false' do + before(:each) do + @base_renderer.stub!(:options => {:expand_all => false}) + end + it {@base_renderer.expand_all?.should be_false} + end + end + context 'option is not set' do + before(:each) do + @base_renderer.stub!(:options => {}) + end + it {@base_renderer.expand_all?.should be_false} + end + end + + describe 'level' do + context 'options[level] is set' do + before(:each) do + @base_renderer.stub!(:options => {:level => 1}) + end + it {@base_renderer.level.should == 1} + end + context 'options[level] is not set' do + before(:each) do + @base_renderer.stub!(:options => {}) + end + it {@base_renderer.level.should == :all} + end + end + + describe 'consider_sub_navigation?' do + before(:each) do + @item = stub(:item) + end + context 'item has no subnavigation' do + before(:each) do + @item.stub!(:sub_navigation => nil) + end + it {@base_renderer.send(:consider_sub_navigation?, @item).should be_false} + end + context 'item has subnavigation' do + before(:each) do + @sub_navigation = stub(:sub_navigation) + @item.stub!(:sub_navigation => @sub_navigation) + end + context 'level is something unknown' do + before(:each) do + @base_renderer.stub!(:level => 'unknown') + end + it {@base_renderer.send(:consider_sub_navigation?, @item).should be_false} + end + context 'level is :all' do + before(:each) do + @base_renderer.stub!(:level => :all) + end + it {@base_renderer.send(:consider_sub_navigation?, @item).should be_true} + end + context 'level is an Integer' do + before(:each) do + @base_renderer.stub!(:level => 2) + end + it {@base_renderer.send(:consider_sub_navigation?, @item).should be_false} + end + context 'level is a Range' do + before(:each) do + @base_renderer.stub!(:level => 2..3) + end + context 'subnavs level > range.max' do + before(:each) do + @sub_navigation.stub!(:level => 4) + end + it {@base_renderer.send(:consider_sub_navigation?, @item).should be_false} + end + context 'subnavs level = range.max' do + before(:each) do + @sub_navigation.stub!(:level => 3) + end + it {@base_renderer.send(:consider_sub_navigation?, @item).should be_true} + + end + context 'subnavs level < range.max' do + before(:each) do + @sub_navigation.stub!(:level => 2) + end + it {@base_renderer.send(:consider_sub_navigation?, @item).should be_true} + end + end + end + end + + describe 'include_sub_navigation?' do + before(:each) do + @item = stub(:item) + end + context 'consider_sub_navigation? is true' do + before(:each) do + @base_renderer.stub!(:consider_sub_navigation? => true) + end + context 'expand_sub_navigation? is true' do + before(:each) do + @base_renderer.stub!(:expand_sub_navigation? => true) + end + it {@base_renderer.include_sub_navigation?(@item).should be_true} + end + context 'expand_sub_navigation? is false' do + before(:each) do + @base_renderer.stub!(:expand_sub_navigation? => false) + end + it {@base_renderer.include_sub_navigation?(@item).should be_false} + end + end + context 'consider_sub_navigation is false' do + before(:each) do + @base_renderer.stub!(:consider_sub_navigation? => false) + end + context 'expand_sub_navigation? is true' do + before(:each) do + @base_renderer.stub!(:expand_sub_navigation? => true) + end + it {@base_renderer.include_sub_navigation?(@item).should be_false} + end + context 'expand_sub_navigation? is false' do + before(:each) do + @base_renderer.stub!(:expand_sub_navigation? => false) + end + it {@base_renderer.include_sub_navigation?(@item).should be_false} + end + end + end + + describe 'render_sub_navigation_for' do + before(:each) do + @sub_navigation = stub(:sub_navigation) + @item = stub(:item, :sub_navigation => @sub_navigation) + end + it "should call render on the sub_navigation (passing the options)" do + @sub_navigation.should_receive(:render).with(@options) + @base_renderer.render_sub_navigation_for(@item) end end end