require 'spec_helper' describe Page do before do @site = Site.make end # # context "Validations" do # it { should validate_presence_of :title, :body, :site_id } # it { should belong_to :site } # it { should belong_to :user } # end context "Page content" do before do @page = @site.pages.make(:body => '# hello world') end it "should make markdown into html" do @page.body.should =~ /
testing content body<\/p>/ end it "should have access of original source" do @page.body_source.should == '# hello world' end end context "Page hierachy" do before do @site.pages.count.should == 0 @page = @site.pages.make(:body => 'home page content') end it "should mark the first page of a site as homepage" do @page.root?.should == true @page.children.make(:body => 'second page').root?.should == false end it "all pages without a parent becomes direct children of home page" do page = @site.pages.make(:title => 'standard page') page2 = @site.pages.make(:title => 'standard page 2') @page.children.first.should == page @page.children.second.should == page2 page.root?.should == false page2.root?.should == false end it "should have child pages" do 3.times { @page.children.make } @page.children.count.should == 3 end end context "Page url" do before do @site.pages.count.should == 0 @page = @site.pages.make(:title => 'home page content') end it "should permalink should be valid" do page = @site.pages.make(:title => 'Some of the most complecated page title !@#!123123') page.permalink.should =~ /[a-z0-9-]+/ end it "should make / as root url" do @page.url.should == '/' end it "should make subpage url" do @page.children.make(:title => 'sub page').url.should == '/sub-page' end it "should make url based on all ancestors" do page2 = @page.children.make(:title => 'sub page 2') page2.url.should == '/sub-page-2' page3 = page2.children.make(:title => 'sub sub page') page3.url.should == '/sub-page-2/sub-sub-page' end it "should be able to find by page url" do @site.pages.destroy_all p1 = @site.pages.make(:title => 'home page yo') p2 = p1.children.make(:title => 'about') p3 = p2.children.make(:title => 'about taylor') @site.pages.root.should == p1 @site.pages.find_by_url('/about').should == p2 @site.pages.find_by_url('/about/about-taylor').should == p3 @site.pages.find_by_url('/about/about-taylor/not-exists').should == nil p4 = @site.pages.make(:title => 'sections') p5 = @site.pages.make(:title => 'customer support', :parent => p4) p6 = @site.pages.make(:title => 'Return and Refund', :parent => p5) @site.pages.find_by_url('/sections/customer-support/return-and-refund').should == p6 end end context "Permalink scoping" do it "should be unique permalink within a site" do # Site one @site.pages.make(:title => 'home') @site.pages.make(:title => 'about') @site.pages.make(:title => 'profile') # Site two @site2 = Site.make(:title => 'different site') @site2.pages.make :title => 'home' do |page| page.children.make(:title => 'about', :site => @site2) page.children.make(:title => 'profile', :site => @site2) end @site.pages.find_by_url('about').site.should == @site @site2.pages.find_by_url('about').site.should == @site2 end it "should scoped to a parent_id" do p1 = @site.pages.make(:title => 'home') p2 = @site.pages.make(:title => 'about') p3 = @site.pages.make(:title => 'company') p4 = p3.children.make(:title => 'about') p2.permalink.should == 'about' p4.permalink.should == 'about' @site.pages.find_by_url('about').should == p2 @site.pages.find_by_url('company/about').should == p4 end end context "Tagging" do it "tag list for multiple tagging" do @page = @site.pages.make(:body => 'home page content') @page.tag_list = 'ruby, rails' @page.save @page.should have(2).tags end end # # after do # @site.destroy # end end