summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2011-04-29 07:11:56 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2011-04-29 07:11:56 +0000
commit55fd2f55626f5af38305ce5fdfa14c025ec1a2ca (patch)
tree15f2ced7a7fe249d664692e8931bc49846ccd3df
parent8a734f9997f80279fe82ccd2dc99179be4253317 (diff)
downloadredmine-55fd2f55626f5af38305ce5fdfa14c025ec1a2ca.tar.gz
redmine-55fd2f55626f5af38305ce5fdfa14c025ec1a2ca.zip
Merged r5185 from trunk.
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/1.1-stable@5575 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--app/controllers/wiki_controller.rb6
-rw-r--r--test/functional/wiki_controller_test.rb36
2 files changed, 38 insertions, 4 deletions
diff --git a/app/controllers/wiki_controller.rb b/app/controllers/wiki_controller.rb
index e7e389306..ef26a8299 100644
--- a/app/controllers/wiki_controller.rb
+++ b/app/controllers/wiki_controller.rb
@@ -93,9 +93,6 @@ class WikiController < ApplicationController
# To prevent StaleObjectError exception when reverting to a previous version
@content.version = @page.content.version
- rescue ActiveRecord::StaleObjectError
- # Optimistic locking exception
- flash[:error] = l(:notice_locking_conflict)
end
verify :method => :put, :only => :update, :render => {:nothing => true, :status => :method_not_allowed }
@@ -131,7 +128,8 @@ class WikiController < ApplicationController
rescue ActiveRecord::StaleObjectError
# Optimistic locking exception
- flash[:error] = l(:notice_locking_conflict)
+ flash.now[:error] = l(:notice_locking_conflict)
+ render :action => 'edit'
end
# rename a page
diff --git a/test/functional/wiki_controller_test.rb b/test/functional/wiki_controller_test.rb
index c40b2f392..981ebf8dd 100644
--- a/test/functional/wiki_controller_test.rb
+++ b/test/functional/wiki_controller_test.rb
@@ -155,6 +155,42 @@ class WikiControllerTest < ActionController::TestCase
assert_tag :tag => 'input', :attributes => {:id => 'content_version', :value => '1'}
end
+ def test_update_stale_page_should_not_raise_an_error
+ @request.session[:user_id] = 2
+ c = Wiki.find(1).find_page('Another_page').content
+ c.text = 'Previous text'
+ c.save!
+ assert_equal 2, c.version
+
+ assert_no_difference 'WikiPage.count' do
+ assert_no_difference 'WikiContent.count' do
+ assert_no_difference 'WikiContent::Version.count' do
+ put :update, :project_id => 1,
+ :id => 'Another_page',
+ :content => {
+ :comments => 'My comments',
+ :text => 'Text should not be lost',
+ :version => 1
+ }
+ end
+ end
+ end
+ assert_response :success
+ assert_template 'edit'
+ assert_tag :div,
+ :attributes => { :class => /error/ },
+ :content => /Data has been updated by another user/
+ assert_tag 'textarea',
+ :attributes => { :name => 'content[text]' },
+ :content => /Text should not be lost/
+ assert_tag 'input',
+ :attributes => { :name => 'content[comments]', :value => 'My comments' }
+
+ c.reload
+ assert_equal 'Previous text', c.text
+ assert_equal 2, c.version
+ end
+
def test_preview
@request.session[:user_id] = 2
xhr :post, :preview, :project_id => 1, :id => 'CookBook_documentation',