diff --git a/bin/gollum-migrate-tags b/bin/gollum-migrate-tags index b6e38198..0c2b4359 100755 --- a/bin/gollum-migrate-tags +++ b/bin/gollum-migrate-tags @@ -11,8 +11,11 @@ migrate_options = { :hyphenate => true } -def setting(const) - Object.const_defined?(const.upcase) && Object.const_get(const.upcase) +def setting(variable_name) + class_variable_name = :"@@#{variable_name.to_s}" + + Object.class_variable_defined?(class_variable_name) && + Object.class_variable_get(class_variable_name) end opts = OptionParser.new do |opts| @@ -25,7 +28,7 @@ It finds and repairs Gollum link tags that no longer work under 5.x for three re * 5.x wiki internal links are no longer 'global'. * NB: you can use the --lenient-tag-lookup option in gollum >= 5.x to enable 4.x-backwards compatible tags. - + See https://github.com/gollum/gollum/wiki/5.0-release-notes#filename-handling for more information. Usage of this script comes without any warranty. @@ -38,7 +41,7 @@ You can use the --page-file-dir and --config options as you would normally with Requires a non-bare repository. Recommended usage: 1. Clone your wiki's repository to create a backup. -2. Run this script on your cloned repo. +2. Run this script on your cloned repo. 3. If all looks sane, run the script with the --write option. This will overwrite files in your working directory, but not commit the changes, so you have time to review them. 4. Do a 'git diff' to inspect the changes. 5. Commit the changes if all looks sane, and push/pull them back into your original repo. @@ -52,23 +55,23 @@ EOF opts.on('--page-file-dir [PATH]', 'Specify the subdirectory for all pages. Default: repository root.') do |path| wiki_options[:page_file_dir] = path end - + opts.on('--prefer-relative-links', 'When specified, will try to replace broken links with relative links (\'[[Foo/Bar]]\' instead of \'[[/Subdir/Foo/Bar]]\') where possible.') do migrate_options[:prefer_relative] = true end - + opts.on('--hyphenate', 'Default. Repair links that use spaces instead of hyphens: [[Bilbo Baggins]] -> [[Bilbo-Baggins]]') do migrate_options[:hyphenate] = true end - + opts.on('--no-hyphenate', 'Turn off the --hyphenate option.') do migrate_options[:hyphenate] = false end - + opts.on('--run-silent', 'Don\'t output anything.') do migrate_options[:run_silent] = true end - + opts.on('--write', 'No dry run: actually perform the substitutions.') do migrate_options[:no_dry_run] = true end @@ -78,8 +81,11 @@ end begin opts.parse! migrate_options.each do |setting, value| - const = setting.to_s.upcase - Object.const_set(const, value) unless Object.const_defined?(const) + variable_name = :"@@#{setting.to_s}" + + unless Object.class_variable_defined?(variable_name) + Object.class_variable_set(variable_name, value) + end end wiki_options[:page_file_dir] = setting(:page_file_dir) ? setting(:page_file_dir) : wiki_options[:page_file_dir] # Allow settings :page_file_dir through PAGE_FILE_DIR constant. rescue OptionParser::InvalidOption @@ -88,7 +94,7 @@ rescue OptionParser::InvalidOption exit end -REPO = ARGV[0] || Dir.pwd +wiki_directory = ARGV[0] || Dir.pwd require 'gollum-lib' @@ -98,7 +104,7 @@ if cfg = options[:config] cfg = File.join(Dir.getwd, cfg) unless cfg.slice(0) == File::SEPARATOR require cfg end - + class Gollum::Filter::CodeMigrator < Gollum::Filter::Code def extract(data) case @markup.format @@ -126,7 +132,7 @@ class Gollum::Filter::CodeMigrator < Gollum::Filter::Code next '' if m_end.length < m_start.length lang = m_lang ? m_lang.strip.split.first : nil cache_codeblock($~.to_s) - end + end end data.gsub!(/^([ ]{0,3})``` ?([^\r\n]+)?\r?\n(.+?)\r?\n[ ]{0,3}```[ \t]*\r?$/m) do @@ -134,7 +140,7 @@ class Gollum::Filter::CodeMigrator < Gollum::Filter::Code end data end - + def process(data) return data if data.nil? || data.size.zero? || @map.size.zero? @map.each do |id, block| ## Just put the code blocks back in verbatim @@ -142,23 +148,23 @@ class Gollum::Filter::CodeMigrator < Gollum::Filter::Code end data end - + def cache_codeblock(block) id = "#{open_pattern}#{Digest::SHA1.hexdigest(block)}#{close_pattern}" @map[id] = block id end end - + class ::Gollum::Filter::TagMigrator < Gollum::Filter::Tags def process_tag(tag) link_part, extra = parse_tag_parts(tag) orig_tag = %{[[#{tag}]]} return orig_tag if link_part.nil? - + img_args = extra ? [extra, link_part] : [link_part] mime = MIME::Types.type_for(::File.extname(img_args.first.to_s)).first - + # For any kind of tag other than an internal link: just return the tag. if tag =~ /^_TOC_/ || link_part =~ /^_$/ || link_part =~ /^#{INCLUDE_TAG}/ || (mime && mime.content_type =~ /^image/) || process_external_link_tag(link_part, extra) || process_file_link_tag(link_part, extra) return orig_tag @@ -168,7 +174,7 @@ class ::Gollum::Filter::TagMigrator < Gollum::Filter::Tags link = link_part page = find_page_or_file_from_path(link) anchor = nil - + if page.nil? # No match yet, now try finding the page with anchor removed if pos = link.rindex('#') anchor = link[pos..-1] @@ -203,12 +209,12 @@ class ::Gollum::Filter::TagMigrator < Gollum::Filter::Tags pick = possibles.first return tag_for_pick(pick, orig_tag, extra, anchor, @markup.page.path) end - + end end - + private - + def tag_for_pick(pick, orig_tag, extra, anchor, linking_page_path) pick = if setting(:prefer_relative) overlapping_path = Pathname.new(linking_page_path).dirname.to_s @@ -220,7 +226,7 @@ class ::Gollum::Filter::TagMigrator < Gollum::Filter::Tags end new_tag = extra.nil? ? %{[[#{pick}#{anchor}]]} : %{[[#{extra}|#{pick}#{anchor}]]} log(:info, "#{@markup.page.path}: Changing #{orig_tag} -> #{new_tag}") - new_tag + new_tag end end @@ -232,8 +238,12 @@ end filter_chain = [:PlainTextMigrator, :CodeMigrator, :TagMigrator] -wiki = ::Gollum::Wiki.new(REPO, wiki_options.merge({:filter_chain => filter_chain})) -TREE = wiki.tree_list(wiki.ref, true, true).map {|file| ::File.join('/', file.path)} +wiki = ::Gollum::Wiki.new(wiki_directory, wiki_options.merge({:filter_chain => filter_chain})) + +Object.class_variable_set( + :"@@wiki_tree", + wiki.tree_list(wiki.ref, true, true).map {|file| ::File.join('/', file.path)} +) def find_linked(link) link.gsub!(' ', '-') if setting(:hyphenate) # Match paths containing dashes instead of spaces @@ -243,7 +253,9 @@ def find_linked(link) test_path = ::File.extname(link).empty? ? /#{link}\..+/ : link # Select pages from the wiki whose path =~ 'Foo/Bar/Samwi.*' # Match case-insenstively to mimic 4.x behavior! - TREE.select {|path| path =~ /^\/(.*\/)?#{test_path}/i} + Object.class_variable_get(:"@@wiki_tree").select { |path| + path =~ /^\/(.*\/)?#{test_path}/i + } end def log(kind, msg = nil) @@ -268,4 +280,4 @@ wiki.pages.each do |page| f.close end log(:none, '====') -end \ No newline at end of file +end diff --git a/lib/gollum/app.rb b/lib/gollum/app.rb index 7e3f57cf..8b5a94e4 100644 --- a/lib/gollum/app.rb +++ b/lib/gollum/app.rb @@ -103,8 +103,7 @@ module Precious end before do - settings.wiki_options[:allow_editing] = settings.wiki_options.fetch(:allow_editing, true) - @allow_editing = settings.wiki_options[:allow_editing] + @allow_editing = settings.wiki_options.fetch(:allow_editing, true) @critic_markup = settings.wiki_options[:critic_markup] @redirects_enabled = settings.wiki_options.fetch(:redirects_enabled, true) @per_page_uploads = settings.wiki_options[:per_page_uploads] @@ -112,8 +111,6 @@ module Precious @wiki_title = settings.wiki_options.fetch(:title, 'Gollum Wiki') - forbid unless @allow_editing || request.request_method == 'GET' - if settings.wiki_options[:template_dir] Precious::Views::Layout.extend Precious::Views::TemplateCascade Precious::Views::Layout.template_priority_path = settings.wiki_options[:template_dir] @@ -143,6 +140,8 @@ module Precious config.manifest = Sprockets::Manifest.new(settings.sprockets, @static_assets_path) end end + + forbid unless @allow_editing || request.request_method == 'GET' end get '/' do diff --git a/lib/gollum/views/helpers/locale_helpers.rb b/lib/gollum/views/helpers/locale_helpers.rb index 2f9fb2e7..da15bc76 100644 --- a/lib/gollum/views/helpers/locale_helpers.rb +++ b/lib/gollum/views/helpers/locale_helpers.rb @@ -42,7 +42,7 @@ module Precious end def fill_argument_content(i18n_key, i18n_value) - i18n_value.gsub!(YAML_VARIABLE_REGEXP) do |argument| + i18n_value = i18n_value.gsub(YAML_VARIABLE_REGEXP) do |argument| method_name = argument.gsub(/[^\w]/, '') next if method_name.nil? diff --git a/lib/gollum/views/template_cascade.rb b/lib/gollum/views/template_cascade.rb index 9bddc1cd..ff567332 100644 --- a/lib/gollum/views/template_cascade.rb +++ b/lib/gollum/views/template_cascade.rb @@ -11,9 +11,13 @@ module Precious end def first_path_available(name) - priority = File.join(template_priority_path, "#{name}.#{template_extension}") default = File.join(template_path, "#{name}.#{template_extension}") - File.exists?(priority) ? priority : default + priority = + if template_priority_path + File.join(template_priority_path, "#{name}.#{template_extension}") + end + + priority && File.exist?(priority) ? priority : default end # Method should track lib/mustache/settings.rb from Mustache project. diff --git a/test/helper.rb b/test/helper.rb index 8bf4c7dc..0d992b55 100644 --- a/test/helper.rb +++ b/test/helper.rb @@ -1,18 +1,20 @@ require 'rubygems' require 'rack/test' -require 'test/unit' require 'shoulda' -require 'mocha/setup' -require 'fileutils' +require 'minitest/autorun' require 'minitest/reporters' require 'minitest/spec' +require 'mocha/setup' +require 'fileutils' require 'tmpdir' # Silence locale validation warning require 'i18n' I18n.enforce_available_locales = false -MiniTest::Reporters.use! +Minitest::Reporters.use! [ + Minitest::Reporters::DefaultReporter.new({color: true}) +] dir = File.dirname(File.expand_path(__FILE__)) $LOAD_PATH.unshift(File.join(dir, '..', 'lib')) @@ -62,14 +64,29 @@ def normal(text) text end -# test/spec/mini 3 -# http://gist.github.com/25455 -# chris@ozmm.org -# file:lib/test/spec/mini.rb +# The following configuration originates from this gist: + +# http://gist.github.com/25455 +# +# But it has been modified since it was first committed. It allows you to +# write tests with an RSpec-like DSL: +# +# context "my test context" do +# setup do +# # My test setup +# end +# +# teardown do +# # My test teardown +# end +# +# test "some functionality" do +# assert true +# end +# end def context(*args, &block) return super unless (name = args.first) && block - require 'test/unit' - klass = Class.new(defined?(ActiveSupport::TestCase) ? ActiveSupport::TestCase : Test::Unit::TestCase) do + klass = Class.new(Minitest::Test) do def self.test(name, &block) define_method("test_#{name.gsub(/\W/, '_')}", &block) if block end @@ -85,10 +102,13 @@ def context(*args, &block) define_method(:teardown, &block) end end + ( - class << klass; - self - end).send(:define_method, :name) { name.gsub(/\W/, '_') } + class << klass; + self + end + ).send(:define_method, :name) { name.gsub(/\W/, '_') } + $contexts << klass klass.class_eval &block end diff --git a/test/test_allow_editing.rb b/test/test_allow_editing.rb index 8ce2394d..cb1317de 100644 --- a/test/test_allow_editing.rb +++ b/test/test_allow_editing.rb @@ -3,87 +3,107 @@ require File.expand_path(File.join(File.dirname(__FILE__), 'helper')) context "Precious::Views::Editing" do include Rack::Test::Methods + setup do - @path = cloned_testpath('examples/revert.git') + @path = cloned_testpath('examples/revert.git') Precious::App.set(:gollum_path, @path) + Precious::App.set(:wiki_options, {allow_editing: true, allow_uploads: true}) @wiki = Gollum::Wiki.new(@path) end teardown do + Precious::App.set(:wiki_options, {allow_editing: true, allow_uploads: true}) FileUtils.rm_rf(@path) end - test "creating page is blocked" do - Precious::App.set(:wiki_options, { allow_editing: false}) - post "/gollum/create", :content => 'abc', :page => "D", - :format => 'markdown', :message => 'def' - assert !last_response.ok? + test 'creating pages is not blocked' do + post '/gollum/create', + content: 'abc', + format: 'markdown', + message: 'def', + page: 'D' - page = @wiki.page('D') - assert page.nil? + assert_equal last_response.status, 302 + + refute_nil @wiki.page('D') + end + + test 'creating pages is blocked' do + Precious::App.set(:wiki_options, {allow_editing: false, allow_uploads: false}) + + post '/gollum/create', + content: 'abc', + format: 'markdown', + message: 'def', + page: 'D' + + assert last_response.body.include? 'Forbidden. This wiki is set to no-edit mode.' + + refute last_response.ok? + + assert_nil @wiki.page('D') end test ".redirects.gollum file should not be accessible" do - Precious::App.set(:wiki_options, { allow_editing: true, allow_uploads: true }) get '/.redirects.gollum' assert_match /Accessing this resource is not allowed/, last_response.body end - + test ".redirects.gollum file should not be editable" do - Precious::App.set(:wiki_options, { allow_editing: true, allow_uploads: true }) get '/gollum/edit/.redirects.gollum' assert_match /Changing this resource is not allowed/, last_response.body end test "frontend links for editing are not blocked" do - Precious::App.set(:wiki_options, { allow_editing: true, allow_uploads: true }) get '/A' - assert_match /Delete this Page/, last_response.body, "'Delete this Page' link is blocked in page template" - assert_match /New/, last_response.body, "'New' button is blocked in page template" - assert_match /Upload\b/, last_response.body, "'Upload' link is blocked in page template" - assert_match /Rename/, last_response.body, "'Rename' link is blocked in page template" - assert_match /Edit/, last_response.body, "'Edit' link is blocked in page template" + assert last_response.body.include? "Delete this Page" + assert last_response.body.include? "New" + assert last_response.body.include? "Upload" + assert last_response.body.include? "Rename" + assert last_response.body.include? "Edit" get '/gollum/overview' - assert_match /New/, last_response.body, "'New' link is blocked in pages template" + assert last_response.body.include? "New" get '/gollum/history/A' - assert_no_match /Edit/, last_response.body, "'Edit' link is not blocked in history template" + refute last_response.body.include? "Edit" - get '/gollum/compare/A/fc66539528eb96f21b2bbdbf557788fe8a1196ac..b26b791cb7917c4f37dd9cb4d1e0efb24ac4d26f' + get '/gollum/compare/A/fc665395..b26b791c' - assert_no_match /Edit Page/, last_response.body, "'Edit Page' link is not blocked in compare template" - assert_match /Revert Changes/, last_response.body, "'Revert Changes' link is blocked in compare template" + refute last_response.body.include? "Edit Page" + + assert last_response.body.include? "Revert Changes" end test "frontend links for editing blocked" do - Precious::App.set(:wiki_options, { allow_editing: false }) + Precious::App.set(:wiki_options, {allow_editing: false, allow_uploads: false}) + get '/A' - assert_no_match /Delete this Page/, last_response.body, "'Delete this Page' link not blocked in page template" - assert_no_match /New/, last_response.body, "'New' button not blocked in page template" - assert_no_match /Upload\b/, last_response.body, "'Upload' link not blocked in page template" - assert_no_match /Rename/, last_response.body, "'Rename' link not blocked in page template" - assert_no_match /Edit/, last_response.body, "'Edit' link not blocked in page template" + refute last_response.body.include? "Delete this Page" + refute last_response.body.include? "Upload" + refute last_response.body.include? "Rename" + refute last_response.body.include? "Edit" + refute last_response.body.include? "New" get '/gollum/overview' - assert_no_match /New/, last_response.body, "'New' link not blocked in pages template" + refute last_response.body.include? "New" get '/gollum/history/A' - assert_no_match /Edit/, last_response.body, "'Edit' link not blocked in history template" + refute last_response.body.include? "Edit" - get '/gollum/compare/A/fc66539528eb96f21b2bbdbf557788fe8a1196ac..b26b791cb7917c4f37dd9cb4d1e0efb24ac4d26f' + get '/gollum/compare/A/fc665395..b26b791c' - assert_no_match /Edit Page/, last_response.body, "'Edit Page' link not blocked in compare template" - assert_no_match /Revert Changes/, last_response.body, "'Revert Changes' link not blocked in compare template" + refute last_response.body.include? "Edit Page" + refute last_response.body.include? "Revert Changes" end def app Precious::App end -end \ No newline at end of file +end diff --git a/test/test_app.rb b/test/test_app.rb index d3710ee1..cb82c221 100644 --- a/test/test_app.rb +++ b/test/test_app.rb @@ -14,7 +14,7 @@ context "Frontend" do teardown do FileUtils.rm_rf(@path) end - + test "utf-8 kcode" do assert_equal 'μ†ℱ'.scan(/./), ["μ", "†", "ℱ"] end @@ -104,21 +104,21 @@ EOF page_2 = @wiki.page(page_1.name) assert_equal 'abc', page_2.raw_data assert_equal 'def', page_2.version.message - assert_not_equal page_1.version.sha, page_2.version.sha + refute_equal page_1.version.sha, page_2.version.sha end - + test "edit page fails when page is outdated (edit collision)" do page = @wiki.page('A') old_sha = page.sha post "/gollum/edit/A", :content => 'abc', :page => 'A', :format => page.format, :message => 'def', :etag => old_sha assert last_response.ok? - + @wiki.clear_cache page = @wiki.page('A') new_sha = page.sha - assert_not_equal old_sha, new_sha - + refute_equal old_sha, new_sha + post "/gollum/edit/A", :content => 'def', :page => 'A', :format => page.format, :message => 'def', :etag => old_sha assert_equal last_response.status, 412 @@ -134,7 +134,7 @@ EOF page_2 = @wiki.page(page_1.name) assert_equal 'abc', page_2.raw_data assert_equal '[no message]', page_2.version.message - assert_not_equal page_1.version.sha, page_2.version.sha + refute_equal page_1.version.sha, page_2.version.sha end test "edit page with slash" do @@ -165,12 +165,12 @@ EOF assert_equal 'header', header_2.raw_data assert_equal 'footer', foot_2.raw_data assert_equal 'def', foot_2.version.message - assert_not_equal foot_1.version.sha, foot_2.version.sha - assert_not_equal header_1.version.sha, header_2.version.sha + refute_equal foot_1.version.sha, foot_2.version.sha + refute_equal header_1.version.sha, header_2.version.sha assert_equal 'sidebar', side_2.raw_data assert_equal 'def', side_2.version.message - assert_not_equal side_1.version.sha, side_2.version.sha + refute_equal side_1.version.sha, side_2.version.sha assert_equal commits, @wiki.repo.commits('master').size end @@ -187,7 +187,7 @@ EOF page_2 = @wiki.page('C') assert_equal "INITIAL\n\nSPAM2\n", page_2.raw_data assert_equal 'def', page_2.last_version.message - assert_not_equal page_1.version.sha, page_2.version.sha + refute_equal page_1.version.sha, page_2.version.sha end test "rename preserves format" do @@ -222,7 +222,7 @@ EOF test "renames page in subdirectory" do page_1 = @wiki.page("G/H") - assert_not_equal page_1, nil + refute_equal page_1, nil post "/gollum/rename/G/H", :rename => "/I/C", :message => 'def' follow_redirect! @@ -234,12 +234,12 @@ EOF page_2 = @wiki.page('I/C') assert_equal "INITIAL\n\nSPAM2\n", page_2.raw_data assert_equal 'def', page_2.last_version.message - assert_not_equal page_1.version.sha, page_2.version.sha + refute_equal page_1.version.sha, page_2.version.sha end test "renames page relative in subdirectory" do page_1 = @wiki.page("G/H") - assert_not_equal page_1, nil + refute_equal page_1, nil post "/gollum/rename/G/H", :rename => "K/C", :message => 'def' follow_redirect! @@ -251,7 +251,7 @@ EOF page_2 = @wiki.page('G/K/C') assert_equal "INITIAL\n\nSPAM2\n", page_2.raw_data assert_equal 'def', page_2.last_version.message - assert_not_equal page_1.version.sha, page_2.version.sha + refute_equal page_1.version.sha, page_2.version.sha end test "creates page" do @@ -320,7 +320,7 @@ EOF name = "#{dir}/bar" get "/gollum/create/#{name}" assert_match(/\/#{dir}/, last_response.body) - assert_no_match(/[^\/]#{dir}/, last_response.body) + refute_match(/[^\/]#{dir}/, last_response.body) end test "create with template succeed if template exists" do @@ -390,7 +390,7 @@ EOF post '/gollum/edit/', :content => 'edit_msg', :page => page, :path => path, :message => '' page_e = @wiki.page(::File.join(path,page)) - assert_equal nil, page_e + assert_nil page_e end test "edit allows changing format" do @@ -446,23 +446,31 @@ EOF @wiki.clear_cache page = @wiki.page(name) - assert_not_equal 'abc', page.raw_data + refute_equal 'abc', page.raw_data end - + test "uploading is not allowed unless explicitly enabled" do temp_upload_file = Tempfile.new(['upload', '.file']) << 'abc' temp_upload_file.close - post "/gollum/upload_file", :file => Rack::Test::UploadedFile.new(::File.open(temp_upload_file)) + + Precious::App.set( + :wiki_options, + {allow_uploads: false, per_page_uploads: false} + ) + + post '/gollum/upload_file', + file: Rack::Test::UploadedFile.new(File.open(temp_upload_file)) + assert_equal 405, last_response.status end - + test "upload a file with mode dir" do temp_upload_file = Tempfile.new(['upload', '.file']) << 'abc' temp_upload_file.close Precious::App.set(:wiki_options, {allow_uploads: true}) - + post "/gollum/upload_file", :file => Rack::Test::UploadedFile.new(::File.open(temp_upload_file)) - + assert_equal 302, last_response.status # redirect is expected @wiki.clear_cache file = @wiki.file("uploads/#{::File.basename(temp_upload_file.path)}") @@ -475,7 +483,7 @@ EOF temp_upload_file.close Precious::App.set(:wiki_options, {allow_uploads: true, per_page_uploads: true}) post "/gollum/upload_file", {:file => Rack::Test::UploadedFile.new(::File.open(temp_upload_file))}, {'HTTP_REFERER' => 'http://localhost:4567/Home.md', 'HTTP_HOST' => 'localhost:4567'} - + assert_equal 302, last_response.status # redirect is expected @wiki.clear_cache # Find the file in a page-specific subdir (here: Home), based on referer @@ -483,13 +491,13 @@ EOF assert_equal 'abc', file.raw_data Precious::App.set(:wiki_options, {allow_uploads: false, per_page_uploads: false}) end - + test "upload a file with https referer" do temp_upload_file = Tempfile.new(['https_upload', '.file']) << 'abc' temp_upload_file.close Precious::App.set(:wiki_options, {allow_uploads: true, per_page_uploads: true}) post "/gollum/upload_file", {:file => Rack::Test::UploadedFile.new(::File.open(temp_upload_file))}, {'HTTP_REFERER' => 'https://localhost:4567/Home.md', 'HTTP_HOST' => 'localhost:4567'} - + assert_equal 302, last_response.status # redirect is expected @wiki.clear_cache # Find the file in a page-specific subdir (here: Home), based on referer @@ -497,8 +505,8 @@ EOF assert_equal 'abc', file.raw_data Precious::App.set(:wiki_options, {allow_uploads: false, per_page_uploads: false}) end - - + + test "guard against uploading an existing file" do temp_upload_file = Tempfile.new(['upload', '.file']) << 'abc' temp_upload_file.close @@ -510,7 +518,7 @@ EOF assert_equal 409, last_response.status Precious::App.set(:wiki_options, {allow_uploads: false}) end - + test "delete a page" do name = "deleteme" post "/gollum/create", :content => 'abc', :page => name, @@ -522,7 +530,7 @@ EOF @wiki.clear_cache page = @wiki.page(name) - assert_equal nil, page + assert_nil page end test "previews content" do @@ -546,7 +554,7 @@ EOF @wiki.clear_cache page2 = @wiki.page('B') - assert_not_equal page1.version.sha, page2.version.sha + refute_equal page1.version.sha, page2.version.sha assert_equal "INITIAL", page2.raw_data.strip assert_equal "Revert commit 7c45b5f", page2.version.message end @@ -560,7 +568,7 @@ EOF @wiki.clear_cache page2 = @wiki.page('A') - assert_not_equal page1.version.sha, page2.version.sha + refute_equal page1.version.sha, page2.version.sha assert_equal "INITIAL", page2.raw_data.strip end @@ -574,7 +582,7 @@ EOF page2 = @wiki.page('A') assert_equal page1.version.sha, page2.version.sha end - + =begin # redirects are now handled by class MapGollum in bin/gollum # they should be set in config.ru @@ -622,7 +630,7 @@ EOF { :name => 'user1', :email => 'user1' }); get page - assert_no_match /custom.js/, last_response.body + refute_match /custom.js/, last_response.body end test "add custom.js if setting" do @@ -640,7 +648,7 @@ EOF test "don't allow changing custom js or css" do Precious::App.set(:wiki_options, { :js => true, :css => true }) - + ['create', 'edit'].each do |route| ['.css', '.js'].each do |ext| get "/gollum/#{route}/custom#{ext}" @@ -673,7 +681,7 @@ EOF :page => 'Multibyte', :format => :markdown, :message => 'mesg' page = @wiki.page('Multibyte') - + post "/gollum/edit/Multibyte", :content => 'りんご', :header => 'みかん', :footer => 'バナナ', :sidebar => 'スイカ', :page => 'Multibyte', :format => :markdown, :message => 'mesg', :etag => page.sha @@ -691,7 +699,7 @@ EOF get "A" assert last_response.ok? - assert_no_match /meta name="robots" content="noindex, nofollow"/, last_response.body + refute_match /meta name="robots" content="noindex, nofollow"/, last_response.body get "A/fc66539528eb96f21b2bbdbf557788fe8a1196ac" @@ -870,10 +878,10 @@ context "Frontend with lotr" do test "show revision of specific file" do old_sha = "df26e61e707116f81ebc6b935ec6d1676b7e96c4" update_sha = "f803c64d11407b23797325e3843f3f378b78f611" - + get "Data.csv/#{old_sha}" assert last_response.ok? - assert_no_match /Samwise,Gamgee/, last_response.body + refute_match /Samwise,Gamgee/, last_response.body get "Data.csv/#{update_sha}" assert last_response.ok? @@ -918,7 +926,7 @@ context "Frontend with page-file-dir" do name = "#{dir}/baz" get "/gollum/create/#{name}" assert_match(/\/#{dir}/, last_response.body) - assert_no_match(/[^\/]#{dir}/, last_response.body) + refute_match(/[^\/]#{dir}/, last_response.body) end test "use custom.css from page-file-dir path if page-file-dir is set" do @@ -959,7 +967,7 @@ end context "Frontend with empty repo" do include Rack::Test::Methods - + setup do @path = cloned_testpath("examples/empty.git") @wiki = Gollum::Wiki.new(@path) @@ -970,11 +978,11 @@ context "Frontend with empty repo" do teardown do FileUtils.rm_rf(@path) end - + def app Precious::App end - + test 'previews content on the first page of an empty wiki' do post '/gollum/preview', :content => 'abc', :format => 'markdown' assert last_response.ok? @@ -986,12 +994,12 @@ context "Frontend with empty repo" do assert_equal '/gollum/create/Home', last_request.fullpath assert last_response.ok? end - + end context 'Frontend with base path' do include Rack::Test::Methods - + setup do @path = cloned_testpath("examples/lotr.git") @wiki = Gollum::Wiki.new(@path) @@ -1003,24 +1011,24 @@ context 'Frontend with base path' do teardown do FileUtils.rm_rf(@path) end - + test 'page with base path' do get '/wiki/Home' assert last_response.ok? end - + test 'base path mathjax assets' do get '/wiki/Home' assert last_response.ok? assert last_response.body.include?('