# ~*~ encoding: utf-8 ~*~
require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
require File.expand_path '../../lib/gollum/views/overview', __FILE__
FakePageResult = Struct.new(:path) do
def name
File.basename(path, File.extname(path)).gsub("-", " ")
end
alias filename name
def escaped_url_path
CGI.escape(path).gsub(/\..+$/, "").gsub("%2F", "/")
end
def url_path
path
end
def format
true
end
end
FakeFileResult = Struct.new(:path) do
def name
File.basename(path).gsub("-", " ")
end
alias filename name
def url_path
path
end
def escaped_url_path
result = path.sub(/\/[^\/]+$/, '/')
result = result << name if result.include?('/')
CGI.escape(result).gsub("%2F", "/")
end
end
context "Precious::Views::Overview" do
setup do
@page = Precious::Views::Overview.new
end
test "breadcrumb" do
@page.instance_variable_set("@path", "Mordor/Eye-Of-Sauron/Saruman")
@page.instance_variable_set("@base_url", "")
assert_equal "", @page.breadcrumb
end
test 'guard against malicious filenames' do
malicious_title = ''
@page.instance_variable_set("@path", malicious_title)
@page.instance_variable_set("@base_url", "")
assert @page.breadcrumb.include?(">%3Cimg+src%3Dx+onerror%3Dalert%281%29+")
end
test "breadcrumb with no path" do
assert_equal 'Home', @page.breadcrumb
end
test "folders first" do
@page.instance_variable_set("@base_url", "")
results = [FakePageResult.new("Gondor/Bromir.md"), FakePageResult.new("Hobbit.md"), FakePageResult.new("Home.md"), FakePageResult.new("Mordor/Eye-Of-Sauron.md"), FakePageResult.new("Mordor/todo.md"), FakePageResult.new("Rivendell/Elrond.md"), FakePageResult.new("My-Precious.md"), FakePageResult.new("Zamin.md"), FakePageResult.new("Samwise-Gamgee.md"), FakePageResult.new("roast-mutton.md"), FakePageResult.new("Bilbo-Baggins.md")]
@page.instance_variable_set("@results", results)
files = 0
folders = 0
results = @page.files_folders
results[0..2].each { |r| assert r[:type] == 'dir' }
results[3..-1].each { |r| assert r[:type] == 'file' }
end
test "files_folders from subdir" do
@page.instance_variable_set("@path", "Mordor")
@page.instance_variable_set("@base_url", "")
results = [FakePageResult.new("Mordor/Eye-Of-Sauron.md"), FakeFileResult.new("Mordor/Aragorn.pdf"), FakePageResult.new("Mordor/Orc/Saruman.md"), FakeFileResult.new("Mordor/.gitkeep")]
@page.instance_variable_set("@results", results)
result = @page.files_folders.first
assert_equal result[:icon].start_with?('