diff --git a/lib/gollum/frontend/app.rb b/lib/gollum/frontend/app.rb index 5b9a77c5..6f510853 100644 --- a/lib/gollum/frontend/app.rb +++ b/lib/gollum/frontend/app.rb @@ -101,7 +101,7 @@ module Precious mustache :edit end else - mustache :create + redirect "/create/#{CGI.escape(@name)}" end end @@ -124,7 +124,17 @@ module Precious redirect "/#{page.escaped_url_path}" end - + + get '/create/*' do + wiki = Gollum::Wiki.new(settings.gollum_path, settings.wiki_options) + @name = params[:splat].first + if wiki.page(@name) + redirect "/#{CGI.escape(@name)}" + else + mustache :create + end + end + post '/create' do name = params[:page] path = sanitize_empty_params(params[:path]) @@ -298,9 +308,7 @@ module Precious content_type file.mime_type file.raw_data else - @name = name - @path = path - mustache :create + redirect "/create/#{CGI.escape(name)}" end end diff --git a/test/test_app.rb b/test/test_app.rb index 203b964d..5ae94cf7 100644 --- a/test/test_app.rb +++ b/test/test_app.rb @@ -124,6 +124,30 @@ context "Frontend" do assert_match /ghi/, last_response.body end + test "redirects to create on non-existant page" do + name = "E" + get "/#{name}" + follow_redirect! + assert_equal "/create/#{name}", last_request.fullpath + assert last_response.ok? + end + + test "edit redirects to create on non-existant page" do + name = "E" + get "/edit/#{name}" + follow_redirect! + assert_equal "/create/#{name}", last_request.fullpath + assert last_response.ok? + end + + test "create redirects to page if already exists" do + name = "A" + get "/create/#{name}" + follow_redirect! + assert_equal "/#{name}", last_request.fullpath + assert last_response.ok? + end + test "guards against creation of existing page" do name = "A" post "/create", :content => 'abc', :page => name,