From ad816523ed74796dce4cdf9846970cbeb25881be Mon Sep 17 00:00:00 2001 From: Go MAEDA Date: Wed, 15 May 2019 14:06:07 +0000 Subject: Merged r18165 from trunk to 3.4-stable (#31334). git-svn-id: http://svn.redmine.org/redmine/branches/3.4-stable@18167 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/controllers/wiki_controller.rb | 4 ++- test/integration/wiki_test.rb | 56 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 test/integration/wiki_test.rb diff --git a/app/controllers/wiki_controller.rb b/app/controllers/wiki_controller.rb index 5d9a91327..a28e2bd61 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 + -- cgit v1.2.3