1
0
mirror of https://github.com/meineerde/redmine.git synced 2026-02-05 00:23:24 +00:00

Do not lose submitted content when attempting to update a wiki page that has been renamed in the meantime (#31334).

Patch by Jens Krämer.


git-svn-id: http://svn.redmine.org/redmine/trunk@18165 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Go MAEDA 2019-05-15 13:21:35 +00:00
parent f1d10edf81
commit 8eb5f2c605
2 changed files with 59 additions and 1 deletions

View File

@ -34,7 +34,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
@ -152,6 +152,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]

View File

@ -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