diff options
-rw-r--r-- | app/controllers/issues_controller.rb | 4 | ||||
-rw-r--r-- | app/views/issues/index.api.rsb | 5 | ||||
-rw-r--r-- | test/integration/api_test/issues_test.rb | 28 |
3 files changed, 37 insertions, 0 deletions
diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 0278b3088..62124db42 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -60,6 +60,10 @@ class IssuesController < ApplicationController @issue_count = @query.issue_count @issues = @query.issues(:offset => @offset, :limit => @limit) Issue.load_visible_relations(@issues) if include_in_api_response?('relations') + if User.current.allowed_to?(:view_time_entries, nil, :global => true) + Issue.load_visible_spent_hours(@issues) + Issue.load_visible_total_spent_hours(@issues) + end end format.atom do @issues = @query.issues(:limit => Setting.feeds_limit.to_i) diff --git a/app/views/issues/index.api.rsb b/app/views/issues/index.api.rsb index 4bba32549..da60ea5c6 100644 --- a/app/views/issues/index.api.rsb +++ b/app/views/issues/index.api.rsb @@ -19,6 +19,11 @@ api.array :issues, api_meta(:total_count => @issue_count, :offset => @offset, :l api.done_ratio issue.done_ratio api.is_private issue.is_private api.estimated_hours issue.estimated_hours + api.total_estimated_hours issue.total_estimated_hours + if User.current.allowed_to?(:view_time_entries, issue.project) + api.spent_hours(issue.spent_hours) + api.total_spent_hours(issue.total_spent_hours) + end render_api_custom_values issue.visible_custom_field_values, api diff --git a/test/integration/api_test/issues_test.rb b/test/integration/api_test/issues_test.rb index 7a57d39fe..4435df6fd 100644 --- a/test/integration/api_test/issues_test.rb +++ b/test/integration/api_test/issues_test.rb @@ -141,6 +141,34 @@ class Redmine::ApiTest::IssuesTest < Redmine::ApiTest::Base assert_select 'issues>issue>is_private', :text => 'false' end + def test_index_should_include_spent_hours + Issue.delete_all + parent = Issue.generate!(:estimated_hours => 2.0) + child = Issue.generate!(:parent_id => parent.id, :estimated_hours => 3.0) + TimeEntry.create!(:project => parent.project, :issue => parent, :user => parent.author, :spent_on => parent.author.today, + :hours => '2.5', :comments => '', :activity_id => TimeEntryActivity.first.id) + TimeEntry.create!(:project => child.project, :issue => child, :user => child.author, :spent_on => child.author.today, + :hours => '2.5', :comments => '', :activity_id => TimeEntryActivity.first.id) + + get '/issues.xml' + + assert_select 'issues issue', 2 + assert_select 'issues>issue>spent_hours', '2.5' + assert_select 'issues>issue>total_spent_hours', '5.0' + end + + def test_index_should_not_include_spent_hours + r = Role.anonymous + r.permissions.delete(:view_time_entries) + r.permissions_will_change! + r.save + + get '/issues.xml' + + assert_select 'issues>issue>spent_hours', false + assert_select 'issues>issue>total_spent_hours', false + end + def test_index_should_allow_timestamp_filtering Issue.delete_all Issue.generate!(:subject => '1').update_column(:updated_on, Time.parse("2014-01-02T10:25:00Z")) |