test/helpers/test_xml_sitemap.rb in nanoc-3.4.2 vs test/helpers/test_xml_sitemap.rb in nanoc-3.4.3

- old
+ new

@@ -4,100 +4,116 @@ include Nanoc::TestHelpers include Nanoc::Helpers::XMLSitemap + def teardown + @items = nil + @item = nil + @site = nil + super + end + def test_xml_sitemap - if_have 'builder' do + if_have 'builder', 'nokogiri' do # Create items - @items = [ mock, mock, mock, mock ] + @items = [] - # Create item 0 - @items[0].expects(:[]).with(:is_hidden).returns(false) - @items[0].expects(:mtime).times(2).returns(nil) - @items[0].expects(:[]).times(2).with(:changefreq).returns(nil) - @items[0].expects(:[]).times(2).with(:priority).returns(nil) - item_reps = [ mock, mock ] - item_reps[0].expects(:path).returns('/kkk/') - item_reps[0].expects(:raw_path).returns('output/kkk/index.html') - item_reps[1].expects(:path).returns('/lll/') - item_reps[1].expects(:raw_path).returns('output/lll/index.html') - @items[0].expects(:reps).returns(item_reps) - # Create item 1 - @items[1].expects(:[]).with(:is_hidden).returns(true) + @items << Nanoc::Item.new('some content 1', {}, '/item-one/') + self.create_item_rep(@items.last, :one_a, '/item-one/a/') + self.create_item_rep(@items.last, :one_b, '/item-one/b/') # Create item 2 - @items[2].expects(:[]).with(:is_hidden).returns(false) - @items[2].expects(:mtime).times(4).returns(Time.parse('12/07/2004')) - @items[2].expects(:[]).with(:changefreq).times(4).returns('daily') - @items[2].expects(:[]).with(:priority).times(4).returns(0.5) - item_reps = [ mock, mock ] - item_reps[0].expects(:path).returns('/aaa/') - item_reps[0].expects(:raw_path).returns('output/aaa/index.html') - item_reps[1].expects(:path).returns('/bbb/') - item_reps[1].expects(:raw_path).returns('output/bbb/index.html') - @items[2].expects(:reps).returns(item_reps) + @items << Nanoc::Item.new('some content 2', { :is_hidden => true }, '/item-two/') # Create item 3 - @items[3].expects(:[]).with(:is_hidden).returns(false) - item_rep = mock - item_rep.expects(:raw_path).returns(nil) - @items[3].expects(:reps).returns([ item_rep ]) + attrs = { :mtime => Time.parse('2004-07-12'), :changefreq => 'daily', :priority => 0.5 } + @items << Nanoc::Item.new('some content 3', attrs, '/item-three/') + self.create_item_rep(@items.last, :three_a, '/item-three/a/') + self.create_item_rep(@items.last, :three_b, '/item-three/b/') + # Create item 4 + @items << Nanoc::Item.new('some content 4', {}, '/item-four/') + self.create_item_rep(@items.last, :four_a, nil) + # Create sitemap item - @item = mock + @item = Nanoc::Item.new('sitemap content', {}, '/sitemap/') # Create site - config = mock - config.expects(:[]).with(:base_url).at_least_once.returns('http://example.com') - @site = mock - @site.expects(:config).at_least_once.returns(config) + @site = Nanoc::Site.new({ :base_url => 'http://example.com' }) + # Build sitemap + res = xml_sitemap + # Check - xml_sitemap + doc = Nokogiri::XML(res) + urlsets = doc.css('> urlset') + assert_equal 1, urlsets.size + urls = urlsets.css('> url') + assert_equal 4, urls.size + assert_equal 'http://example.com/item-one/a/', urls[0].css('> loc').inner_text + assert_equal 'http://example.com/item-one/b/', urls[1].css('> loc').inner_text + assert_equal 'http://example.com/item-three/a/', urls[2].css('> loc').inner_text + assert_equal 'http://example.com/item-three/b/', urls[3].css('> loc').inner_text + assert_equal '', urls[0].css('> changefreq').inner_text + assert_equal '', urls[1].css('> changefreq').inner_text + assert_equal 'daily', urls[2].css('> changefreq').inner_text + assert_equal 'daily', urls[3].css('> changefreq').inner_text + assert_equal '', urls[0].css('> priority').inner_text + assert_equal '', urls[1].css('> priority').inner_text + assert_equal '0.5', urls[2].css('> priority').inner_text + assert_equal '0.5', urls[3].css('> priority').inner_text + assert_equal '', urls[0].css('> lastmod').inner_text + assert_equal '', urls[1].css('> lastmod').inner_text + assert_equal '2004-07-12', urls[2].css('> lastmod').inner_text + assert_equal '2004-07-12', urls[3].css('> lastmod').inner_text end - ensure - @items = nil - @item = nil - @site = nil end def test_sitemap_with_items_as_param - if_have 'builder' do + if_have 'builder', 'nokogiri' do # Create items - @items = [ mock, mock, mock ] + @items = [] + @items << nil + @items << Nanoc::Item.new('some content 1', {}, '/item-one/') + self.create_item_rep(@items.last, :one_a, '/item-one/a/') + self.create_item_rep(@items.last, :one_b, '/item-one/b/') + @items << nil - # Create item 0 - @items[0].expects(:[]).never - - # Create item 1 - @items[1].expects(:[]).never - - # Create item 2 - @items[2].expects(:mtime).times(2).returns(nil) - @items[2].expects(:[]).times(2).with(:changefreq).returns(nil) - @items[2].expects(:[]).times(2).with(:priority).returns(nil) - item_reps = [ mock, mock ] - item_reps[0].expects(:path).returns('/kkk/') - item_reps[0].expects(:raw_path).returns('output/kkk/index.html') - item_reps[1].expects(:path).returns('/lll/') - item_reps[1].expects(:raw_path).returns('output/lll/index.html') - @items[2].expects(:reps).returns(item_reps) - # Create sitemap item - @item = mock + @item = Nanoc::Item.new('sitemap content', {}, '/sitemap/') # Create site - config = mock - config.expects(:[]).with(:base_url).at_least_once.returns('http://example.com') - @site = mock - @site.expects(:config).at_least_once.returns(config) + @site = Nanoc::Site.new({ :base_url => 'http://example.com' }) + # Build sitemap + res = xml_sitemap(:items => [ @items[1] ]) + # Check - xml_sitemap( - :items => [@items[2]] - ) + doc = Nokogiri::XML(res) + urlsets = doc.css('> urlset') + assert_equal 1, urlsets.size + urls = urlsets.css('> url') + assert_equal 2, urls.size + assert_equal 'http://example.com/item-one/a/', urls[0].css('> loc').inner_text + assert_equal 'http://example.com/item-one/b/', urls[1].css('> loc').inner_text + assert_equal '', urls[0].css('> changefreq').inner_text + assert_equal '', urls[1].css('> changefreq').inner_text + assert_equal '', urls[0].css('> priority').inner_text + assert_equal '', urls[1].css('> priority').inner_text + assert_equal '', urls[0].css('> lastmod').inner_text + assert_equal '', urls[1].css('> lastmod').inner_text end + end + +protected + + def create_item_rep(item, name, path) + rep = Nanoc::ItemRep.new(item, name) + rep.paths = { :last => path } + rep.raw_paths = { :last => path } + item.reps << rep + rep end end