diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 645e8389b..98a52a834 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -520,6 +520,12 @@ class ApplicationController < ActionController::Base render_error "An error occurred while executing the query and has been logged. Please report this error to your Redmine administrator." end + # Renders a 200 response for successfull updates or deletions via the API + def render_api_ok + # head :ok would return a response body with one space + render :text => '', :status => :ok, :layout => nil + end + # Renders API response on validation failure def render_validation_errors(objects) if objects.is_a?(Array) diff --git a/app/controllers/groups_controller.rb b/app/controllers/groups_controller.rb index 244fa57b2..e4613b5e3 100644 --- a/app/controllers/groups_controller.rb +++ b/app/controllers/groups_controller.rb @@ -72,7 +72,7 @@ class GroupsController < ApplicationController if @group.save flash[:notice] = l(:notice_successful_update) format.html { redirect_to(groups_path) } - format.api { head :ok } + format.api { render_api_ok } else format.html { render :action => "edit" } format.api { render_validation_errors(@group) } @@ -85,7 +85,7 @@ class GroupsController < ApplicationController respond_to do |format| format.html { redirect_to(groups_url) } - format.api { head :ok } + format.api { render_api_ok } end end @@ -100,7 +100,7 @@ class GroupsController < ApplicationController users.each {|user| page.visual_effect(:highlight, "user-#{user.id}") } } } - format.api { head :ok } + format.api { render_api_ok } end end @@ -109,7 +109,7 @@ class GroupsController < ApplicationController respond_to do |format| format.html { redirect_to :controller => 'groups', :action => 'edit', :id => @group, :tab => 'users' } format.js { render(:update) {|page| page.replace_html "tab-content-users", :partial => 'groups/users'} } - format.api { head :ok } + format.api { render_api_ok } end end diff --git a/app/controllers/issue_categories_controller.rb b/app/controllers/issue_categories_controller.rb index 36a22b324..ecb4bc906 100644 --- a/app/controllers/issue_categories_controller.rb +++ b/app/controllers/issue_categories_controller.rb @@ -98,7 +98,7 @@ class IssueCategoriesController < ApplicationController flash[:notice] = l(:notice_successful_update) redirect_to :controller => 'projects', :action => 'settings', :tab => 'categories', :id => @project } - format.api { head :ok } + format.api { render_api_ok } end else respond_to do |format| @@ -118,7 +118,7 @@ class IssueCategoriesController < ApplicationController @category.destroy(reassign_to) respond_to do |format| format.html { redirect_to :controller => 'projects', :action => 'settings', :id => @project, :tab => 'categories' } - format.api { head :ok } + format.api { render_api_ok } end return end diff --git a/app/controllers/issue_relations_controller.rb b/app/controllers/issue_relations_controller.rb index 7a529592c..0de78c366 100644 --- a/app/controllers/issue_relations_controller.rb +++ b/app/controllers/issue_relations_controller.rb @@ -76,7 +76,7 @@ class IssueRelationsController < ApplicationController respond_to do |format| format.html { redirect_to issue_path } # TODO : does this really work since @issue is always nil? What is it useful to? format.js { render(:update) {|page| page.remove "relation-#{@relation.id}"} } - format.api { head :ok } + format.api { render_api_ok } end end diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index d836c7f29..a6365531b 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -197,7 +197,7 @@ class IssuesController < ApplicationController respond_to do |format| format.html { redirect_back_or_default({:action => 'show', :id => @issue}) } - format.api { head :ok } + format.api { render_api_ok } end else respond_to do |format| @@ -307,7 +307,7 @@ class IssuesController < ApplicationController end respond_to do |format| format.html { redirect_back_or_default(:action => 'index', :project_id => @project) } - format.api { head :ok } + format.api { render_api_ok } end end diff --git a/app/controllers/members_controller.rb b/app/controllers/members_controller.rb index db065131a..49aaa2555 100644 --- a/app/controllers/members_controller.rb +++ b/app/controllers/members_controller.rb @@ -107,7 +107,7 @@ class MembersController < ApplicationController } format.api { if saved - head :ok + render_api_ok else render_validation_errors(@member) end @@ -128,7 +128,7 @@ class MembersController < ApplicationController } format.api { if @member.destroyed? - head :ok + render_api_ok else head :unprocessable_entity end diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index ffb932f34..628b1a12c 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -191,7 +191,7 @@ class ProjectsController < ApplicationController flash[:notice] = l(:notice_successful_update) redirect_to :action => 'settings', :id => @project } - format.api { head :ok } + format.api { render_api_ok } end else respond_to do |format| @@ -241,7 +241,7 @@ class ProjectsController < ApplicationController @project_to_destroy.destroy respond_to do |format| format.html { redirect_to :controller => 'admin', :action => 'projects' } - format.api { head :ok } + format.api { render_api_ok } end end # hide project in layout diff --git a/app/controllers/timelog_controller.rb b/app/controllers/timelog_controller.rb index 30d6cc28a..7aae12b5c 100644 --- a/app/controllers/timelog_controller.rb +++ b/app/controllers/timelog_controller.rb @@ -171,7 +171,7 @@ class TimelogController < ApplicationController flash[:notice] = l(:notice_successful_update) redirect_back_or_default :action => 'index', :project_id => @time_entry.project } - format.api { head :ok } + format.api { render_api_ok } end else respond_to do |format| @@ -223,7 +223,7 @@ class TimelogController < ApplicationController } format.api { if destroyed - head :ok + render_api_ok else render_validation_errors(@time_entries) end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index de334246f..4f112fd8c 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -156,7 +156,7 @@ class UsersController < ApplicationController flash[:notice] = l(:notice_successful_update) redirect_to_referer_or edit_user_path(@user) } - format.api { head :ok } + format.api { render_api_ok } end else @auth_sources = AuthSource.find(:all) @@ -175,7 +175,7 @@ class UsersController < ApplicationController @user.destroy respond_to do |format| format.html { redirect_to_referer_or(users_url) } - format.api { head :ok } + format.api { render_api_ok } end end diff --git a/app/controllers/versions_controller.rb b/app/controllers/versions_controller.rb index cd7e03339..dcee97c85 100644 --- a/app/controllers/versions_controller.rb +++ b/app/controllers/versions_controller.rb @@ -144,7 +144,7 @@ class VersionsController < ApplicationController flash[:notice] = l(:notice_successful_update) redirect_back_or_default :controller => 'projects', :action => 'settings', :tab => 'versions', :id => @project } - format.api { head :ok } + format.api { render_api_ok } end else respond_to do |format| @@ -167,7 +167,7 @@ class VersionsController < ApplicationController @version.destroy respond_to do |format| format.html { redirect_back_or_default :controller => 'projects', :action => 'settings', :tab => 'versions', :id => @project } - format.api { head :ok } + format.api { render_api_ok } end else respond_to do |format| diff --git a/test/integration/api_test/groups_test.rb b/test/integration/api_test/groups_test.rb index 9fbcb02d2..22d1e8b32 100644 --- a/test/integration/api_test/groups_test.rb +++ b/test/integration/api_test/groups_test.rb @@ -148,6 +148,7 @@ class ApiTest::GroupsTest < ActionController::IntegrationTest should "update the group" do put '/groups/10.xml', {:group => {:name => 'New name', :user_ids => [2, 3]}}, credentials('admin') assert_response :ok + assert_equal '', @response.body group = Group.find(10) assert_equal 'New name', group.name @@ -177,6 +178,7 @@ class ApiTest::GroupsTest < ActionController::IntegrationTest assert_difference 'Group.count', -1 do delete '/groups/10.xml', {}, credentials('admin') assert_response :ok + assert_equal '', @response.body end end end @@ -188,6 +190,7 @@ class ApiTest::GroupsTest < ActionController::IntegrationTest assert_difference 'Group.find(10).users.count' do post '/groups/10/users.xml', {:user_id => 5}, credentials('admin') assert_response :ok + assert_equal '', @response.body end assert_include User.find(5), Group.find(10).users end @@ -200,6 +203,7 @@ class ApiTest::GroupsTest < ActionController::IntegrationTest assert_difference 'Group.find(10).users.count', -1 do delete '/groups/10/users/8.xml', {}, credentials('admin') assert_response :ok + assert_equal '', @response.body end assert_not_include User.find(8), Group.find(10).users end diff --git a/test/integration/api_test/issue_categories_test.rb b/test/integration/api_test/issue_categories_test.rb index 8cf707426..acc13edf6 100644 --- a/test/integration/api_test/issue_categories_test.rb +++ b/test/integration/api_test/issue_categories_test.rb @@ -81,6 +81,7 @@ class ApiTest::IssueCategoriesTest < ActionController::IntegrationTest put '/issue_categories/2.xml', {:issue_category => {:name => 'API Update'}}, credentials('jsmith') end assert_response :ok + assert_equal '', @response.body assert_equal 'API Update', IssueCategory.find(2).name end end @@ -104,6 +105,7 @@ class ApiTest::IssueCategoriesTest < ActionController::IntegrationTest delete '/issue_categories/1.xml', {}, credentials('jsmith') end assert_response :ok + assert_equal '', @response.body assert_nil IssueCategory.find_by_id(1) end @@ -117,6 +119,7 @@ class ApiTest::IssueCategoriesTest < ActionController::IntegrationTest end end assert_response :ok + assert_equal '', @response.body assert_nil IssueCategory.find_by_id(1) end end diff --git a/test/integration/api_test/issue_relations_test.rb b/test/integration/api_test/issue_relations_test.rb index 0976facef..9c5ece335 100644 --- a/test/integration/api_test/issue_relations_test.rb +++ b/test/integration/api_test/issue_relations_test.rb @@ -99,6 +99,7 @@ class ApiTest::IssueRelationsTest < ActionController::IntegrationTest end assert_response :ok + assert_equal '', @response.body assert_nil IssueRelation.find_by_id(2) end end diff --git a/test/integration/api_test/issues_test.rb b/test/integration/api_test/issues_test.rb index 9dece8354..9b25bc178 100644 --- a/test/integration/api_test/issues_test.rb +++ b/test/integration/api_test/issues_test.rb @@ -770,6 +770,7 @@ class ApiTest::IssuesTest < ActionController::IntegrationTest {:issue => {:notes => 'Attachment added', :uploads => [{:token => token, :filename => 'test.txt', :content_type => 'text/plain'}]}}, credentials('jsmith') assert_response :ok + assert_equal '', @response.body end issue = Issue.find(1) diff --git a/test/integration/api_test/memberships_test.rb b/test/integration/api_test/memberships_test.rb index 0243b3f04..ddd2d4e4c 100644 --- a/test/integration/api_test/memberships_test.rb +++ b/test/integration/api_test/memberships_test.rb @@ -157,6 +157,7 @@ class ApiTest::MembershipsTest < ActionController::IntegrationTest put '/memberships/2.xml', {:membership => {:user_id => 3, :role_ids => [1,2]}}, credentials('jsmith') assert_response :ok + assert_equal '', @response.body end member = Member.find(2) assert_equal [1,2], member.role_ids.sort @@ -179,6 +180,7 @@ class ApiTest::MembershipsTest < ActionController::IntegrationTest delete '/memberships/2.xml', {}, credentials('jsmith') assert_response :ok + assert_equal '', @response.body end assert_nil Member.find_by_id(2) end diff --git a/test/integration/api_test/projects_test.rb b/test/integration/api_test/projects_test.rb index 732d72d46..86e3264e7 100644 --- a/test/integration/api_test/projects_test.rb +++ b/test/integration/api_test/projects_test.rb @@ -226,6 +226,7 @@ class ApiTest::ProjectsTest < ActionController::IntegrationTest put '/projects/2.xml', @parameters, credentials('jsmith') end assert_response :ok + assert_equal '', @response.body assert_equal 'application/xml', @response.content_type project = Project.find(2) assert_equal 'API update', project.name @@ -238,6 +239,7 @@ class ApiTest::ProjectsTest < ActionController::IntegrationTest put '/projects/2.xml', @parameters, credentials('admin') end assert_response :ok + assert_equal '', @response.body project = Project.find(2) assert_equal ['issue_tracking', 'news', 'time_tracking'], project.enabled_module_names.sort end @@ -249,6 +251,7 @@ class ApiTest::ProjectsTest < ActionController::IntegrationTest put '/projects/2.xml', @parameters, credentials('admin') end assert_response :ok + assert_equal '', @response.body project = Project.find(2) assert_equal [1, 3], project.trackers.map(&:id).sort end @@ -286,6 +289,7 @@ class ApiTest::ProjectsTest < ActionController::IntegrationTest delete '/projects/2.xml', {}, credentials('admin') end assert_response :ok + assert_equal '', @response.body assert_nil Project.find_by_id(2) end end diff --git a/test/integration/api_test/time_entries_test.rb b/test/integration/api_test/time_entries_test.rb index b18013496..8e45066ed 100644 --- a/test/integration/api_test/time_entries_test.rb +++ b/test/integration/api_test/time_entries_test.rb @@ -134,6 +134,7 @@ class ApiTest::TimeEntriesTest < ActionController::IntegrationTest put '/time_entries/2.xml', {:time_entry => {:comments => 'API Update'}}, credentials('jsmith') end assert_response :ok + assert_equal '', @response.body assert_equal 'API Update', TimeEntry.find(2).comments end end @@ -157,6 +158,7 @@ class ApiTest::TimeEntriesTest < ActionController::IntegrationTest delete '/time_entries/2.xml', {}, credentials('jsmith') end assert_response :ok + assert_equal '', @response.body assert_nil TimeEntry.find_by_id(2) end end diff --git a/test/integration/api_test/users_test.rb b/test/integration/api_test/users_test.rb index 11f8669bd..926982e1e 100644 --- a/test/integration/api_test/users_test.rb +++ b/test/integration/api_test/users_test.rb @@ -238,6 +238,7 @@ class ApiTest::UsersTest < ActionController::IntegrationTest assert !user.admin? assert_response :ok + assert_equal '', @response.body end end @@ -263,6 +264,7 @@ class ApiTest::UsersTest < ActionController::IntegrationTest assert !user.admin? assert_response :ok + assert_equal '', @response.body end end end @@ -322,6 +324,7 @@ class ApiTest::UsersTest < ActionController::IntegrationTest end assert_response :ok + assert_equal '', @response.body end end @@ -337,6 +340,7 @@ class ApiTest::UsersTest < ActionController::IntegrationTest end assert_response :ok + assert_equal '', @response.body end end end diff --git a/test/integration/api_test/versions_test.rb b/test/integration/api_test/versions_test.rb index da4bcf33d..90b0fb17a 100644 --- a/test/integration/api_test/versions_test.rb +++ b/test/integration/api_test/versions_test.rb @@ -120,6 +120,7 @@ class ApiTest::VersionsTest < ActionController::IntegrationTest put '/versions/2.xml', {:version => {:name => 'API update'}}, credentials('jsmith') assert_response :ok + assert_equal '', @response.body assert_equal 'API update', Version.find(2).name end end @@ -131,6 +132,7 @@ class ApiTest::VersionsTest < ActionController::IntegrationTest end assert_response :ok + assert_equal '', @response.body assert_nil Version.find_by_id(3) end end