# coding: utf-8 require "#{File.dirname(__FILE__)}/../spec_helper" describe Bonsai::Page do it "should respond to all" do Bonsai::Page.should respond_to :all end it "should contain pages" do Bonsai::Page.all.first.should be_an_instance_of(Bonsai::Page) end describe "instance" do before :all do @page = Bonsai::Page.find("about-us/history/") end it "should have a slug" do @page.slug.should == "history" end it "should have a name" do @page.name.should == "History" end it "should have a permalink" do @page.permalink.should == "/about-us/history/" end it "should have a ctime" do @page.should respond_to :ctime @page.ctime.should be_an_instance_of(Time) end it "should have an mtime" do @page.should respond_to :mtime @page.mtime.should be_an_instance_of(Time) end it "should remove numbers over 10 from the permalink" do Bonsai::Page.find("many-pages").permalink.should == "/many-pages/" end it "should have a write_path" do @page.write_path.should == "/about-us/history/index.html" end it "should respond to disk path" do @page.disk_path.should == "#{Bonsai.root_dir}/content/1.about-us/history/demo-template.yml" end describe "assets" do it "should have assets" do @page.assets.should be_an_instance_of(Array) @page.assets.length.should == 6 end it "should have the correct name" do @page.assets.first[:name].should == "001" end it "should have the correct path" do @page.assets.first[:path].should == "/about-us/history/001.jpg" end it "should have the correct disk_path" do @page.assets.first[:disk_path].should == File.join(Dir.pwd, "spec/support/content/1.about-us/history/001.jpg") end it "should titleize the name attribute and remove the file extension" do @page.assets[2][:name].should == "A File Asset" end end it "should be equal" do Bonsai::Page.find("about-us").should == Bonsai::Page.find("about-us") end describe "relationships" do before :all do @index = Bonsai::Page.find("index") @about = Bonsai::Page.find("about-us") @history = Bonsai::Page.find("about-us/history") @contact = Bonsai::Page.find("about-us/contact") @child = Bonsai::Page.find("about-us/history/child") end it "should have siblings" do @history.siblings.should be_an_instance_of(Array) @history.siblings.size.should == 1 @history.siblings.should include(@contact) @history.siblings.should_not include(@history) end it "should have a parent" do @history.parent.should == @about end it "should not have a parent" do @about.parent.should == nil end it "should not have a parent for index" do @index.parent.should == nil end it "should have children" do @about.children.should be_an_instance_of(Array) @about.children.size.should == 1 @about.children.should include(@contact) end it "should not have floating pages in the children array" do @about.children.should_not include(@history) end it "should have ancestors" do @child.ancestors.should be_an_instance_of(Array) @child.ancestors.size.should == 2 @child.ancestors.should include(@history) @child.ancestors.should include(@about) end it "should have the ancestors in a top down order" do @child.ancestors.first.should == @about @child.ancestors.last.should == @history end it "index should be a floating page" do @index.floating?.should be_true end it "about should not be a floating page" do @about.floating?.should be_false end end it "should have a template" do @page.template.should be_an_instance_of(Bonsai::Template) end it "should to_hash to its variables" do @page.content[:page_title].should == "About our history" @page.content[:page_title].should_not be_nil end describe "render" do before :all do @output = Bonsai::Page.find("about-us/contact").render end it "should render" do @output.should_not be_nil end it "should replace mustache variables with properties from the content file" do @output.should == "Hello from our template, named Contact\n\nGet in touch\n\n/about-us/contact/images/image001.jpg\n/about-us/contact/child/\n/about-us/contact/magic/image001.jpg\n/about-us/contact/magic/image002.jpg\nThis content should be inserted!\n\n
“A designer knows he has achieved perfection not when there is nothing left to add, but when there is nothing left to take away.”
\n\n– Antoine de Saint-Exupery
" end it "should write in images" do @output.should include "image001.jpg" end # Pages that use a structure yet have no parent page should still render describe "page without parent" do it "should render successfully" do lambda { Bonsai::Page.find("legals/terms-and-conditions").render }.should_not raise_error end end describe "markdown" do it "should not use markdown for single line content" do @output.should =~ /\nGet in touch\n/ end it "should use markdown for multiple line content" do @output.should =~ /“A designer knows he/ end it "should use smartypants" do @output.should =~ /“/ end end end describe "to hash" do before :all do @page = Bonsai::Page.find("about-us/history") end it "should respond to to_hash" do @page.should respond_to(:to_hash) end %w(slug permalink name page_title children siblings parent ancestors magic navigation updated_at created_at).each do |key| it "should have a to_hash key for #{key}" do @page.to_hash.keys.should include(key.to_sym) end end it "should include global site variables from site.yml" do @page.to_hash[:site_name].should == "Bonsai" @page.to_hash[:url].should == "http://tinytree.info" @page.to_hash[:copyright].should == 2010 end describe "disk_assets" do before :all do @vars = @page.to_hash end describe "enum" do it "should not have a child" do @vars.should_not have_key(:child) end it "should have magic" do @vars.should have_key(:magic) end it "it should be a an array of hashes" do @vars[:magic].should be_an_instance_of(Array) @vars[:magic].first.should be_an_instance_of(Hash) @vars[:magic].size.should == 2 end end end end describe "broken page" do before :all do Bonsai::Page.path = "spec/support/broken/content" end after :all do Bonsai::Page.path = "spec/support/content" end it "should exist" do Bonsai::Page.find("page").should be_an_instance_of(Bonsai::Page) end it "should error gracefully" do lambda { Bonsai::Page.find("page").render }.should_not raise_error(ArgumentError) end end end end