From: Go MAEDA Date: Wed, 15 May 2019 14:05:08 +0000 (+0000) Subject: Merged r18165 from trunk to 4.0-stable (#31334). X-Git-Tag: 4.0.4~10 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=02218c244a64a4809d3c7e5795b33e288c728c91;p=redmine.git Merged r18165 from trunk to 4.0-stable (#31334). git-svn-id: http://svn.redmine.org/redmine/branches/4.0-stable@18166 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- diff --git a/app/controllers/wiki_controller.rb b/app/controllers/wiki_controller.rb index c5f7cdc0c..b1e794994 100644 --- a/app/controllers/wiki_controller.rb +++ b/app/controllers/wiki_controller.rb @@ -32,7 +32,7 @@ class WikiController < ApplicationController default_search_scope :wiki_pages before_action :find_wiki, :authorize - before_action :find_existing_or_new_page, :only => [:show, :edit, :update] + before_action :find_existing_or_new_page, :only => [:show, :edit] before_action :find_existing_page, :only => [:rename, :protect, :history, :diff, :annotate, :add_attachment, :destroy, :destroy_version] before_action :find_attachments, :only => [:preview] accept_api_auth :index, :show, :update, :destroy @@ -150,6 +150,8 @@ class WikiController < ApplicationController # Creates a new page or updates an existing one def update + @page = @wiki.find_or_new_page(params[:id]) + return render_403 unless editable? was_new_page = @page.new_record? @page.safe_attributes = params[:wiki_page] diff --git a/test/integration/wiki_test.rb b/test/integration/wiki_test.rb new file mode 100644 index 000000000..bbf8dba67 --- /dev/null +++ b/test/integration/wiki_test.rb @@ -0,0 +1,56 @@ +require File.expand_path('../../test_helper', __FILE__) + +class WikiIntegrationTest < Redmine::IntegrationTest + fixtures :projects, + :users, :email_addresses, + :roles, + :members, + :member_roles, + :trackers, + :projects_trackers, + :enabled_modules, + :wikis, + :wiki_pages, + :wiki_contents + + def test_updating_a_renamed_page + log_user('jsmith', 'jsmith') + + get '/projects/ecookbook/wiki' + assert_response :success + + get '/projects/ecookbook/wiki/Wiki/edit' + assert_response :success + + # this update should not end up with a loss of content + put '/projects/ecookbook/wiki/Wiki', params: { + content: { + text: "# Wiki\r\n\r\ncontent", comments:"" + }, + wiki_page: { parent_id: "" } + } + assert_redirected_to "/projects/ecookbook/wiki/Wiki" + follow_redirect! + assert_select 'div', /content/ + assert content = WikiContent.last + + # Let's assume somebody else, or the same user in another tab, renames the + # page while it is being edited. + post '/projects/ecookbook/wiki/Wiki/rename', params: { wiki_page: { title: "NewTitle" } } + assert_redirected_to "/projects/ecookbook/wiki/NewTitle" + + # this update should not end up with a loss of content + put '/projects/ecookbook/wiki/Wiki', params: { + content: { + version: content.version, text: "# Wiki\r\n\r\nnew content", comments:"" + }, + wiki_page: { parent_id: "" } + } + + assert_redirected_to "/projects/ecookbook/wiki/NewTitle" + follow_redirect! + assert_select 'div', /new content/ + end + +end +