From 2c8be3d95ba23ed29842b2070b50126c09f7582a Mon Sep 17 00:00:00 2001 From: rick Date: Thu, 9 Dec 2010 16:11:12 -0800 Subject: [PATCH] add tests for creating/updating wikis, fix page name bug along the way --- gollum.gemspec | 1 + lib/gollum/frontend/app.rb | 17 +++---- lib/gollum/frontend/templates/editor.mustache | 2 +- test/helper.rb | 3 ++ test/test_app.rb | 45 +++++++++++++++++++ 5 files changed, 59 insertions(+), 9 deletions(-) create mode 100644 test/test_app.rb diff --git a/gollum.gemspec b/gollum.gemspec index 00666d58..74ae1c28 100644 --- a/gollum.gemspec +++ b/gollum.gemspec @@ -36,6 +36,7 @@ Gem::Specification.new do |s| s.add_development_dependency('org-ruby') s.add_development_dependency('rdiscount') s.add_development_dependency('shoulda') + s.add_development_dependency('rack-test') # = MANIFEST = s.files = %w[ diff --git a/lib/gollum/frontend/app.rb b/lib/gollum/frontend/app.rb index a814c752..a0767d84 100644 --- a/lib/gollum/frontend/app.rb +++ b/lib/gollum/frontend/app.rb @@ -30,10 +30,12 @@ module Precious # Sinatra error handling configure :development, :staging do - set :raise_errors, false - set :show_exceptions, true - set :dump_errors, true - set :clean_trace, false + enable :show_exceptions, :dump_errors + disable :raise_errors, :clean_trace + end + + configure :test do + enable :logging, :raise_errors, :dump_errors end get '/' do @@ -53,18 +55,17 @@ module Precious end post '/edit/*' do - name = params[:splat].first wiki = Gollum::Wiki.new(settings.gollum_path) - page = wiki.page(name) + page = wiki.page(params[:splat].first) + name = params[:rename] || page.name format = params[:format].intern - name = params[:rename] if params[:rename] wiki.update_page(page, name, format, params[:content], commit_message) redirect "/#{CGI.escape(Gollum::Page.cname(name))}" end - post '/create/*' do + post '/create' do name = params[:page] wiki = Gollum::Wiki.new(settings.gollum_path) diff --git a/lib/gollum/frontend/templates/editor.mustache b/lib/gollum/frontend/templates/editor.mustache index 81c8d2d6..0a89d1e5 100755 --- a/lib/gollum/frontend/templates/editor.mustache +++ b/lib/gollum/frontend/templates/editor.mustache @@ -1,6 +1,6 @@
{{#is_create_page}} -
+ {{/is_create_page}} {{#is_edit_page}} diff --git a/test/helper.rb b/test/helper.rb index 32fc42d6..a69fe485 100644 --- a/test/helper.rb +++ b/test/helper.rb @@ -1,4 +1,5 @@ require 'rubygems' +require 'rack/test' require 'test/unit' require 'shoulda' require 'mocha' @@ -8,7 +9,9 @@ dir = File.dirname(File.expand_path(__FILE__)) $LOAD_PATH.unshift(File.join(dir, '..', 'lib')) $LOAD_PATH.unshift(dir) +ENV['RACK_ENV'] = 'test' require 'gollum' +require 'gollum/frontend/app' # Make sure we're in the test dir, the tests expect that to be the current # directory. diff --git a/test/test_app.rb b/test/test_app.rb new file mode 100644 index 00000000..20cb1d29 --- /dev/null +++ b/test/test_app.rb @@ -0,0 +1,45 @@ +# ~*~ encoding: utf-8 ~*~ +require File.expand_path(File.join(File.dirname(__FILE__), "helper")) + +context "Frontend" do + include Rack::Test::Methods + + setup do + @path = cloned_testpath("examples/lotr.git") + @wiki = Gollum::Wiki.new(@path) + Precious::App.set(:gollum_path, @path) + end + + teardown do + FileUtils.rm_rf(@path) + end + + test "edits page" do + page_1 = @wiki.page('Bilbo Baggins') + post "/edit/#{Gollum::Page.cname page_1.name}", :content => 'abc', + :format => page_1.format, :message => 'def' + follow_redirect! + assert last_response.ok? + + @wiki.clear_cache + 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 + end + + test "creates page" do + post "/create", :content => 'abc', :page => "Newbie", + :format => 'markdown', :message => 'def' + follow_redirect! + assert last_response.ok? + + page = @wiki.page('Newbie') + assert_equal 'abc', page.raw_data + assert_equal 'def', page.version.message + end + + def app + Precious::App + end +end \ No newline at end of file