summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/controllers/wiki_controller.rb2
-rw-r--r--test/functional/wiki_controller_test.rb46
-rw-r--r--test/test_helper.rb2
3 files changed, 49 insertions, 1 deletions
diff --git a/app/controllers/wiki_controller.rb b/app/controllers/wiki_controller.rb
index ae6f9d166..e7e389306 100644
--- a/app/controllers/wiki_controller.rb
+++ b/app/controllers/wiki_controller.rb
@@ -125,6 +125,8 @@ class WikiController < ApplicationController
render_attachment_warning_if_needed(@page)
call_hook(:controller_wiki_edit_after_save, { :params => params, :page => @page})
redirect_to :action => 'show', :project_id => @project, :id => @page.title
+ else
+ render :action => 'edit'
end
rescue ActiveRecord::StaleObjectError
diff --git a/test/functional/wiki_controller_test.rb b/test/functional/wiki_controller_test.rb
index 74e9e11b6..857975b82 100644
--- a/test/functional/wiki_controller_test.rb
+++ b/test/functional/wiki_controller_test.rb
@@ -108,6 +108,52 @@ class WikiControllerTest < ActionController::TestCase
assert_equal 1, page.attachments.count
assert_equal 'testfile.txt', page.attachments.first.filename
end
+
+ def test_update_page
+ @request.session[:user_id] = 2
+ assert_no_difference 'WikiPage.count' do
+ assert_no_difference 'WikiContent.count' do
+ assert_difference 'WikiContent::Version.count' do
+ put :update, :project_id => 1,
+ :id => 'Another_page',
+ :content => {
+ :comments => "my comments",
+ :text => "edited",
+ :version => 1
+ }
+ end
+ end
+ end
+ assert_redirected_to '/projects/ecookbook/wiki/Another_page'
+
+ page = Wiki.find(1).pages.find_by_title('Another_page')
+ assert_equal "edited", page.content.text
+ assert_equal 2, page.content.version
+ assert_equal "my comments", page.content.comments
+ end
+
+ def test_update_page_with_failure
+ @request.session[:user_id] = 2
+ 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 => 'a' * 300, # failure here, comment is too long
+ :text => 'edited',
+ :version => 1
+ }
+ end
+ end
+ end
+ assert_response :success
+ assert_template 'edit'
+
+ assert_error_tag :descendant => {:content => /Comment is too long/}
+ assert_tag :tag => 'textarea', :attributes => {:id => 'content_text'}, :content => 'edited'
+ assert_tag :tag => 'input', :attributes => {:id => 'content_version', :value => '1'}
+ end
def test_preview
@request.session[:user_id] = 2
diff --git a/test/test_helper.rb b/test/test_helper.rb
index ade46aa7c..54681526a 100644
--- a/test/test_helper.rb
+++ b/test/test_helper.rb
@@ -115,7 +115,7 @@ class ActiveSupport::TestCase
end
def assert_error_tag(options={})
- assert_tag({:tag => 'p', :attributes => { :id => 'errorExplanation' }}.merge(options))
+ assert_tag({:attributes => { :id => 'errorExplanation' }}.merge(options))
end
# Shoulda macros