require File.dirname(__FILE__) + "/../../spec_helper" describe Admin::NodeHelper do dataset :users_and_pages before :each do @cookies = {} @errors = mock("errors") helper.stub!(:cookies).and_return(@cookies) helper.stub!(:homepage).and_return(nil) @page = mock_model(Page) @page.stub!(:sheet?).and_return(false) # core extension alters the behavior helper.stub!(:image).and_return('') helper.stub!(:admin?).and_return(true) helper.instance_variable_set(:@page, @page) end it "should render a sitemap node" do helper.should_receive(:render).with(:partial => "admin/pages/node", :locals => {:level => 0, :simple => false, :page => @page}).and_return(@current_node) helper.render_node(@page) helper.assigns[:current_node] == @page end it "should show all nodes when on the remove action" do assigns[:controller] = @controller @controller.should_receive(:action_name).and_return("remove") helper.show_all?.should be_true end it "should not show all nodes automatically when not in the remove action" do assigns[:controller] = @controller @controller.should_receive(:action_name).and_return("index") helper.show_all?.should be_false end it "should determine which rows to expand" do @cookies[:expanded_rows] = "1,2,3" helper.expanded_rows.should == [1,2,3] end it "should determine whether the current node should be expanded" do helper.should_receive(:show_all?).and_return(true) helper.expanded.should be_true end it "should determine the left padding for the current level" do helper.padding_left(0).should == 9 helper.padding_left(1).should == 32 helper.padding_left(2).should == 55 end it "should determine the class of a parent node" do assigns[:current_node] = @page child = mock("child") @page.should_receive(:children).and_return([child]) helper.should_receive(:expanded).and_return(true) helper.children_class.should == " children_visible" end it "should display an icon for the current node" do assigns[:current_node] = @page @page.should_receive(:virtual?).and_return(false) helper.should_receive(:image).with("page", :class => "icon", :alt => '', :title => '') helper.icon end it "should display the virtual icon if the current node is virtual" do assigns[:current_node] = @page @page.should_receive(:virtual?).and_return(true) helper.should_receive(:image).with("virtual_page", :class => "icon", :alt => '', :title => '') helper.icon end it "should render the title of the current node" do assigns[:current_node] = @page @page.should_receive(:title).and_return("Title") helper.node_title.should == %{Title} end it "should render the title of the current node with HTML entities escaped" do assigns[:current_node] = @page @page.should_receive(:title).and_return("Ham & Cheese") helper.node_title.should == %{Ham & Cheese} end it "should render the page type if it's not Page" do assigns[:current_node] = @page @class = mock("Class") @page.should_receive(:class).and_return(@class) @class.should_receive(:display_name).and_return("Special") helper.page_type.should == %{(Special)} end it "should not render the page type if it's Page" do assigns[:current_node] = @page @page.should_receive(:class).and_return(Page) helper.page_type.should == %{} end it "should render the busy spinner" do assigns[:current_node] = @page @page.should_receive(:id).and_return(1) helper.should_receive(:image).with('spinner.gif', :class => 'busy', :id => "busy_1", :alt => "", :title => "", :style => 'display: none;') helper.spinner end describe "#child_link_for" do it "should disable the menu when there are no allowable children" do @page.stub!(:allowed_children).and_return([]) helper.child_link_for(@page).should match('') end it "should link to Page#new when there is one allowable child" do @page.stub!(:allowed_children).and_return([Page]) helper.child_link_for(@page).should match(Regexp.escape(new_admin_page_child_path(@page, :page_class => 'Page'))) end it "should show the menu when there are multiple allowable children" do @page.stub!(:allowed_children).and_return([Page,FileNotFoundPage]) helper.child_link_for(@page).should match("#allowed_children_#{@page.id}") end end describe "#children_for" do it "should not show virtual pages to designers" do helper.stub!(:admin?).and_return(false) @page.stub!(:allowed_children).and_return([Page, ArchivePage, FileNotFoundPage]) helper.children_for(@page).flatten.should_not include(FileNotFoundPage) end end describe '#clean_page_description' do it "should remove all whitespace (except single spaces) from the given page's description" do @page.stub!(:description).and_return(%{ This is the description for the current page! }) helper.clean_page_description(@page).should == 'This is the description for the current page!' end end describe '#child_menu_for' do it "should be empty if there are no options" do helper.stub!(:children_for).and_return([]) helper.child_menu_for(@page).should be_nil end it "should list options if there are any" do helper.stub!(:children_for).and_return([Page, FileNotFoundPage]) @page.stub!(:default_child).and_return(Page) menu = helper.child_menu_for(@page) menu.should match(/Normal Page/) end end end