diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index c994862e1..887bcd4bb 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -112,6 +112,7 @@ class IssuesController < ApplicationController render :template => 'issues/show' end format.api do + @allowed_statuses = @issue.new_statuses_allowed_to(User.current) @changesets = @issue.changesets.visible.preload(:repository, :user).to_a @changesets.reverse! if User.current.wants_comments_in_reverse_order? end diff --git a/app/views/issues/show.api.rsb b/app/views/issues/show.api.rsb index f474ed9c6..215184014 100644 --- a/app/views/issues/show.api.rsb +++ b/app/views/issues/show.api.rsb @@ -77,4 +77,10 @@ api.issue do api.user :id => user.id, :name => user.name end end if include_in_api_response?('watchers') && User.current.allowed_to?(:view_issue_watchers, @issue.project) + + api.array :allowed_statuses do + @allowed_statuses.each do |status| + api.status :id => status.id, :name => status.name + end + end if include_in_api_response?('allowed_statuses') end diff --git a/test/integration/api_test/issues_test.rb b/test/integration/api_test/issues_test.rb index b10f7dfa5..7a57d39fe 100644 --- a/test/integration/api_test/issues_test.rb +++ b/test/integration/api_test/issues_test.rb @@ -394,6 +394,28 @@ class Redmine::ApiTest::IssuesTest < Redmine::ApiTest::Base end end + test "GET /issues/:id.xml?include=allowed_statuses should include available statuses" do + issue = Issue.find(1) + assert_equal 1, issue.tracker_id # Bug + issue.update(:status_id => 2) # Assigned + member = Member.find_or_new(issue.project, User.find_by_login('dlopper')) + assert_equal [2], member.role_ids # Developer + + get '/issues/1.xml?include=allowed_statuses', :headers => credentials('dlopper', 'foo') + assert_response :ok + assert_equal 'application/xml', response.media_type + + allowed_statuses = [[1, 'New'], [2, 'Assigned'], [4, 'Feedback'], [5, 'Closed'], [6, 'Rejected']] + assert_select 'issue allowed_statuses[type=array]' do + assert_select 'status', allowed_statuses.length + assert_select('status').each_with_index do |status, idx| + id, name, = allowed_statuses[idx] + assert_equal id.to_s, status['id'] + assert_equal name, status['name'] + end + end + end + test "GET /issues/:id.xml should contains total_estimated_hours and total_spent_hours" do parent = Issue.find(3) parent.update_columns :estimated_hours => 2.0