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