# ~*~ encoding: utf-8 ~*~ require File.expand_path(File.join(File.dirname(__FILE__), 'helper')) require File.expand_path '../../lib/gollum/views/page', __FILE__ context "Precious::Views::Page" do setup do @path = cloned_testpath('examples/empty.git') @wiki = Gollum::Wiki.new(@path) end teardown do FileUtils.rm_rf(@path) end test 'guard against malicious filenames' do malicious_title = '' @wiki.write_page(malicious_title, :markdown, 'Is Bilbo a hobbit? Why certainly!') page = @wiki.page(malicious_title) @view = Precious::Views::Page.new @view.instance_variable_set :@page, page @view.instance_variable_set :@content, page.formatted_data @view.instance_variable_set :@h1_title, false assert @view.breadcrumb.include?(">%3Cimg+src%3Dx+onerror%3Dalert%281%29+") end test "h1 title sanitizes correctly" do title = 'H1' @wiki.write_page(title, :markdown, '# 1 & 2 ' + "\n # 3", commit_details) page = @wiki.page(title) @view = Precious::Views::Page.new @view.instance_variable_set :@page, page @view.instance_variable_set :@content, page.formatted_data @view.instance_variable_set :@h1_title, true # Test page_header_from_content(@content) actual = @view.title assert_equal '1 & 2', actual end test "metadata is rendered into a table" do title = 'metadata test' @wiki.write_page(title, :markdown, "---\nsome: metadata\nhere: for you\n---\n# Some markdown\nIn this doc") page = @wiki.page(title) @view = Precious::Views::Page.new @view.instance_variable_set :@page, page assert_equal @view.rendered_metadata, <<-EOS
some here
metadata for you
EOS end test "allow numbered headings based on metadata" do title = 'header enumeration test' @wiki.write_page(title, :markdown, "---\nheader_enum: true\n---\n# Some markdown\nIn this doc") page = @wiki.page(title) @view = Precious::Views::Page.new @view.instance_variable_set :@page, page assert_equal @view.header_enum?, true assert_equal @view.header_enum_style, 'decimal' title = 'header_enum test2' @wiki.write_page(title, :markdown, "---\nheader_enum: 'lower-roman'\n---\n# Some markdown\nIn this doc") page = @wiki.page(title) @view = Precious::Views::Page.new @view.instance_variable_set :@page, page assert_equal @view.header_enum?, true assert_equal @view.header_enum_style, 'lower-roman' # With invalid style title = 'header_enum test3' @wiki.write_page(title, :markdown, "---\nheader_enum: 'roman'\n---\n# Some markdown\nIn this doc") page = @wiki.page(title) @view = Precious::Views::Page.new @view.instance_variable_set :@page, page assert_equal @view.header_enum?, true assert_equal @view.header_enum_style, 'decimal' end test 'page has sha id' do title = 'test' @wiki.write_page(title, :markdown, 'Test' + "\n # 3", commit_details) page = @wiki.page(title) @view = Precious::Views::Page.new @view.instance_variable_set :@page, page assert_equal "594e928cc5dcb6d833dfb86bb36076fd4a84eea7", @view.id end test "h1 title can be disabled" do title = 'H1' @wiki.write_page(title, :markdown, '# 1 & 2 ' + "\n # 3", commit_details) page = @wiki.page(title) @view = Precious::Views::Page.new @view.instance_variable_set :@page, page @view.instance_variable_set :@content, page.formatted_data @view.instance_variable_set :@h1_title, false # Title is based on file name when h1_title is false. actual = @view.title assert_equal title, actual end test "breadcrumbs" do @wiki.write_page('subdir/BC Test 1', :markdown, 'Test', commit_details) page = @wiki.page('subdir/BC Test 1') @view = Precious::Views::Page.new @view.instance_variable_set :@page, page @view.instance_variable_set :@content, page.formatted_data assert_equal @view.breadcrumb, "" # No breadcrumb on unnested page @wiki.write_page('BC Test 2', :markdown, 'Test', commit_details) page = @wiki.page('BC Test 2') @view = Precious::Views::Page.new @view.instance_variable_set :@page, page @view.instance_variable_set :@content, page.formatted_data assert_equal @view.breadcrumb, '' end test "body_side is 'right' by default" do @view = Precious::Views::Page.new assert_equal @view.body_side, "right" end test "body_side is 'left' if bar_side side is 'right'" do @view = Precious::Views::Page.new @view.instance_variable_set :@bar_side, :right assert_equal @view.body_side, "left" end test "links to pages containing ?" do @view = Precious::Views::Page.new assert_equal @view.page_route("Page?"), '/Page%3F' end end